SHA256
1
0
forked from pool/cloud-init

- Update to version 19.4

+ Remove patches included upstream:
    - cloud-init-after-wicked.patch
    - cloud-init-noresolv-merge-no-dns-data.diff
    - cloud-init-renderer-detect.patch
    - cloud-init-trigger-udev.patch
  + Removed patches merged with cloud-init-mix-static-dhcp.patch
    - cloud-init-proper-ipv6-setting.patch
    - cloud-init-static-net.patch
  + Added cloud-init-mix-static-dhcp.patch (bsc#1157894)
  + Forward port cloud-init-sysconf-path.patch
  + doc: specify _ over - in cloud config modules
  + [Joshua Powers] (LP: #1293254)
  + tools: Detect python to use via env in migrate-lp-user-to-github
  + [Adam Dobrawy]
  + Partially revert "fix unlocking method on FreeBSD" (#116)
  + tests: mock uid when running as root (#113)
  + [Joshua Powers] (LP: #1856096)
  + cloudinit/netinfo: remove unused getgateway (#111)
  + docs: clear up apt config sections (#107) [Joshua Powers] (LP: #1832823)
  + doc: add kernel command line option to user data (#105)
  + [Joshua Powers] (LP: #1846524)
  + config/cloud.cfg.d: update README [Joshua Powers] (LP: #1855006)
  + azure: avoid re-running cloud-init when instance-id is byte-swapped
  + (#84) [AOhassan]
  + fix unlocking method on FreeBSD [Igor Galić] (LP: #1854594)
  + debian: add reference to the manpages [Joshua Powers]
  + ds_identify: if /sys is not available use dmidecode (#42)
  + [Igor Galić] (LP: #1852442)
  + docs: add cloud-id manpage [Joshua Powers]

OBS-URL: https://build.opensuse.org/package/show/Cloud:Tools/cloud-init?expand=0&rev=158
This commit is contained in:
Robert Schweikert 2020-01-16 12:06:38 +00:00 committed by Git OBS Bridge
parent 7c5eaf65d4
commit 152b453122
12 changed files with 1873 additions and 194 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f5ead1b3c782c159669f8f8779c45d16a986c7405425d75f915ec55301d83a07
size 1028832

3
cloud-init-19.4.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a2c1f318cbfb28c13b41bbb0de5ab9b21d7cf4b7118551366cd508380124f262
size 1091893

View File

@ -1,13 +0,0 @@
Index: cloud-init-19.1/systemd/cloud-init.service.tmpl
===================================================================
--- cloud-init-19.1.orig/systemd/cloud-init.service.tmpl
+++ cloud-init-19.1/systemd/cloud-init.service.tmpl
@@ -14,7 +14,7 @@ After=networking.service
After=network.service
{% endif %}
{% if variant in ["suse"] %}
-Before=wicked.service
+After=wicked.service
# setting hostname via hostnamectl depends on dbus, which otherwise
# would not be guaranteed at this point.
After=dbus.service

File diff suppressed because it is too large Load Diff

View File

@ -1,68 +0,0 @@
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
index be5dede..1708990 100644
--- a/cloudinit/net/sysconfig.py
+++ b/cloudinit/net/sysconfig.py
@@ -578,6 +578,10 @@ class Renderer(renderer.Renderer):
@staticmethod
def _render_dns(network_state, existing_dns_path=None):
+ # skip writing resolv.conf if network_state doesn't include any input.
+ if not any([len(network_state.dns_nameservers),
+ len(network_state.dns_searchdomains)]):
+ return None
content = resolv_conf.ResolvConf("")
if existing_dns_path and os.path.isfile(existing_dns_path):
content = resolv_conf.ResolvConf(util.load_file(existing_dns_path))
@@ -585,8 +589,6 @@ class Renderer(renderer.Renderer):
content.add_nameserver(nameserver)
for searchdomain in network_state.dns_searchdomains:
content.add_search_domain(searchdomain)
- if not str(content):
- return None
header = _make_header(';')
content_str = str(content)
if not content_str.startswith(header):
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
index e578992..82eb18f 100644
--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -2701,6 +2701,10 @@ USERCTL=no
ns = network_state.parse_net_config_data(CONFIG_V1_EXPLICIT_LOOPBACK)
render_dir = self.tmp_path("render")
os.makedirs(render_dir)
+ # write an etc/resolv.conf and expect it to not be modified
+ resolvconf = os.path.join(render_dir, 'etc/resolv.conf')
+ content = "# Original Content"
+ util.write_file(resolvconf, content)
renderer = self._get_renderer()
renderer.render_network_state(ns, target=render_dir)
found = dir2dict(render_dir)
@@ -2718,6 +2722,8 @@ TYPE=Ethernet
USERCTL=no
"""
self.assertEqual(expected, found[nspath + 'ifcfg-eth0'])
+ # a dhcp only config should not modify resolv.conf
+ self.assertEqual(content, found['/etc/resolv.conf'])
def test_bond_config(self):
expected_name = 'expected_sysconfig_rhel'
@@ -3202,6 +3208,10 @@ USERCTL=no
ns = network_state.parse_net_config_data(CONFIG_V1_EXPLICIT_LOOPBACK)
render_dir = self.tmp_path("render")
os.makedirs(render_dir)
+ # write an etc/resolv.conf and expect it to not be modified
+ resolvconf = os.path.join(render_dir, 'etc/resolv.conf')
+ content = "# Original Content"
+ util.write_file(resolvconf, content)
renderer = self._get_renderer()
renderer.render_network_state(ns, target=render_dir)
found = dir2dict(render_dir)
@@ -3219,6 +3229,8 @@ TYPE=Ethernet
USERCTL=no
"""
self.assertEqual(expected, found[nspath + 'ifcfg-eth0'])
+ # a dhcp only config should not modify resolv.conf
+ self.assertEqual(content, found['/etc/resolv.conf'])
def test_bond_config(self):
expected_name = 'expected_sysconfig_opensuse'

View File

@ -1,10 +0,0 @@
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -349,6 +349,7 @@ class Renderer(renderer.Renderer):
# TODO need to set BOOTPROTO to dhcp6 on SUSE
iface_cfg['IPV6INIT'] = True
iface_cfg['DHCPV6C'] = True
+ iface_cfg['DHCLIENT6_MODE'] = 'managed'
elif subnet_type in ['dhcp4', 'dhcp']:
iface_cfg['BOOTPROTO'] = 'dhcp'
elif subnet_type == 'static':

View File

@ -1,20 +0,0 @@
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -748,7 +748,7 @@ class Renderer(renderer.Renderer):
def available(target=None):
sysconfig = available_sysconfig(target=target)
nm = available_nm(target=target)
- return (util.get_linux_distro()[0] in KNOWN_DISTROS
+ return (util.system_info()['variant'] in KNOWN_DISTROS
and any([nm, sysconfig]))
@@ -758,6 +758,8 @@ def available_sysconfig(target=None):
for p in expected:
if not util.which(p, search=search, target=target):
return False
+ else:
+ return True
expected_paths = ['etc/sysconfig/network/scripts/functions.netconfig']
for p in expected_paths:

View File

@ -1,12 +0,0 @@
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -314,7 +314,8 @@ class Renderer(renderer.Renderer):
# ==> the following should not be set to 'static'
# but should remain 'none'
# if iface_cfg['BOOTPROTO'] == 'none':
- # iface_cfg['BOOTPROTO'] = 'static'
+ # For SUSE this is different set to "static"
+ iface_cfg['BOOTPROTO'] = 'static'
if subnet_is_ipv6(subnet):
mtu_key = 'IPV6_MTU'
iface_cfg['IPV6INIT'] = True

View File

@ -1,13 +1,13 @@
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -660,9 +660,7 @@ def available(target=None):
@@ -891,9 +891,7 @@ def available_sysconfig(target=None):
if not util.which(p, search=search, target=target):
return False
- expected_paths = [
- 'etc/sysconfig/network-scripts/network-functions',
- 'etc/sysconfig/network-scripts/ifdown-eth']
- 'etc/sysconfig/config']
+ expected_paths = ['etc/sysconfig/network/scripts/functions.netconfig']
for p in expected_paths:
if not os.path.isfile(util.target_path(target, p)):
return False
if os.path.isfile(util.target_path(target, p)):
return True

View File

@ -1,36 +0,0 @@
--- cloudinit/distros/opensuse.py.orig
+++ cloudinit/distros/opensuse.py
@@ -38,6 +38,8 @@ class Distro(distros.Distro):
'sysconfig': {
'control': 'etc/sysconfig/network/config',
'iface_templates': '%(base)s/network/ifcfg-%(name)s',
+ 'netrules_path': (
+ 'etc/udev/rules.d/85-persistent-net-cloud-init.rules'),
'route_templates': {
'ipv4': '%(base)s/network/ifroute-%(name)s',
'ipv6': '%(base)s/network/ifroute-%(name)s',
--- cloudinit/net/sysconfig.py.orig
+++ cloudinit/net/sysconfig.py
@@ -8,6 +8,7 @@ import six
from cloudinit.distros.parsers import networkmanager_conf
from cloudinit.distros.parsers import resolv_conf
from cloudinit import log as logging
+from cloudinit import net
from cloudinit import util
from configobj import ConfigObj
@@ -699,6 +700,14 @@ class Renderer(renderer.Renderer):
if nm_conf_content:
util.write_file(nm_conf_path, nm_conf_content, file_mode)
if self.netrules_path:
+ # When many interfaces are present it can happen that we get here
+ # before they are all setup. Settle if that is the case.
+ for iface in network_state.iter_interfaces(
+ renderer.filter_by_physical):
+ path = net.sys_dev_path(iface.get('name'))
+ if not os.path.exists(path):
+ util.udevadm_settle(path, 5)
+ break
netrules_content = self._render_persistent_net(network_state)
netrules_path = util.target_path(target, self.netrules_path)
util.write_file(netrules_path, netrules_content, file_mode)

View File

@ -1,3 +1,192 @@
-------------------------------------------------------------------
Thu Jan 9 18:56:26 UTC 2020 - Robert Schweikert <rjschwei@suse.com>
- Update to version 19.4
+ Remove patches included upstream:
- cloud-init-after-wicked.patch
- cloud-init-noresolv-merge-no-dns-data.diff
- cloud-init-renderer-detect.patch
- cloud-init-trigger-udev.patch
+ Removed patches merged with cloud-init-mix-static-dhcp.patch
- cloud-init-proper-ipv6-setting.patch
- cloud-init-static-net.patch
+ Added cloud-init-mix-static-dhcp.patch (bsc#1157894)
+ Forward port cloud-init-sysconf-path.patch
+ doc: specify _ over - in cloud config modules
+ [Joshua Powers] (LP: #1293254)
+ tools: Detect python to use via env in migrate-lp-user-to-github
+ [Adam Dobrawy]
+ Partially revert "fix unlocking method on FreeBSD" (#116)
+ tests: mock uid when running as root (#113)
+ [Joshua Powers] (LP: #1856096)
+ cloudinit/netinfo: remove unused getgateway (#111)
+ docs: clear up apt config sections (#107) [Joshua Powers] (LP: #1832823)
+ doc: add kernel command line option to user data (#105)
+ [Joshua Powers] (LP: #1846524)
+ config/cloud.cfg.d: update README [Joshua Powers] (LP: #1855006)
+ azure: avoid re-running cloud-init when instance-id is byte-swapped
+ (#84) [AOhassan]
+ fix unlocking method on FreeBSD [Igor Galić] (LP: #1854594)
+ debian: add reference to the manpages [Joshua Powers]
+ ds_identify: if /sys is not available use dmidecode (#42)
+ [Igor Galić] (LP: #1852442)
+ docs: add cloud-id manpage [Joshua Powers]
+ docs: add cloud-init-per manpage [Joshua Powers]
+ docs: add cloud-init manpage [Joshua Powers]
+ docs: add additional details to per-instance/once [Joshua Powers]
+ Update doc-requirements.txt [Joshua Powers]
+ doc-requirements: add missing dep [Joshua Powers]
+ dhcp: Support RedHat dhcp rfc3442 lease format for option 121 (#76)
+ [Eric Lafontaine] (LP: #1850642)
+ network_state: handle empty v1 config (#45) (LP: #1852496)
+ docs: Add document on how to report bugs [Joshua Powers]
+ Add an Amazon distro in the redhat OS family [Frederick Lefebvre]
+ removed a couple of "the"s [gaughen]
+ docs: fix line length and remove highlighting [Joshua Powers]
+ docs: Add security.md to readthedocs [Joshua Powers]
+ Multiple file fix for AuthorizedKeysFile config (#60) [Eduardo Otubo]
+ Revert "travis: only run CI on pull requests"
+ doc: update links on README.md [Joshua Powers]
+ doc: Updates to wording of README.md [Joshua Powers]
+ Add security.md [Joshua Powers]
+ setup.py: Amazon Linux sets libexec to /usr/libexec (#52)
+ [Frederick Lefebvre]
+ Fix linting failure in test_url_helper (#83) [Eric Lafontaine]
+ url_helper: read_file_or_url should pass headers param into readurl
+ (#66) (LP: #1854084)
+ dmidecode: log result *after* stripping n [Igor Galić]
+ cloud_tests: add azure platform support to integration tests
+ [ahosmanmsft]
+ set_passwords: support for FreeBSD (#46) [Igor Galić]
+ tools: migrate-lp-user-to-github removes repo_dir if created (#35)
+ Correct jumbled documentation for cc_set_hostname module (#64)
+ [do3meli] (LP: #1853543)
+ FreeBSD: fix for get_linux_distro() and lru_cache (#59)
+ [Igor Galić] (LP: #1815030)
+ ec2: Add support for AWS IMDS v2 (session-oriented) (#55)
+ tests: Fix cloudsigma tests when no dmidecode data is present. (#57)
+ [Scott Moser]
+ net: IPv6, accept_ra, slaac, stateless (#51)
+ [Harald] (LP: #1806014, #1808647)
+ docs: Update the configdrive datasource links (#44)
+ [Joshua Powers] (LP: #1852461)
+ distro: correctly set usr_lib_exec path for FreeBSD distro (#40)
+ [Igor Galić] (LP: #1852491)
+ azure: support secondary ipv6 addresses (#33)
+ Fix metadata check when local-hostname is null (#32)
+ [Mark Goddard] (LP: #1852100)
+ switch default FreeBSD salt minion pkg from py27 to py36
+ [Dominic Schlegel]
+ travis: only run CI on pull requests
+ add data-server dns entry as new metadata server detection [Joshua Hügli]
+ pycodestyle: remove unused local variable
+ reporting: Using a uuid to enforce uniqueness on the KVP keys. [momousta]
+ docs: touchups in rtd intro and README.md
+ doc: update launchpad git refs to github
+ github: drop pull-request template to prepare for migration
+ tools: add migrate-lp-user-to-github script to link LP to github
+ github: new basic project readme
- From 19.3
+ azure: support matching dhcp route-metrics for dual-stack ipv4 ipv6
+ (LP: #1850308)
+ configdrive: fix subplatform config-drive for /config-drive source
+ [David Kindred] (LP: #1849731)
+ DataSourceSmartOS: reconfigure network on each boot
+ [Mike Gerdts] (LP: #1765801)
+ Add config for ssh-key import and consuming user-data [Pavel Zakharov]
+ net: fix subnet_is_ipv6() for stateless|stateful
+ [Harald Jensås] (LP: #1848690)
+ OVF: disable custom script execution by default [Xiaofeng Wang]
+ cc_puppet: Implement csr_attributes.yaml support [Matthias Baur]
+ cloud-init.service: on centos/fedora/redhat wait on NetworkManager.service
+ (LP: #1843334)
+ azure: Do not lock user on instance id change [Sam Eiderman] (LP: #1849677)
+ net/netplan: use ipv6-mtu key for specifying ipv6 mtu values
+ Fix usages of yaml, and move yaml_dump to safeyaml.dumps. (LP: #1849640)
+ exoscale: Increase url_max_wait to 120s. [Chris Glass]
+ net/sysconfig: fix available check on SUSE distros
+ [Robert Schweikert] (LP: #1849378)
+ docs: Fix incorrect Azure IMDS IP address [Joshua Powers] (LP: #1849508)
+ introduce .travis.yml
+ net: enable infiniband support in eni and sysconfig renderers
+ [Darren Birkett] (LP: #1847114)
+ guestcust_util: handle special characters in config file [Xiaofeng Wang]
+ fix some more typos in comments [Dominic Schlegel]
+ replace any deprecated log.warn with log.warning
+ [Dominic Schlegel] (LP: #1508442)
+ net: handle openstack dhcpv6-stateless configuration
+ [Harald Jensås] (LP: #1847517)
+ Add .venv/ to .gitignore [Dominic Schlegel]
+ Small typo fixes in code comments. [Dominic Schlegel]
+ cloud_test/lxd: Retry container delete a few times
+ Add Support for e24cloud to Ec2 datasource. (LP: #1696476)
+ Add RbxCloud datasource [Adam Dobrawy]
+ get_interfaces: don't exclude bridge and bond members (LP: #1846535)
+ Add support for Arch Linux in render-cloudcfg [Conrad Hoffmann]
+ util: json.dumps on python 2.7 will handle UnicodeDecodeError on binary
+ (LP: #1801364)
+ debian/ubuntu: add missing word to netplan/ENI header (LP: #1845669)
+ ovf: do not generate random instance-id for IMC customization path
+ sysconfig: only write resolv.conf if network_state has DNS values
+ (LP: #1843634)
+ sysconfig: use distro variant to check if available (LP: #1843584)
+ systemd/cloud-init.service.tmpl: start after wicked.service
+ [Robert Schweikert]
+ docs: fix zstack documentation lints
+ analyze/show: remove trailing space in output
+ Add missing space in warning: "not avalid seed" [Brian Candler]
+ pylintrc: add 'enter_context' to generated-members list
+ Add datasource for ZStack platform. [Shixin Ruan] (LP: #1841181)
+ docs: organize TOC and update summary of project [Joshua Powers]
+ tools: make clean now cleans the dev directory, not the system
+ docs: create cli specific page [Joshua Powers]
+ docs: added output examples to analyze.rst [Joshua Powers]
+ docs: doc8 fixes for instancedata page [Joshua Powers]
+ docs: clean up formatting, organize boot page [Joshua Powers]
+ net: add is_master check for filtering device list (LP: #1844191)
+ docs: more complete list of availability [Joshua Powers]
+ docs: start FAQ page [Joshua Powers]
+ docs: cleanup output & order of datasource page [Joshua Powers]
+ Brightbox: restrict detection to require full domain match .brightbox.com
+ VMWware: add option into VMTools config to enable/disable custom script.
+ [Xiaofeng Wang]
+ net,Oracle: Add support for netfailover detection
+ atomic_helper: add DEBUG logging to write_file (LP: #1843276)
+ doc: document doc, create makefile and tox target [Joshua Powers]
+ .gitignore: ignore files produced by package builds
+ docs: fix whitespace, spelling, and line length [Joshua Powers]
+ docs: remove unnecessary file in doc directory [Joshua Powers]
+ Oracle: Render secondary vnic IP and MTU values only
+ exoscale: fix sysconfig cloud_config_modules overrides (LP: #1841454)
+ net/cmdline: refactor to allow multiple initramfs network config sources
+ ubuntu-drivers: call db_x_loadtemplatefile to accept NVIDIA EULA
+ (LP: #1840080)
+ Add missing #cloud-config comment on first example in documentation.
+ [Florian Müller]
+ ubuntu-drivers: emit latelink=true debconf to accept nvidia eula
+ (LP: #1840080)
+ DataSourceOracle: prefer DS network config over initramfs
+ format.rst: add text/jinja2 to list of content types (+ cleanups)
+ Add GitHub pull request template to point people at hacking doc
+ cloudinit/distros/parsers/sys_conf: add docstring to SysConf
+ pyflakes: remove unused variable [Joshua Powers]
+ Azure: Record boot timestamps, system information, and diagnostic events
+ [Anh Vo]
+ DataSourceOracle: configure secondary NICs on Virtual Machines
+ distros: fix confusing variable names
+ azure/net: generate_fallback_nic emits network v2 config instead of v1
+ Add support for publishing host keys to GCE guest attributes [Rick Wright]
+ New data source for the Exoscale.com cloud platform [Chris Glass]
+ doc: remove intersphinx extension
+ cc_set_passwords: rewrite documentation (LP: #1838794)
+ net/cmdline: split interfaces_by_mac and init network config determination
+ stages: allow data sources to override network config source order
+ cloud_tests: updates and fixes
+ Fix bug rendering MTU on bond or vlan when input was netplan. (LP: #1836949)
+ net: update net sequence, include wait on netdevs, opensuse netrules path
(LP: #1817368)
-------------------------------------------------------------------
Mon Nov 25 19:34:52 UTC 2019 - Robert Schweikert <rjschwei@suse.com>

View File

@ -18,9 +18,9 @@
%global configver 0.7
Name: cloud-init
Version: 19.2
Version: 19.4
Release: 0
License: GPL-3.0 and AGPL-3.0
License: GPL-3.0
Summary: Cloud node initialization tool
Url: http://launchpad.net/cloud-init/
Group: System/Management
@ -33,25 +33,16 @@ Patch20: cloud-init-python2-sigpipe.patch
Patch21: cloud-init-template-py2.patch
Patch29: datasourceLocalDisk.patch
Patch34: cloud-init-tests-set-exec.patch
# FIXME no proposed solution
Patch38: cloud-init-sysconf-path.patch
# FIXME (lp# 1800854)
Patch41: cloud-init-static-net.patch
# FIXME (lp#1801364)
Patch42: cloud-init-ostack-metadat-dencode.patch
# FIXME (lp#1812117)
Patch43: cloud-init-write-routes.patch
# FIXME (lp#1817368) expected in 19.3
Patch47: cloud-init-trigger-udev.patch
# FIXME (lp#1843634) expected in 19.3
Patch50: cloud-init-noresolv-merge-no-dns-data.diff
# FIXME expected in 19.3
Patch51: cloud-init-after-wicked.patch
# FIXME (lp#1849296)
Patch52: cloud-init-break-resolv-symlink.patch
# FIXME (lp#1849378) expected in 19.3
Patch53: cloud-init-renderer-detect.patch
Patch54: cloud-init-proper-ipv6-setting.patch
# FIXME (lp#1858808)
Patch55: cloud-init-mix-static-dhcp.patch
# FIXME no proposed solution
Patch56: cloud-init-sysconf-path.patch
BuildRequires: fdupes
BuildRequires: filesystem
@ -190,16 +181,11 @@ Documentation and examples for cloud-init tools
%endif
%patch29 -p0
%patch34
%patch38
%patch41
%patch42
%patch43
%patch47
%patch50 -p1
%patch51 -p1
%patch52
%patch53
%patch54
%patch55 -p0
%patch56
%build
%if 0%{?suse_version} && 0%{?suse_version} <= 1315
@ -236,9 +222,14 @@ done
mkdir -p %{buildroot}%{_localstatedir}/lib/cloud
# move documentation
mkdir -p %{buildroot}%{_defaultdocdir}
mv %{buildroot}%{_datadir}/doc/%{name} %{buildroot}%{docdir}
mv %{buildroot}%{_datadir}/doc/%{name} %{buildroot}%{_defaultdocdir}
# man pages
mkdir -p %{buildroot}%{_mandir}/man1
mv doc/man/* %{buildroot}%{_mandir}/man1
# copy the LICENSE
cp LICENSE %{buildroot}%{docdir}
mkdir -p %{buildroot}%{_defaultlicensedir}/%{name}
cp LICENSE %{buildroot}%{_defaultlicensedir}/%{name}
cp LICENSE-GPLv3 %{buildroot}%{_defaultlicensedir}/%{name}
# Set the distribution indicator
%if 0%{?suse_version}
%if 0%{?is_opensuse}
@ -287,8 +278,7 @@ popd
%files
%defattr(-,root,root)
# do not mark as doc or we get conflicts with the doc package
%{docdir}/LICENSE
%license LICENSE LICENSE-GPLv3
%{_bindir}/cloud-id
%{_bindir}/cloud-init
%{_bindir}/cloud-init-per
@ -297,6 +287,7 @@ popd
%config(noreplace) %{_sysconfdir}/cloud/templates
%{_sysconfdir}/dhcp/dhclient-exit-hooks.d/hook-dhclient
%{_sysconfdir}/NetworkManager/dispatcher.d/hook-network-manager
%{_mandir}/man*/*
%if 0%{?suse_version} && 0%{?suse_version} < 1500
%dir %{_datadir}/bash-completion
%dir %{_datadir}/bash-completion/completions
@ -352,9 +343,7 @@ popd
%files doc
%defattr(-,root,root)
%{docdir}/examples/*
%{docdir}/README
%{docdir}/*.txt
#%{docdir}/*.rst
%dir %{docdir}/examples
#%files test