Hello community,
here is the log from the commit of package cloud-init for openSUSE:Factory checked in at 2018-03-28 10:34:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cloud-init (Old)
and /work/SRC/openSUSE:Factory/.cloud-init.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cloud-init"
Wed Mar 28 10:34:25 2018 rev:49 rq:591769 version:18.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/cloud-init/cloud-init.changes 2018-02-16 21:46:29.507150452 +0100
+++ /work/SRC/openSUSE:Factory/.cloud-init.new/cloud-init.changes 2018-03-28 10:34:30.446299784 +0200
@@ -1,0 +2,64 @@
+Wed Mar 21 22:27:40 UTC 2018 - rjschwei@suse.com
+
+- Update to version 18.1 (bsc#1085787, bsc#1084749)
+ + Forward port cloud-init-python2-sigpipe.patch
+ + Forward port 0003-Distro-dependent-chrony-config-file.patch
+ partial integration into 0001-Support-chrony-configuration-lp-1731619.patch
+ + Forward port cloud-init-no-python-linux-dist.patch
+ + Remove 0002-Disable-method-deprecation-warning-for-pylint.patch
+ use new cloud-init internal distro detection code
+ + Remove cloud-init-resize-ro-btrfs.patch included upstream
+ + Remove 0001-Set-syslog_fix_perms-for-SUSE-distro-addresses-bsc-1.patch
+ included upstream
+ + OVF: Fix VMware support for 64-bit platforms. [Sankar Tanguturi]
+ + ds-identify: Fix searching for iso9660 OVF cdroms. (LP: #1749980)
+ + SUSE: Fix groups used for ownership of cloud-init.log [Robert Schweikert]
+ + ds-identify: check /writable/system-data/ for nocloud seed.
+ (LP: #1747070)
+ + tests: run nosetests in cloudinit/ directory, fix py26 fallout.
+ + tools: run-centos: git clone rather than tar.
+ + tests: add support for logs with lxd from snap and future lxd 3.
+ (LP: #1745663)
+ + EC2: Fix get_instance_id called against cached datasource pickle.
+ (LP: #1748354)
+ + cli: fix cloud-init status to report running when before result.json
+ (LP: #1747965)
+ + net: accept network-config in netplan format for renaming interfaces
+ (LP: #1709715)
+ + Fix ssh keys validation in ssh_util [Tatiana Kholkina]
+ + docs: Update RTD content for cloud-init subcommands.
+ + OVF: Extend well-known labels to include OVFENV. (LP: #1698669)
+ + Fix potential cases of uninitialized variables. (LP: #1744796)
+ + tests: Collect script output as binary, collect systemd journal, fix lxd.
+ + HACKING.rst: mention setting user name and email via git config.
+ + Azure VM Preprovisioning support. [Douglas Jordan] (LP: #1734991)
+ + tools/read-version: Fix read-version when in a git worktree.
+ + docs: Fix typos in docs and one debug message. [Florian Grignon]
+ + btrfs: support resizing if root is mounted ro.
+ [Robert Schweikert] (LP: #1734787)
+ + OpenNebula: Improve network configuration support.
+ [Akihiko Ota] (LP: #1719157, #1716397, #1736750)
+ + tests: Fix EC2 Platform to return console output as bytes.
+ + tests: Fix attempted use of /run in a test case.
+ + GCE: Improvements and changes to ssh key behavior for default user.
+ [Max Illfelder] (LP: #1670456, #1707033, #1707037, #1707039)
+ + subp: make ProcessExecutionError have expected types in stderr, stdout.
+ + tests: when querying ntp server, do not do dns resolution.
+ + Recognize uppercase vfat disk labels [James Penick] (LP: #1598783)
+ + tests: remove zesty as supported OS to test [Joshua Powers]
+ + Do not log warning on config files that represent None. (LP: #1742479)
+ + tests: Use git hash pip dependency format for pylxd.
+ + tests: add integration requirements text file [Joshua Powers]
+ + MAAS: add check_instance_id based off oauth tokens. (LP: #1712680)
+ + tests: update apt sources list test [Joshua Powers]
+ + tests: clean up image properties [Joshua Powers]
+ + tests: rename test ssh keys to avoid appearance of leaking private keys.
+ [Joshua Powers]
+ + tests: Enable AWS EC2 Integration Testing [Joshua Powers]
+ + cli: cloud-init clean handles symlinks (LP: #1741093)
+ + SUSE: Add a basic test of network config rendering. [Robert Schweikert]
+ + Azure: Only bounce network when necessary. (LP: #1722668)
+ + lint: Fix lints seen by pylint version 1.8.1.
+ + cli: Fix error in cloud-init modules --mode=init. (LP: #1736600)
+
+-------------------------------------------------------------------
Old:
----
0001-Set-syslog_fix_perms-for-SUSE-distro-addresses-bsc-1.patch
0002-Disable-method-deprecation-warning-for-pylint.patch
cloud-init-17.2.tar.gz
cloud-init-resize-ro-btrfs.patch
New:
----
cloud-init-18.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cloud-init.spec ++++++
--- /var/tmp/diff_new_pack.bXzzFv/_old 2018-03-28 10:34:31.914246985 +0200
+++ /var/tmp/diff_new_pack.bXzzFv/_new 2018-03-28 10:34:31.918246842 +0200
@@ -18,7 +18,7 @@
%global configver 0.7
Name: cloud-init
-Version: 17.2
+Version: 18.1
Release: 0
License: GPL-3.0 and AGPL-3.0
Summary: Cloud node initialization tool
@@ -37,15 +37,11 @@
Patch27: cloud-init-sysconfig-netpathfix.patch
Patch29: datasourceLocalDisk.patch
Patch34: cloud-init-tests-set-exec.patch
-# FIXME cloud-init-resize-ro-btrfs.patch
-# proposed for upstream merge (lp#1734787)
-Patch36: cloud-init-resize-ro-btrfs.patch
# FIXME chrony support upstream
# These patches represent a working appraoch to supporting chrony
# Upstream is seeking a significant re-write which is not likely to happen
# before we need chrony support
Patch37: 0001-Support-chrony-configuration-lp-1731619.patch
-Patch38: 0002-Disable-method-deprecation-warning-for-pylint.patch
Patch39: 0003-Distro-dependent-chrony-config-file.patch
# FIXME switch to iproute2 tools
# Proposed for merging upstream
@@ -55,9 +51,6 @@
Patch41: cloud-init-no-python-linux-dist.patch
# Disable OVF tests
Patch42: cloud-init-skip-ovf-tests.patch
-# FIXME do not use the default user:groups for log file permission settings
-# Proposed for merging upstream
-Patch43: 0001-Set-syslog_fix_perms-for-SUSE-distro-addresses-bsc-1.patch
BuildRequires: fdupes
BuildRequires: filesystem
# pkg-config is needed to find correct systemd unit dir
@@ -196,14 +189,11 @@
%patch27
%patch29 -p0
%patch34
-%patch36
-%patch37 -p1
-%patch38 -p1
+%patch37
%patch39 -p1
%patch40 -p1
%patch41
%patch42
-%patch43 -p1
%build
%if 0%{?suse_version} && 0%{?suse_version} <= 1315
++++++ 0001-Support-chrony-configuration-lp-1731619.patch ++++++
++++ 741 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/cloud-init/0001-Support-chrony-configuration-lp-1731619.patch
++++ and /work/SRC/openSUSE:Factory/.cloud-init.new/0001-Support-chrony-configuration-lp-1731619.patch
++++++ 0003-Distro-dependent-chrony-config-file.patch ++++++
--- /var/tmp/diff_new_pack.bXzzFv/_old 2018-03-28 10:34:31.962245259 +0200
+++ /var/tmp/diff_new_pack.bXzzFv/_new 2018-03-28 10:34:31.966245115 +0200
@@ -1,67 +1,6 @@
-From 42cb1841035befa5b5823b3321c8fe92f2cb9087 Mon Sep 17 00:00:00 2001
-From: Robert Schweikert
-Date: Mon, 18 Dec 2017 14:54:10 -0500
-Subject: [PATCH 3/3] - Distro dependent chrony config file + We all like to
- stor ethe drift file in different places and name it differently :(
-
----
- cloudinit/config/cc_ntp.py | 8 +++++--
- ...{chrony.conf.tmpl => chrony.conf.opensuse.tmpl} | 0
- templates/chrony.conf.sles.tmpl | 25 ++++++++++++++++++++++
- 3 files changed, 31 insertions(+), 2 deletions(-)
- rename templates/{chrony.conf.tmpl => chrony.conf.opensuse.tmpl} (100%)
- create mode 100644 templates/chrony.conf.sles.tmpl
-
-diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py
-index 2f662a9e..1db648bc 100644
---- a/cloudinit/config/cc_ntp.py
-+++ b/cloudinit/config/cc_ntp.py
-@@ -50,6 +50,7 @@ schema = {
- 'examples': [
- dedent("""\
- ntp:
-+ enabled: true
- pools: [0.int.pool.ntp.org, 1.int.pool.ntp.org, ntp.myorg.org]
- servers:
- - ntp.server.local
-@@ -61,6 +62,9 @@ schema = {
- 'ntp': {
- 'type': ['object', 'null'],
- 'properties': {
-+ 'enabled': {
-+ "type": "boolean"
-+ },
- 'pools': {
- 'type': 'array',
- 'items': {
-@@ -109,7 +113,7 @@ def handle(name, cfg, cloud, log, _args):
- if not isinstance(ntp_cfg, (dict)):
- raise RuntimeError(("'ntp' key existed in config,"
- " but not a dictionary type,"
-- " is a %s %instead"), type_utils.obj_name(ntp_cfg))
-+ " is a %s instead"), type_utils.obj_name(ntp_cfg))
-
- if ntp_cfg.get('enabled') and ntp_cfg.get('enabled') == 'true':
- cloud.distro.set_timesync_client()
-@@ -129,7 +133,7 @@ def handle(name, cfg, cloud, log, _args):
- template_name = 'timesyncd.conf'
- elif client_name == 'chrony':
- confpath = CHRONY_CONF_FILE
-- template_name = 'chrony.conf'
-+ template_name = 'chrony.conf.%s' % cloud.distro.name
- else:
- if ntp_installable():
- service_name = 'ntp'
-diff --git a/templates/chrony.conf.tmpl b/templates/chrony.conf.opensuse.tmpl
-similarity index 100%
-rename from templates/chrony.conf.tmpl
-rename to templates/chrony.conf.opensuse.tmpl
-diff --git a/templates/chrony.conf.sles.tmpl b/templates/chrony.conf.sles.tmpl
-new file mode 100644
-index 00000000..38e84d85
--- /dev/null
-+++ b/templates/chrony.conf.sles.tmpl
-@@ -0,0 +1,25 @@
++++ templates/chrony.conf.sles.tmpl
+@@ -0,0 +1,24 @@
+## template:jinja
+# cloud-init generated file
+# See chrony.conf(5)
@@ -86,7 +25,30 @@
+
+# Enable kernel synchronization of the real-time clock (RTC).
+rtcsync
+--- /dev/null
++++ templates/chrony.conf.opensuse.tmpl
+@@ -0,0 +1,24 @@
++## template:jinja
++# cloud-init generated file
++# See chrony.conf(5)
++
++{% if pools %}# pools
++{% endif %}
++{% for pool in pools -%}
++pool {{pool}} iburst
++{% endfor %}
++{%- if servers %}# servers
++{% endif %}
++{% for server in servers -%}
++server {{server}} iburst
++{% endfor %}
++
++# Record the rate at which the the system clock gains/losses time
++driftfile /var/lib/chrony/drift
+
---
-2.13.6
-
++# Allow the system clock to be stepped in the first three updates
++# if its offset is larger than 1 second.
++makestep 1.0 3
++
++# Enable kernel synchronization of the real-time clock (RTC).
++rtcsync
++++++ cloud-init-17.2.tar.gz -> cloud-init-18.1.tar.gz ++++++
++++ 6292 lines of diff (skipped)
++++++ cloud-init-no-python-linux-dist.patch ++++++
--- /var/tmp/diff_new_pack.bXzzFv/_old 2018-03-28 10:34:32.298233175 +0200
+++ /var/tmp/diff_new_pack.bXzzFv/_new 2018-03-28 10:34:32.298233175 +0200
@@ -1,25 +1,22 @@
---- /dev/null
+--- cloudinit/tests/test_util.py.orig
+++ cloudinit/tests/test_util.py
-@@ -0,0 +1,129 @@
-+# This file is part of cloud-init. See LICENSE file for license information.
-+
-+"""Tests for cloudinit.util"""
-+
-+import logging
+@@ -3,10 +3,12 @@
+ """Tests for cloudinit.util"""
+
+ import logging
+import platform
-+
-+import cloudinit.util as util
-+
-+from cloudinit.tests.helpers import CiTestCase, mock
+
+ import cloudinit.util as util
+
+ from cloudinit.tests.helpers import CiTestCase, mock
+from textwrap import dedent
-+
-+LOG = logging.getLogger(__name__)
-+
-+MOUNT_INFO = [
-+ '68 0 8:3 / / ro,relatime shared:1 - btrfs /dev/sda1 ro,attr2,inode64',
-+ '153 68 254:0 / /home rw,relatime shared:101 - xfs /dev/sda2 rw,attr2'
-+]
-+
+
+ LOG = logging.getLogger(__name__)
+
+@@ -15,6 +17,29 @@ MOUNT_INFO = [
+ '153 68 254:0 / /home rw,relatime shared:101 - xfs /dev/sda2 rw,attr2'
+ ]
+
+OS_RELEASE_SLES = dedent("""\
+NAME="SLES"\n
+VERSION="12-SP3"\n
@@ -43,35 +40,13 @@
+UBUNTU_CODENAME=xenial\n
+""")
+
-+
-+class TestUtil(CiTestCase):
-+
-+ def test_parse_mount_info_no_opts_no_arg(self):
-+ result = util.parse_mount_info('/home', MOUNT_INFO, LOG)
-+ self.assertEqual(('/dev/sda2', 'xfs', '/home'), result)
-+
-+ def test_parse_mount_info_no_opts_arg(self):
-+ result = util.parse_mount_info('/home', MOUNT_INFO, LOG, False)
-+ self.assertEqual(('/dev/sda2', 'xfs', '/home'), result)
-+
-+ def test_parse_mount_info_with_opts(self):
-+ result = util.parse_mount_info('/', MOUNT_INFO, LOG, True)
-+ self.assertEqual(
-+ ('/dev/sda1', 'btrfs', '/', 'ro,relatime'),
-+ result
-+ )
-+
-+ @mock.patch('cloudinit.util.get_mount_info')
-+ def test_mount_is_rw(self, m_mount_info):
-+ m_mount_info.return_value = ('/dev/sda1', 'btrfs', '/', 'rw,relatime')
-+ is_rw = util.mount_is_read_write('/')
-+ self.assertEqual(is_rw, True)
-+
-+ @mock.patch('cloudinit.util.get_mount_info')
-+ def test_mount_is_ro(self, m_mount_info):
-+ m_mount_info.return_value = ('/dev/sda1', 'btrfs', '/', 'ro,relatime')
-+ is_rw = util.mount_is_read_write('/')
-+ self.assertEqual(is_rw, False)
+
+ class TestUtil(CiTestCase):
+
+@@ -44,3 +69,61 @@ class TestUtil(CiTestCase):
+ m_mount_info.return_value = ('/dev/sda1', 'btrfs', '/', 'ro,relatime')
+ is_rw = util.mount_is_read_write('/')
+ self.assertEqual(is_rw, False)
+
+ @mock.patch('os.path.exists')
+ @mock.patch('cloudinit.util.load_file')
@@ -132,7 +107,7 @@
+ return 1
--- cloudinit/util.py.orig
+++ cloudinit/util.py
-@@ -570,6 +570,43 @@ def get_cfg_option_str(yobj, key, defaul
+@@ -576,6 +576,43 @@ def get_cfg_option_str(yobj, key, defaul
def get_cfg_option_int(yobj, key, default=0):
return int(get_cfg_option_str(yobj, key, default=default))
@@ -176,7 +151,7 @@
def system_info():
info = {
-@@ -578,19 +615,19 @@ def system_info():
+@@ -584,19 +621,19 @@ def system_info():
'release': platform.release(),
'python': platform.python_version(),
'uname': platform.uname(),
@@ -199,82 +174,9 @@
var = 'suse'
else:
var = 'linux'
-@@ -2053,7 +2090,7 @@ def expand_package_list(version_fmt, pkg
- return pkglist
-
-
--def parse_mount_info(path, mountinfo_lines, log=LOG):
-+def parse_mount_info(path, mountinfo_lines, log=LOG, get_mnt_opts=False):
- """Return the mount information for PATH given the lines from
- /proc/$$/mountinfo."""
-
-@@ -2115,11 +2152,16 @@ def parse_mount_info(path, mountinfo_lin
-
- match_mount_point = mount_point
- match_mount_point_elements = mount_point_elements
-+ mount_options = parts[5]
-
-- if devpth and fs_type and match_mount_point:
-- return (devpth, fs_type, match_mount_point)
-+ if get_mnt_opts:
-+ if devpth and fs_type and match_mount_point and mount_options:
-+ return (devpth, fs_type, match_mount_point, mount_options)
- else:
-- return None
-+ if devpth and fs_type and match_mount_point:
-+ return (devpth, fs_type, match_mount_point)
-+
-+ return None
-
-
- def parse_mtab(path):
-@@ -2189,7 +2231,7 @@ def parse_mount(path):
- return None
-
-
--def get_mount_info(path, log=LOG):
-+def get_mount_info(path, log=LOG, get_mnt_opts=False):
- # Use /proc/$$/mountinfo to find the device where path is mounted.
- # This is done because with a btrfs filesystem using os.stat(path)
- # does not return the ID of the device.
-@@ -2221,7 +2263,7 @@ def get_mount_info(path, log=LOG):
- mountinfo_path = '/proc/%s/mountinfo' % os.getpid()
- if os.path.exists(mountinfo_path):
- lines = load_file(mountinfo_path).splitlines()
-- return parse_mount_info(path, lines, log)
-+ return parse_mount_info(path, lines, log, get_mnt_opts)
- elif os.path.exists("/etc/mtab"):
- return parse_mtab(path)
- else:
-@@ -2329,7 +2371,8 @@ def pathprefix2dict(base, required=None,
- missing.append(f)
-
- if len(missing):
-- raise ValueError("Missing required files: %s", ','.join(missing))
-+ raise ValueError(
-+ 'Missing required files: {files}'.format(files=','.join(missing)))
-
- return ret
-
-@@ -2606,4 +2649,10 @@ def wait_for_files(flist, maxwait, naple
- return need
-
-
-+def mount_is_read_write(mount_point):
-+ """Check whether the given mount point is mounted rw"""
-+ result = get_mount_info(mount_point, get_mnt_opts=True)
-+ mount_opts = result[-1].split(',')
-+ return mount_opts[0] == 'rw'
-+
- # vi: ts=4 expandtab
--- setup.py.orig
+++ setup.py
-@@ -1,3 +1,4 @@
-+
- # Copyright (C) 2009 Canonical Ltd.
- # Copyright (C) 2012 Yahoo! Inc.
- #
-@@ -25,7 +26,7 @@ from distutils.errors import DistutilsAr
+@@ -25,7 +25,7 @@ from distutils.errors import DistutilsAr
import subprocess
RENDERED_TMPD_PREFIX = "RENDERED_TEMPD"
@@ -283,7 +185,7 @@
def is_f(p):
return os.path.isfile(p)
-@@ -114,10 +115,20 @@ def render_tmpl(template):
+@@ -114,10 +114,20 @@ def render_tmpl(template):
atexit.register(shutil.rmtree, tmpd)
bname = os.path.basename(template).rstrip(tmpl_ext)
fpath = os.path.join(tmpd, bname)
@@ -305,7 +207,7 @@
INITSYS_FILES = {
'sysvinit': [f for f in glob('sysvinit/redhat/*') if is_f(f)],
-@@ -227,6 +238,19 @@ if not in_virtualenv():
+@@ -227,6 +237,19 @@ if not in_virtualenv():
for k in INITSYS_ROOTS.keys():
INITSYS_ROOTS[k] = "/" + INITSYS_ROOTS[k]
@@ -325,7 +227,7 @@
data_files = [
(ETC + '/cloud', [render_tmpl("config/cloud.cfg.tmpl")]),
(ETC + '/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
-@@ -259,7 +283,7 @@ requirements = read_requires()
+@@ -259,7 +282,7 @@ requirements = read_requires()
setuptools.setup(
name='cloud-init',
version=get_version(),
++++++ cloud-init-python2-sigpipe.patch ++++++
--- /var/tmp/diff_new_pack.bXzzFv/_old 2018-03-28 10:34:32.326232167 +0200
+++ /var/tmp/diff_new_pack.bXzzFv/_new 2018-03-28 10:34:32.330232023 +0200
@@ -1,5 +1,3 @@
-Index: cloudinit/util.py
-===================================================================
--- cloudinit/util.py.orig
+++ cloudinit/util.py
@@ -35,6 +35,7 @@ import time
@@ -10,13 +8,13 @@
from six.moves.urllib import parse as urlparse
import six
-@@ -1858,7 +1859,8 @@ def subp(args, data=None, rcs=None, env=
-
+@@ -1868,7 +1869,8 @@ def subp(args, data=None, rcs=None, env=
+ try:
sp = subprocess.Popen(args, stdout=stdout,
stderr=stderr, stdin=stdin,
- env=env, shell=shell)
+ env=env, shell=shell,
+ preexec_fn=lambda: signal(SIGPIPE, SIG_DFL))
(out, err) = sp.communicate(data)
-
- # Just ensure blank instead of none.
+ except OSError as e:
+ raise ProcessExecutionError(