Hello community,

here is the log from the commit of package cloud-init for openSUSE:Factory 
checked in at 2016-11-12 13:02:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cloud-init (Old)
 and      /work/SRC/openSUSE:Factory/.cloud-init.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cloud-init"

Changes:
--------
--- /work/SRC/openSUSE:Factory/cloud-init/cloud-init.changes    2016-10-02 
00:07:21.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.cloud-init.new/cloud-init.changes       
2016-11-12 13:02:33.000000000 +0100
@@ -1,0 +2,101 @@
+Tue Nov  1 15:56:50 UTC 2016 - [email protected]
+
+- Modify suseIntegratedHandler.patch (bsc#1007529)
+  + Fall back to the previous method of writing network information
+    We have to work out upstream how to have distro specific renderer
+    for sysconfig
+
+-------------------------------------------------------------------
+Mon Oct 31 12:44:21 UTC 2016 - [email protected]
+
+- Add cloud-init-sysconfig-netpathfix.patch (bsc#1007529)
+  + Fix the default path for network scripts
+- Cosmetic changes to suseIntegratedHandler.patch
+
+-------------------------------------------------------------------
+Sat Oct 29 13:24:13 UTC 2016 - [email protected]
+
+- Update cloud-init-no-dmidecode-on-ppc64.patch (bsc#1005616)
+  + aarch64 does support dmidecode
+
+-------------------------------------------------------------------
+Sat Oct 29 12:40:38 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch
+  + Break another cycle this one in -final
+
+-------------------------------------------------------------------
+Fri Oct 28 20:14:48 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch
+  + Better match upstream intend Ubuntu networking.service is equivalent
+    to SUSE wicked, thus we cannot translate networking to network, but need
+    to translate it to wicked
+
+-------------------------------------------------------------------
+Fri Oct 28 19:37:24 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch
+  + We need the following order:
+    - something brings networking fully up (in our case wicked)
+    - cloud-init.service runs
+    - network-online.target is reached
+
+-------------------------------------------------------------------
+Fri Oct 28 19:20:32 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch
+  + The network must be up an running in order to get ssh key injected
+
+-------------------------------------------------------------------
+Fri Oct 28 15:21:39 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch
+  + Had self reference and thus cloud-init.service was never executed
+    which caused ssh key loading failure
+
+-------------------------------------------------------------------
+Fri Oct 28 04:56:29 UTC 2016 - [email protected]
+
+- Do not own /lib/udev to not conflict with udev rpm
+
+-------------------------------------------------------------------
+Thu Oct 27 19:40:31 UTC 2016 - [email protected]
+
+- Forward port suseIntegratedHandler.patch
+  + Implement new abstract interfaces
+  + Some minor implementation fixes
+
+-------------------------------------------------------------------
+Wed Oct 26 14:27:55 UTC 2016 - [email protected]
+
+- Appease the build service, differences between OBS and IBS,
+  and own the directories
+
+-------------------------------------------------------------------
+Wed Oct 26 11:31:34 UTC 2016 - [email protected]
+
+- Fix package, udev rules should be in /usr for distros after
+  SLES 11
+
+-------------------------------------------------------------------
+Wed Oct 19 13:23:35 UTC 2016 - [email protected]
+
+- add cloud-init-digital-ocean-datasource-enable-by-default.patch,
+  cloud-init-digital-ocean-datasource.patch: add DigitalOcean support
+- run tests on build
+
+-------------------------------------------------------------------
+Tue Oct 11 15:42:35 UTC 2016 - [email protected]
+
+- Add cloud-init-handle-no-carrier.patch (boo#1003977)
+  - Handle the exception when attempting to detect if the network
+    device is up when it is not
+
+-------------------------------------------------------------------
+Mon Oct 10 20:28:47 UTC 2016 - [email protected]
+
+- Update cloud-init-service.patch (boo#999942)
+  - Backport upstream commits 3705bb5964a and 6e45ffb21e96
+
+-------------------------------------------------------------------

New:
----
  cloud-init-digital-ocean-datasource-enable-by-default.patch
  cloud-init-digital-ocean-datasource.patch
  cloud-init-handle-no-carrier.patch
  cloud-init-sysconfig-netpathfix.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cloud-init.spec ++++++
--- /var/tmp/diff_new_pack.6XNG09/_old  2016-11-12 13:02:34.000000000 +0100
+++ /var/tmp/diff_new_pack.6XNG09/_new  2016-11-12 13:02:34.000000000 +0100
@@ -45,12 +45,35 @@
 Patch21:        cloud-init-net-eni.patch
 Patch22:        cloud-init-service.patch
 Patch23:        cloud-init-fix-unicode-handling-binarydecode.patch
+# From upstream patch
+Patch24:        cloud-init-handle-no-carrier.patch
+Patch25:        cloud-init-digital-ocean-datasource.patch
+Patch26:        cloud-init-digital-ocean-datasource-enable-by-default.patch
+Patch27:        cloud-init-sysconfig-netpathfix.patch
 BuildRequires:  fdupes
 BuildRequires:  filesystem
 BuildRequires:  python-devel
 BuildRequires:  python-setuptools
 # pkg-config is needed to find correct systemd unit dir
 BuildRequires:  pkg-config
+# needed for /lib/udev
+BuildRequires:  udev
+%if 0%{?suse_version} > 1320
+# Test requirements
+BuildRequires:  python-Cheetah
+BuildRequires:  python-Jinja2
+BuildRequires:  python-PrettyTable
+BuildRequires:  python-PyYAML
+BuildRequires:  python-argparse
+BuildRequires:  python-configobj
+BuildRequires:  python-contextlib2
+BuildRequires:  python-httpretty
+BuildRequires:  python-jsonpatch
+BuildRequires:  python-mock
+BuildRequires:  python-oauthlib
+BuildRequires:  python-requests
+BuildRequires:  python-testtools
+%endif
 Requires:       bash
 Requires:       file
 Requires:       growpart
@@ -149,6 +172,10 @@
 %patch21
 %patch22
 %patch23
+%patch24
+%patch25 -p1
+%patch26 -p1
+%patch27
 
 %if 0%{?suse_version} <= 1130
 # disable ecdsa for SLE 11 (not available)
@@ -158,6 +185,18 @@
 %build
 python setup.py build
 
+
+%if 0%{?suse_version} > 1320
+%check
+# these tests are currently failing due to suse patches
+rm -v tests/unittests/test_distros/test_netconfig.py
+rm -v tests/unittests/test_net.py
+rm -v tests/unittests/test_datasource/test_opennebula.py
+rm -v tests/unittests/test_datasource/test_cloudstack.py
+python -m testtools.run
+%endif
+
+
 %install
 python setup.py install --root=%{buildroot} --prefix=%{_prefix} 
--install-lib=%{python_sitelib} --init-system=%{initsys}
 find %{buildroot} \( -name .gitignore -o -name .placeholder \) -delete
@@ -188,8 +227,10 @@
 %endif
 %endif
 %if 0%{?suse_version} && 0%{?suse_version} > 1110
-mkdir %{buildroot}/%{_sysconfdir}/rsyslog.d
+mkdir -p %{buildroot}/%{_sysconfdir}/rsyslog.d
+mkdir -p %{buildroot}/usr/lib/udev/rules.d/
 cp -a %{SOURCE2} %{buildroot}/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf
+mv %{buildroot}/lib/udev/rules.d/66-azure-ephemeral.rules 
%{buildroot}/usr/lib/udev/rules.d/
 %endif
 
 # remove debian/ubuntu specific profile.d file (bnc#779553)
@@ -252,16 +293,20 @@
 %if 0%{?suse_version} && 0%{?suse_version} > 1110
 %dir %{_sysconfdir}/rsyslog.d
 %{_sysconfdir}/rsyslog.d/21-cloudinit.conf
-%endif
+/usr/lib/udev/rules.d/66-azure-ephemeral.rules
+# This if condition really distinquished between OBS and IBS.
+# For SLE 12 builds in OBS owning the directories is not required, while
+# SLE 12 builds in IBS require owning the directories
+%else
 /lib/udev/rules.d/66-azure-ephemeral.rules
+%endif
 %dir %attr(0755, root, root) %{_localstatedir}/lib/cloud
 %dir %{docdir}
 %dir /etc/NetworkManager
 %dir /etc/NetworkManager/dispatcher.d
 %dir /etc/dhcp
 %dir /etc/dhcp/dhclient-exit-hooks.d
-%dir /lib/udev
-%dir /lib/udev/rules.d
+
 
 
 %files doc

++++++ cloud-init-digital-ocean-datasource-enable-by-default.patch ++++++
>From 7ae201166402fbf2e6c1632028be956a954835ef Mon Sep 17 00:00:00 2001
From: Scott Moser <[email protected]>
Date: Tue, 18 Oct 2016 12:30:38 -0400
Subject: DigitalOcean: enable usage of data source by default.

Just add DigitalOcean to the list of datasources that are used
if there is no 'datasource_list' provided in config.

diff --git a/cloudinit/settings.py b/cloudinit/settings.py
index 8c258ea..a968271 100644
--- a/cloudinit/settings.py
+++ b/cloudinit/settings.py
@@ -32,6 +32,7 @@ CFG_BUILTIN = {
         'NoCloud',
         'ConfigDrive',
         'OpenNebula',
+        'DigitalOcean',
         'Azure',
         'AltCloud',
         'OVF',
-- 
cgit v0.10.2

++++++ cloud-init-digital-ocean-datasource.patch ++++++
++++ 782 lines (skipped)

++++++ cloud-init-handle-no-carrier.patch ++++++
--- cloudinit/net/__init__.py.orig
+++ cloudinit/net/__init__.py
@@ -33,10 +33,12 @@ def sys_dev_path(devname, path=""):
 
 
 def read_sys_net(devname, path, translate=None, enoent=None, keyerror=None):
+    dev_path = sys_dev_path(devname, path)
     try:
-        contents = util.load_file(sys_dev_path(devname, path))
+        contents = util.load_file(dev_path)
     except (OSError, IOError) as e:
-        if getattr(e, 'errno', None) in (errno.ENOENT, errno.ENOTDIR):
+        e_errno = getattr(e, 'errno', None)
+       if e_errno in (errno.ENOENT, errno.ENOTDIR):
             if enoent is not None:
                 return enoent
         raise
@@ -109,24 +111,9 @@ def is_disabled_cfg(cfg):
     return cfg.get('config') == "disabled"
 
 
-def sys_netdev_info(name, field):
-    if not os.path.exists(os.path.join(SYS_CLASS_NET, name)):
-        raise OSError("%s: interface does not exist in %s" %
-                      (name, SYS_CLASS_NET))
-    fname = os.path.join(SYS_CLASS_NET, name, field)
-    if not os.path.exists(fname):
-        raise OSError("%s: could not find sysfs entry: %s" % (name, fname))
-    data = util.load_file(fname)
-    if data[-1] == '\n':
-        data = data[:-1]
-    return data
-
-
 def generate_fallback_config():
     """Determine which attached net dev is most likely to have a connection and
        generate network state to run dhcp on that interface"""
-    # by default use eth0 as primary interface
-    nconf = {'config': [], 'version': 1}
 
     # get list of interfaces that could have connections
     invalid_interfaces = set(['lo'])
@@ -143,28 +130,30 @@ def generate_fallback_config():
             # skip any bridges
             continue
         try:
-            carrier = int(sys_netdev_info(interface, 'carrier'))
+            carrier = read_sys_net(interface, 'carrier', enoent=False)
             if carrier:
+                carrier = int(carrier)
                 connected.append(interface)
                 continue
-        except OSError:
+        except (IOError, OSError, TypeError):
             pass
         # check if nic is dormant or down, as this may make a nick appear to
         # not have a carrier even though it could acquire one when brought
         # online by dhclient
         try:
-            dormant = int(sys_netdev_info(interface, 'dormant'))
+            dormant = read_sys_net(interface, 'dormant', enoent=False)
             if dormant:
+                domant = int(dormant)
                 possibly_connected.append(interface)
                 continue
-        except OSError:
+        except (IOError, OSError, TypeError):
             pass
         try:
-            operstate = sys_netdev_info(interface, 'operstate')
+            operstate = read_sys_net(interface, 'operstate', enoent=False)
             if operstate in ['dormant', 'down', 'lowerlayerdown', 'unknown']:
                 possibly_connected.append(interface)
                 continue
-        except OSError:
+        except (IOError, OSError):
             pass
 
     # don't bother with interfaces that might not be connected if there are
@@ -173,23 +162,29 @@ def generate_fallback_config():
         potential_interfaces = connected
     else:
         potential_interfaces = possibly_connected
-    # if there are no interfaces, give up
-    if not potential_interfaces:
-        return
+
     # if eth0 exists use it above anything else, otherwise get the interface
-    # that looks 'first'
-    if DEFAULT_PRIMARY_INTERFACE in potential_interfaces:
-        name = DEFAULT_PRIMARY_INTERFACE
+    # that we can read 'first' (using the sorted defintion of first).
+    names = [DEFAULT_PRIMARY_INTERFACE]
+    names.extend(sorted(potential_interfaces))
+    target_name = None
+    target_mac = None
+    for name in names:
+        if name not in potential_interfaces:
+            continue
+        mac = read_sys_net(name, 'address', enoent=False)
+       if mac:
+            target_name = name
+           target_mac = mac
+           break
+    if target_mac and target_name:
+        nconf = {'config': [], 'version': 1}
+       nconf['config'].append(
+            {'type': 'physical', 'name': target_name,
+            'mac_address': target_mac, 'subnets': [{'type': 'dhcp'}]})
+       return nconf
     else:
-        name = sorted(potential_interfaces)[0]
-
-    mac = sys_netdev_info(name, 'address')
-    target_name = name
-
-    nconf['config'].append(
-        {'type': 'physical', 'name': target_name,
-         'mac_address': mac, 'subnets': [{'type': 'dhcp'}]})
-    return nconf
+        return None
 
 
 def apply_network_config_names(netcfg, strict_present=True, strict_busy=True):
--- cloudinit/net/cmdline.py.orig
+++ cloudinit/net/cmdline.py
@@ -26,7 +26,7 @@ import sys
 import six
 
 from . import get_devicelist
-from . import sys_netdev_info
+from . import read_sys_net
 
 from cloudinit import util
 
@@ -197,7 +197,10 @@ def read_kernel_cmdline_config(files=Non
         return None
 
     if mac_addrs is None:
-        mac_addrs = dict((k, sys_netdev_info(k, 'address'))
-                         for k in get_devicelist())
+        mac_addrs = {}
+       for k in get_devicelist():
+            mac_addr = read_sys_net(k, 'address', enoent=False)
+           if mac_addr:
+                mac_addrs[k] = mac_addr
 
     return config_from_klibc_net_cfg(files=files, mac_addrs=mac_addrs)
--- tests/unittests/test_net.py.orig
+++ tests/unittests/test_net.py
@@ -422,7 +422,7 @@ pre-down route del -net 10.0.0.0 netmask
 }
 
 
-def _setup_test(tmp_dir, mock_get_devicelist, mock_sys_netdev_info,
+def _setup_test(tmp_dir, mock_get_devicelist, mock_read_sys_net,
                 mock_sys_dev_path):
     mock_get_devicelist.return_value = ['eth1000']
     dev_characteristics = {
@@ -435,10 +435,10 @@ def _setup_test(tmp_dir, mock_get_device
         }
     }
 
-    def netdev_info(name, field):
+    def fake_read(devname, path, translate=None, enoent=None, keyerror=None):
         return dev_characteristics[name][field]
 
-    mock_sys_netdev_info.side_effect = netdev_info
+    mock_read_sys_net.side_effect = fake_read
 
     def sys_dev_path(devname, path=""):
         return tmp_dir + devname + "/" + path
@@ -454,15 +454,15 @@ def _setup_test(tmp_dir, mock_get_device
 class TestSysConfigRendering(TestCase):
 
     @mock.patch("cloudinit.net.sys_dev_path")
-    @mock.patch("cloudinit.net.sys_netdev_info")
+    @mock.patch("cloudinit.net.read_sys_net")
     @mock.patch("cloudinit.net.get_devicelist")
     def test_default_generation(self, mock_get_devicelist,
-                                mock_sys_netdev_info,
+                                mock_read_sys_net,
                                 mock_sys_dev_path):
         tmp_dir = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, tmp_dir)
         _setup_test(tmp_dir, mock_get_devicelist,
-                    mock_sys_netdev_info, mock_sys_dev_path)
+                    mock_read_sys_net, mock_sys_dev_path)
 
         network_cfg = net.generate_fallback_config()
         ns = network_state.parse_net_config_data(network_cfg,
@@ -511,15 +511,15 @@ USERCTL=no
 class TestEniNetRendering(TestCase):
 
     @mock.patch("cloudinit.net.sys_dev_path")
-    @mock.patch("cloudinit.net.sys_netdev_info")
+    @mock.patch("cloudinit.net.read_sys_net")
     @mock.patch("cloudinit.net.get_devicelist")
     def test_default_generation(self, mock_get_devicelist,
-                                mock_sys_netdev_info,
+                                mock_read_sys_net,
                                 mock_sys_dev_path):
         tmp_dir = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, tmp_dir)
         _setup_test(tmp_dir, mock_get_devicelist,
-                    mock_sys_netdev_info, mock_sys_dev_path)
+                    mock_read_sys_net, mock_sys_dev_path)
 
         network_cfg = net.generate_fallback_config()
         ns = network_state.parse_net_config_data(network_cfg,
++++++ cloud-init-no-dmidecode-on-ppc64.patch ++++++
--- /var/tmp/diff_new_pack.6XNG09/_old  2016-11-12 13:02:34.000000000 +0100
+++ /var/tmp/diff_new_pack.6XNG09/_new  2016-11-12 13:02:34.000000000 +0100
@@ -5,7 +5,18 @@
      # running dmidecode can be problematic on some arches (LP: #1243287)
      uname_arch = os.uname()[4]
 -    if uname_arch.startswith("arm") or uname_arch == "aarch64":
-+    if uname_arch.startswith("arm") or uname_arch == "aarch64" or 
uname_arch.startswith("ppc"):
++    if uname_arch.startswith("arm") or uname_arch.startswith("ppc"):
          LOG.debug("dmidata is not supported on %s", uname_arch)
          return None
  
+--- tests/unittests/test_util.py.orig
++++ tests/unittests/test_util.py
+@@ -384,7 +384,7 @@ class TestReadDMIData(helpers.Filesystem
+         dmi_name = 'use-dmidecode'
+         self._configure_dmidecode_return(dmi_name, dmi_val)
+ 
+-        expected = {'armel': None, 'aarch64': None, 'x86_64': dmi_val}
++        expected = {'armel': None, 'aarch64': dmi_val, 'x86_64': dmi_val}
+         found = {}
+         # we do not run the 'dmi-decode' binary on some arches
+         # verify that anything requested that is not in the sysfs dir

++++++ cloud-init-service.patch ++++++
--- /var/tmp/diff_new_pack.6XNG09/_old  2016-11-12 13:02:34.000000000 +0100
+++ /var/tmp/diff_new_pack.6XNG09/_new  2016-11-12 13:02:34.000000000 +0100
@@ -1,13 +1,51 @@
 --- systemd/cloud-init.service.orig
 +++ systemd/cloud-init.service
-@@ -1,8 +1,8 @@
+@@ -1,9 +1,18 @@
  [Unit]
  Description=Initial cloud-init job (metadata service crawler)
 -After=cloud-init-local.service networking.service
-+After=cloud-init-local.service network.service
- Before=network-online.target sshd.service sshd-keygen.service 
systemd-user-sessions.service
+-Before=network-online.target sshd.service sshd-keygen.service 
systemd-user-sessions.service
 -Requires=networking.service
-+Requires=network.service
- Wants=local-fs.target cloud-init-local.service sshd.service 
sshd-keygen.service
+-Wants=local-fs.target cloud-init-local.service sshd.service 
sshd-keygen.service
++DefaultDependencies=no
++Wants=cloud-init-local.service
++Wants=local-fs.target
++Wants=sshd-keygen.service
++Wants=sshd.service
++After=cloud-init-local.service
++After=wicked.service
++Requires=wicked.service
++Before=network-online.target
++Before=sshd-keygen.service
++Before=sshd.service
++Before=systemd-user-sessions.service
++Conflicts=shutdown.target
  
  [Service]
+ Type=oneshot
+--- systemd/cloud-init-local.service.orig
++++ systemd/cloud-init-local.service
+@@ -4,9 +4,10 @@ DefaultDependencies=no
+ Wants=local-fs.target
+ Wants=network-pre.target
+ After=local-fs.target
+-Conflicts=shutdown.target
++Before=basic.target
+ Before=network-pre.target
+ Before=shutdown.target
++Conflicts=shutdown.target
+ 
+ [Service]
+ Type=oneshot
+--- systemd/cloud-final.service.orig
++++ systemd/cloud-final.service
+@@ -1,6 +1,8 @@
+ [Unit]
+ Description=Execute cloud user/final scripts
+-After=network-online.target cloud-config.service rc-local.service 
multi-user.target
++After=cloud-config.service
++After=network-online.target
++After=rc-local.service
+ Before=systemd-logind.service
+ Wants=network-online.target cloud-config.service
+ 

++++++ cloud-init-sysconfig-netpathfix.patch ++++++
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -94,7 +94,7 @@ class ConfigMap(object):
 class Route(ConfigMap):
     """Represents a route configuration."""
 
-    route_fn_tpl = '%(base)s/network-scripts/route-%(name)s'
+    route_fn_tpl = '%(base)s/network/route-%(name)s'
 
     def __init__(self, route_name, base_sysconf_dir):
         super(Route, self).__init__()
@@ -119,7 +119,7 @@ class Route(ConfigMap):
 class NetInterface(ConfigMap):
     """Represents a sysconfig/networking-script (and its config + children)."""
 
-    iface_fn_tpl = '%(base)s/network-scripts/ifcfg-%(name)s'
+    iface_fn_tpl = '%(base)s/network/ifcfg-%(name)s'
 
     iface_types = {
         'ethernet': 'Ethernet',
++++++ suseIntegratedHandler.patch ++++++
--- /var/tmp/diff_new_pack.6XNG09/_old  2016-11-12 13:02:34.000000000 +0100
+++ /var/tmp/diff_new_pack.6XNG09/_new  2016-11-12 13:02:34.000000000 +0100
@@ -1,9 +1,9 @@
 --- /dev/null
 +++ cloudinit/distros/opensuse.py
-@@ -0,0 +1,212 @@
+@@ -0,0 +1,226 @@
 +# vi: ts=4 expandtab
 +#
-+#    Copyright (C) 2014 SUSE LLC
++#    Copyright (C) 2016 SUSE LLC
 +#    Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
 +#
 +#    Author: Robert Schweikert <[email protected]>
@@ -33,30 +33,34 @@
 +
 +from cloudinit.distros import net_util
 +from cloudinit.distros import rhel_util as rhutil
++#from cloudinit.net import sysconfig
++#from cloudinit.net.network_state import parse_net_config_data
 +from cloudinit.settings import PER_INSTANCE
 +
 +LOG = logging.getLogger(__name__)
 +
 +class Distro(distros.Distro):
 +    clock_conf_fn = '/etc/sysconfig/clock'
-+    locale_conf_fn = '/etc/sysconfig/language'
-+    network_conf_fn = '/etc/sysconfig/network'
 +    hostname_conf_fn = '/etc/HOSTNAME'
 +    init_cmd = ['service']
++    locale_conf_fn = '/etc/sysconfig/language'
++    network_conf_fn = '/etc/sysconfig/network'
 +    network_script_tpl = '/etc/sysconfig/network/ifcfg-%s'
 +    resolve_conf_fn = '/etc/resolv.conf'
 +    route_conf_tpl = '/etc/sysconfig/network/ifroute-%s'
-+    tz_local_fn = '/etc/localtime'
++    systemd_hostname_conf_fn = '/etc/hostname'
 +    systemd_locale_conf_fn = '/etc/locale.conf'
++    tz_local_fn = '/etc/localtime'
 +
 +    def __init__(self, name, cfg, paths):
 +        distros.Distro.__init__(self, name, cfg, paths)
++#        self._net_renderer = sysconfig.Renderer()
 +        # This will be used to restrict certain
 +        # calls from repeatly happening (when they
 +        # should only happen say once per instance...)
 +        self._runner = helpers.Runners(paths)
-+        cfg['ssh_svcname'] = 'sshd'
 +        self.osfamily = 'suse'
++        cfg['ssh_svcname'] = 'sshd'
 +        self.systemdDist = util.which('systemctl')
 +        if self.systemdDist:
 +            self.init_cmd = ['systemctl']
@@ -149,7 +153,10 @@
 +        return conf
 +
 +    def _read_system_hostname(self):
-+        host_fn = self.hostname_conf_fn
++        if self.systemdDist:
++            host_fn = self.systemd_hostname_conf_fn
++        else:
++            host_fn = self.hostname_conf_fn
 +        return (host_fn, self._read_hostname(host_fn))
 +
 +    def _write_hostname(self, hostname, out_fn):
@@ -213,6 +220,13 @@
 +            rhutil.update_resolve_conf_file(self.resolve_conf_fn,
 +                                               nameservers, searchservers)
 +        return dev_names
++
++# New interface cannot yet be implemented/used as we have to figure out
++# how to have a distro specific renderer
++#    def _write_network_config(self, netconfig):
++#        ns = parse_net_config_data(netconfig)
++#        self._net_renderer.render_network_state("/", ns)
++#        return []
 --- cloudinit/distros/sles.py.orig
 +++ cloudinit/distros/sles.py
 @@ -1,10 +1,9 @@


Reply via email to