forked from pool/cloud-init
- Update to version 20.2 (bsc#1174443, bsc#1174444)
+ Remove patches included upstream: - 0001-Make-tests-work-with-Python-3.8-139.patch - cloud-init-ostack-metadat-dencode.patch - cloud-init-use-different-random-src.diff - cloud-init-long-pass.patch - cloud-init-mix-static-dhcp.patch + Remove patches build switched to Python 3 for all distributions - cloud-init-python2-sigpipe.patch - cloud-init-template-py2.patch + Add - cloud-init-after-kvp.diff - cloud-init-recognize-hpc.patch + doc/format: reference make-mime.py instead of an inline script (#334) + Add docs about creating parent folders (#330) [Adrian Wilkins] + DataSourceNoCloud/OVF: drop claim to support FTP (#333) (LP: #1875470) + schema: ignore spurious pylint error (#332) + schema: add json schema for write_files module (#152) + BSD: find_devs_with_ refactoring (#298) [Gonéri Le Bouder] + nocloud: drop work around for Linux 2.6 (#324) [Gonéri Le Bouder] + cloudinit: drop dependencies on unittest2 and contextlib2 (#322) + distros: handle a potential mirror filtering error case (#328) + log: remove unnecessary import fallback logic (#327) + .travis.yml: don't run integration test on ubuntu/* branches (#321) + More unit test documentation (#314) + conftest: introduce disable_subp_usage autouse fixture (#304) + YAML align indent sizes for docs readability (#323) [Tak Nishigori] + network_state: add missing space to log message (#325) + tests: add missing mocks for get_interfaces_by_mac (#326) (LP: #1873910) + test_mounts: expand happy path test for both happy paths (#319) OBS-URL: https://build.opensuse.org/package/show/Cloud:Tools/cloud-init?expand=0&rev=173
This commit is contained in:
parent
ba3c773df0
commit
04ac085278
@ -1,104 +0,0 @@
|
|||||||
From c5a7d7979c036f6dc6823f429c6b6820f7f74241 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Conrad Hoffmann <1226676+bitfehler@users.noreply.github.com>
|
|
||||||
Date: Wed, 8 Jan 2020 15:18:48 +0100
|
|
||||||
Subject: [PATCH] Make tests work with Python 3.8 (#139)
|
|
||||||
|
|
||||||
* Make DistroChecker test work with Python 3.8
|
|
||||||
|
|
||||||
In Python 3.8, `platform.linux_distribution` has been removed. This was
|
|
||||||
anticipated, and the cloud-init code uses its own
|
|
||||||
`util.get_linux_distro` instead, which works fine w/o
|
|
||||||
`platform.linux_distribution`. However, these tests still try to mock
|
|
||||||
the platform function, which fails if it doesn't exist (Python 3.8).
|
|
||||||
Instead, mock the new function here, as this is a test for code that
|
|
||||||
depends on it rather than the function itself.
|
|
||||||
|
|
||||||
* Make GetLinuxDistro tests work with Python 3.8
|
|
||||||
|
|
||||||
In Python 3.8, `platform.dist` was removed, so allow mock to create the
|
|
||||||
function by setting `create=True`.
|
|
||||||
|
|
||||||
* Make linter happy in Python 3.8
|
|
||||||
|
|
||||||
Suppress E1101(no-member) as this function was removed.
|
|
||||||
---
|
|
||||||
cloudinit/analyze/tests/test_boot.py | 8 ++++----
|
|
||||||
cloudinit/tests/test_util.py | 6 +++---
|
|
||||||
cloudinit/util.py | 4 ++--
|
|
||||||
3 files changed, 9 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cloudinit/analyze/tests/test_boot.py b/cloudinit/analyze/tests/test_boot.py
|
|
||||||
index 706e2cc0..f4001c14 100644
|
|
||||||
--- a/cloudinit/analyze/tests/test_boot.py
|
|
||||||
+++ b/cloudinit/analyze/tests/test_boot.py
|
|
||||||
@@ -12,17 +12,17 @@ class TestDistroChecker(CiTestCase):
|
|
||||||
@mock.patch('cloudinit.util.system_info', return_value={'dist': ('', '',
|
|
||||||
''),
|
|
||||||
'system': ''})
|
|
||||||
- @mock.patch('platform.linux_distribution', return_value=('', '', ''))
|
|
||||||
+ @mock.patch('cloudinit.util.get_linux_distro', return_value=('', '', ''))
|
|
||||||
@mock.patch('cloudinit.util.is_FreeBSD', return_value=False)
|
|
||||||
- def test_blank_distro(self, m_sys_info, m_linux_distribution, m_free_bsd):
|
|
||||||
+ def test_blank_distro(self, m_sys_info, m_get_linux_distro, m_free_bsd):
|
|
||||||
self.assertEqual(err_code, dist_check_timestamp())
|
|
||||||
|
|
||||||
@mock.patch('cloudinit.util.system_info', return_value={'dist': ('', '',
|
|
||||||
'')})
|
|
||||||
- @mock.patch('platform.linux_distribution', return_value=('', '', ''))
|
|
||||||
+ @mock.patch('cloudinit.util.get_linux_distro', return_value=('', '', ''))
|
|
||||||
@mock.patch('cloudinit.util.is_FreeBSD', return_value=True)
|
|
||||||
def test_freebsd_gentoo_cant_find(self, m_sys_info,
|
|
||||||
- m_linux_distribution, m_is_FreeBSD):
|
|
||||||
+ m_get_linux_distro, m_is_FreeBSD):
|
|
||||||
self.assertEqual(err_code, dist_check_timestamp())
|
|
||||||
|
|
||||||
@mock.patch('cloudinit.util.subp', return_value=(0, 1))
|
|
||||||
diff --git a/cloudinit/tests/test_util.py b/cloudinit/tests/test_util.py
|
|
||||||
index 64ed82ea..be100646 100644
|
|
||||||
--- a/cloudinit/tests/test_util.py
|
|
||||||
+++ b/cloudinit/tests/test_util.py
|
|
||||||
@@ -523,7 +523,7 @@ class TestGetLinuxDistro(CiTestCase):
|
|
||||||
self.assertEqual(
|
|
||||||
('opensuse-tumbleweed', '20180920', platform.machine()), dist)
|
|
||||||
|
|
||||||
- @mock.patch('platform.dist')
|
|
||||||
+ @mock.patch('platform.dist', create=True)
|
|
||||||
def test_get_linux_distro_no_data(self, m_platform_dist, m_path_exists):
|
|
||||||
"""Verify we get no information if os-release does not exist"""
|
|
||||||
m_platform_dist.return_value = ('', '', '')
|
|
||||||
@@ -531,7 +531,7 @@ class TestGetLinuxDistro(CiTestCase):
|
|
||||||
dist = util.get_linux_distro()
|
|
||||||
self.assertEqual(('', '', ''), dist)
|
|
||||||
|
|
||||||
- @mock.patch('platform.dist')
|
|
||||||
+ @mock.patch('platform.dist', create=True)
|
|
||||||
def test_get_linux_distro_no_impl(self, m_platform_dist, m_path_exists):
|
|
||||||
"""Verify we get an empty tuple when no information exists and
|
|
||||||
Exceptions are not propagated"""
|
|
||||||
@@ -540,7 +540,7 @@ class TestGetLinuxDistro(CiTestCase):
|
|
||||||
dist = util.get_linux_distro()
|
|
||||||
self.assertEqual(('', '', ''), dist)
|
|
||||||
|
|
||||||
- @mock.patch('platform.dist')
|
|
||||||
+ @mock.patch('platform.dist', create=True)
|
|
||||||
def test_get_linux_distro_plat_data(self, m_platform_dist, m_path_exists):
|
|
||||||
"""Verify we get the correct platform information"""
|
|
||||||
m_platform_dist.return_value = ('foo', '1.1', 'aarch64')
|
|
||||||
diff --git a/cloudinit/util.py b/cloudinit/util.py
|
|
||||||
index 9d9d5c72..830c8e54 100644
|
|
||||||
--- a/cloudinit/util.py
|
|
||||||
+++ b/cloudinit/util.py
|
|
||||||
@@ -635,8 +635,8 @@ def get_linux_distro():
|
|
||||||
else:
|
|
||||||
dist = ('', '', '')
|
|
||||||
try:
|
|
||||||
- # Will be removed in 3.7
|
|
||||||
- dist = platform.dist() # pylint: disable=W1505
|
|
||||||
+ # Was removed in 3.8
|
|
||||||
+ dist = platform.dist() # pylint: disable=W1505,E1101
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
--
|
|
||||||
2.24.1
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:a2c1f318cbfb28c13b41bbb0de5ab9b21d7cf4b7118551366cd508380124f262
|
|
||||||
size 1091893
|
|
3
cloud-init-20.2.tar.gz
Normal file
3
cloud-init-20.2.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6729e9093f8252bff44a94ddc814256da6143456929b6731e9b74642cd57e971
|
||||||
|
size 1117084
|
12
cloud-init-after-kvp.diff
Normal file
12
cloud-init-after-kvp.diff
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff --git a/systemd/cloud-init-local.service.tmpl b/systemd/cloud-init-local.service.tmpl
|
||||||
|
index ff9c644d..7166f640 100644
|
||||||
|
--- a/systemd/cloud-init-local.service.tmpl
|
||||||
|
+++ b/systemd/cloud-init-local.service.tmpl
|
||||||
|
@@ -5,6 +5,7 @@ Description=Initial cloud-init job (pre-networking)
|
||||||
|
DefaultDependencies=no
|
||||||
|
{% endif %}
|
||||||
|
Wants=network-pre.target
|
||||||
|
+After=hv_kvp_daemon.service
|
||||||
|
After=systemd-remount-fs.service
|
||||||
|
Before=NetworkManager.service
|
||||||
|
Before=network-pre.target
|
@ -1,11 +0,0 @@
|
|||||||
--- cloudinit/config/cc_set_passwords.py.orig
|
|
||||||
+++ cloudinit/config/cc_set_passwords.py
|
|
||||||
@@ -236,7 +236,7 @@ def handle(_name, cfg, cloud, log, args)
|
|
||||||
raise errors[-1]
|
|
||||||
|
|
||||||
|
|
||||||
-def rand_user_password(pwlen=9):
|
|
||||||
+def rand_user_password(pwlen=20):
|
|
||||||
return util.rand_str(pwlen, select_from=PW_SET)
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +0,0 @@
|
|||||||
--- cloudinit/sources/helpers/openstack.py.orig
|
|
||||||
+++ cloudinit/sources/helpers/openstack.py
|
|
||||||
@@ -291,7 +291,10 @@ class BaseReader(object):
|
|
||||||
if 'random_seed' in metadata:
|
|
||||||
random_seed = metadata['random_seed']
|
|
||||||
try:
|
|
||||||
- metadata['random_seed'] = base64.b64decode(random_seed)
|
|
||||||
+ metadata['random_seed'] = u'%s' % base64.b64decode(random_seed)
|
|
||||||
+ except UnicodeDecodeError:
|
|
||||||
+ # Did not decode as expected, probably utf-8 already
|
|
||||||
+ metadata['random_seed'] = random_seed
|
|
||||||
except (ValueError, TypeError) as e:
|
|
||||||
raise BrokenMetadata("Badly formatted metadata"
|
|
||||||
" random_seed entry: %s" % e)
|
|
@ -1,20 +0,0 @@
|
|||||||
--- cloudinit/util.py.orig
|
|
||||||
+++ cloudinit/util.py
|
|
||||||
@@ -35,6 +35,7 @@ import time
|
|
||||||
from errno import ENOENT, ENOEXEC
|
|
||||||
|
|
||||||
from base64 import b64decode, b64encode
|
|
||||||
+from signal import signal, SIGPIPE, SIG_DFL
|
|
||||||
from six.moves.urllib import parse as urlparse
|
|
||||||
|
|
||||||
import six
|
|
||||||
@@ -2031,7 +2032,8 @@ def subp(args, data=None, rcs=None, env=
|
|
||||||
try:
|
|
||||||
sp = subprocess.Popen(bytes_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)
|
|
||||||
except OSError as e:
|
|
||||||
if status_cb:
|
|
13
cloud-init-recognize-hpc.patch
Normal file
13
cloud-init-recognize-hpc.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--- cloudinit/util.py.orig
|
||||||
|
+++ cloudinit/util.py
|
||||||
|
@@ -656,7 +656,9 @@ def system_info():
|
||||||
|
elif linux_dist == 'redhat':
|
||||||
|
var = 'rhel'
|
||||||
|
elif linux_dist in (
|
||||||
|
- 'opensuse', 'opensuse-tumbleweed', 'opensuse-leap', 'sles'):
|
||||||
|
+ 'opensuse', 'opensuse-tumbleweed', 'opensuse-leap',
|
||||||
|
+ 'sles', 'sle_hpc'
|
||||||
|
+ ):
|
||||||
|
var = 'suse'
|
||||||
|
else:
|
||||||
|
var = 'linux'
|
@ -1,8 +0,0 @@
|
|||||||
--- tools/render-cloudcfg.orig
|
|
||||||
+++ tools/render-cloudcfg
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/usr/bin/env python3
|
|
||||||
+#!/usr/bin/env python
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/cloudinit/util.py b/cloudinit/util.py
|
|
||||||
index d99e82fa5..c02b3d9a5 100644
|
|
||||||
--- a/cloudinit/util.py
|
|
||||||
+++ b/cloudinit/util.py
|
|
||||||
@@ -397,9 +397,10 @@ def translate_bool(val, addons=None):
|
|
||||||
|
|
||||||
|
|
||||||
def rand_str(strlen=32, select_from=None):
|
|
||||||
+ r = random.SystemRandom()
|
|
||||||
if not select_from:
|
|
||||||
select_from = string.ascii_letters + string.digits
|
|
||||||
- return "".join([random.choice(select_from) for _x in range(0, strlen)])
|
|
||||||
+ return "".join([r.choice(select_from) for _x in range(0, strlen)])
|
|
||||||
|
|
||||||
|
|
||||||
def rand_dict_key(dictionary, postfix=None):
|
|
@ -1,3 +1,202 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jul 24 19:55:40 UTC 2020 - Robert Schweikert <rjschwei@suse.com>
|
||||||
|
|
||||||
|
- Update to version 20.2 (bsc#1174443, bsc#1174444)
|
||||||
|
+ Remove patches included upstream:
|
||||||
|
- 0001-Make-tests-work-with-Python-3.8-139.patch
|
||||||
|
- cloud-init-ostack-metadat-dencode.patch
|
||||||
|
- cloud-init-use-different-random-src.diff
|
||||||
|
- cloud-init-long-pass.patch
|
||||||
|
- cloud-init-mix-static-dhcp.patch
|
||||||
|
+ Remove patches build switched to Python 3 for all distributions
|
||||||
|
- cloud-init-python2-sigpipe.patch
|
||||||
|
- cloud-init-template-py2.patch
|
||||||
|
+ Add
|
||||||
|
- cloud-init-after-kvp.diff
|
||||||
|
- cloud-init-recognize-hpc.patch
|
||||||
|
+ doc/format: reference make-mime.py instead of an inline script (#334)
|
||||||
|
+ Add docs about creating parent folders (#330) [Adrian Wilkins]
|
||||||
|
+ DataSourceNoCloud/OVF: drop claim to support FTP (#333) (LP: #1875470)
|
||||||
|
+ schema: ignore spurious pylint error (#332)
|
||||||
|
+ schema: add json schema for write_files module (#152)
|
||||||
|
+ BSD: find_devs_with_ refactoring (#298) [Gonéri Le Bouder]
|
||||||
|
+ nocloud: drop work around for Linux 2.6 (#324) [Gonéri Le Bouder]
|
||||||
|
+ cloudinit: drop dependencies on unittest2 and contextlib2 (#322)
|
||||||
|
+ distros: handle a potential mirror filtering error case (#328)
|
||||||
|
+ log: remove unnecessary import fallback logic (#327)
|
||||||
|
+ .travis.yml: don't run integration test on ubuntu/* branches (#321)
|
||||||
|
+ More unit test documentation (#314)
|
||||||
|
+ conftest: introduce disable_subp_usage autouse fixture (#304)
|
||||||
|
+ YAML align indent sizes for docs readability (#323) [Tak Nishigori]
|
||||||
|
+ network_state: add missing space to log message (#325)
|
||||||
|
+ tests: add missing mocks for get_interfaces_by_mac (#326) (LP: #1873910)
|
||||||
|
+ test_mounts: expand happy path test for both happy paths (#319)
|
||||||
|
+ cc_mounts: fix incorrect format specifiers (#316) (LP: #1872836)
|
||||||
|
+ swap file "size" being used before checked if str (#315) [Eduardo Otubo]
|
||||||
|
+ HACKING.rst: add pytest version gotchas section (#311)
|
||||||
|
+ docs: Add steps to re-run cloud-id and cloud-init (#313) [Joshua Powers]
|
||||||
|
+ readme: OpenBSD is now supported (#309) [Gonéri Le Bouder]
|
||||||
|
+ net: ignore 'renderer' key in netplan config (#306) (LP: #1870421)
|
||||||
|
+ Add support for NFS/EFS mounts (#300) [Andrew Beresford] (LP: #1870370)
|
||||||
|
+ openbsd: set_passwd should not unlock user (#289) [Gonéri Le Bouder]
|
||||||
|
+ tools/.github-cla-signers: add beezly as CLA signer (#301)
|
||||||
|
+ util: remove unnecessary lru_cache import fallback (#299)
|
||||||
|
+ HACKING.rst: reorganise/update CLA signature info (#297)
|
||||||
|
+ distros: drop leading/trailing hyphens from mirror URL labels (#296)
|
||||||
|
+ HACKING.rst: add note about variable annotations (#295)
|
||||||
|
+ CiTestCase: stop using and remove sys_exit helper (#283)
|
||||||
|
+ distros: replace invalid characters in mirror URLs with hyphens (#291)
|
||||||
|
(LP: #1868232)
|
||||||
|
+ rbxcloud: gracefully handle arping errors (#262) [Adam Dobrawy]
|
||||||
|
+ Fix cloud-init ignoring some misdeclared mimetypes in user-data.
|
||||||
|
[Kurt Garloff]
|
||||||
|
+ net: ubuntu focal prioritize netplan over eni even if both present
|
||||||
|
(#267) (LP: #1867029)
|
||||||
|
+ cloudinit: refactor util.is_ipv4 to net.is_ipv4_address (#292)
|
||||||
|
+ net/cmdline: replace type comments with annotations (#294)
|
||||||
|
+ HACKING.rst: add Type Annotations design section (#293)
|
||||||
|
+ net: introduce is_ip_address function (#288)
|
||||||
|
+ CiTestCase: remove now-unneeded parse_and_read helper method (#286)
|
||||||
|
+ .travis.yml: allow 30 minutes of inactivity in cloud tests (#287)
|
||||||
|
+ sources/tests/test_init: drop use of deprecated inspect.getargspec (#285)
|
||||||
|
+ setup.py: drop NIH check_output implementation (#282)
|
||||||
|
+ Identify SAP Converged Cloud as OpenStack [Silvio Knizek]
|
||||||
|
+ add Openbsd support (#147) [Gonéri Le Bouder]
|
||||||
|
+ HACKING.rst: add examples of the two test class types (#278)
|
||||||
|
+ VMWware: support to update guest info gc status if enabled (#261)
|
||||||
|
[xiaofengw-vmware]
|
||||||
|
+ Add lp-to-git mapping for kgarloff (#279)
|
||||||
|
+ set_passwords: avoid chpasswd on BSD (#268) [Gonéri Le Bouder]
|
||||||
|
+ HACKING.rst: add Unit Testing design section (#277)
|
||||||
|
+ util: read_cc_from_cmdline handle urlencoded yaml content (#275)
|
||||||
|
+ distros/tests/test_init: add tests for _get_package_mirror_info (#272)
|
||||||
|
+ HACKING.rst: add links to new Code Review Process doc (#276)
|
||||||
|
+ freebsd: ensure package update works (#273) [Gonéri Le Bouder]
|
||||||
|
+ doc: introduce Code Review Process documentation (#160)
|
||||||
|
+ tools: use python3 (#274)
|
||||||
|
+ cc_disk_setup: fix RuntimeError (#270) (LP: #1868327)
|
||||||
|
+ cc_apt_configure/util: combine search_for_mirror implementations (#271)
|
||||||
|
+ bsd: boottime does not depend on the libc soname (#269)
|
||||||
|
[Gonéri Le Bouder]
|
||||||
|
+ test_oracle,DataSourceOracle: sort imports (#266)
|
||||||
|
+ DataSourceOracle: update .network_config docstring (#257)
|
||||||
|
+ cloudinit/tests: remove unneeded with_logs configuration (#263)
|
||||||
|
+ .travis.yml: drop stale comment (#255)
|
||||||
|
+ .gitignore: add more common directories (#258)
|
||||||
|
+ ec2: render network on all NICs and add secondary IPs as static (#114)
|
||||||
|
(LP: #1866930)
|
||||||
|
+ ec2 json validation: fix the reference to the 'merged_cfg' key (#256)
|
||||||
|
[Paride Legovini]
|
||||||
|
+ releases.yaml: quote the Ubuntu version numbers (#254) [Paride Legovini]
|
||||||
|
+ cloudinit: remove six from packaging/tooling (#253)
|
||||||
|
+ util/netbsd: drop six usage (#252)
|
||||||
|
+ workflows: introduce stale pull request workflow (#125)
|
||||||
|
+ cc_resolv_conf: introduce tests and stabilise output across Python
|
||||||
|
versions (#251)
|
||||||
|
+ fix minor issue with resolv_conf template (#144) [andreaf74]
|
||||||
|
+ doc: CloudInit also support NetBSD (#250) [Gonéri Le Bouder]
|
||||||
|
+ Add Netbsd support (#62) [Gonéri Le Bouder]
|
||||||
|
+ tox.ini: avoid substition syntax that causes a traceback on xenial (#245)
|
||||||
|
+ Add pub_key_ed25519 to cc_phone_home (#237) [Daniel Hensby]
|
||||||
|
+ Introduce and use of a list of GitHub usernames that have signed CLA
|
||||||
|
(#244)
|
||||||
|
+ workflows/cla.yml: use correct username for CLA check (#243)
|
||||||
|
+ tox.ini: use xenial version of jsonpatch in CI (#242)
|
||||||
|
+ workflows: CLA validation altered to fail status on pull_request (#164)
|
||||||
|
+ tox.ini: bump pyflakes version to 2.1.1 (#239)
|
||||||
|
+ cloudinit: move to pytest for running tests (#211)
|
||||||
|
+ instance-data: add cloud-init merged_cfg and sys_info keys to json
|
||||||
|
(#214) (LP: #1865969)
|
||||||
|
+ ec2: Do not fallback to IMDSv1 on EC2 (#216)
|
||||||
|
+ instance-data: write redacted cfg to instance-data.json (#233)
|
||||||
|
(LP: #1865947)
|
||||||
|
+ net: support network-config:disabled on the kernel commandline (#232)
|
||||||
|
(LP: #1862702)
|
||||||
|
+ ec2: only redact token request headers in logs, avoid altering request
|
||||||
|
(#230) (LP: #1865882)
|
||||||
|
+ docs: typo fixed: dta → data [Alexey Vazhnov]
|
||||||
|
+ Fixes typo on Amazon Web Services (#217) [Nick Wales]
|
||||||
|
+ Fix docs for OpenStack DMI Asset Tag (#228)
|
||||||
|
[Mark T. Voelker] (LP: #1669875)
|
||||||
|
+ Add physical network type: cascading to openstack helpers (#200)
|
||||||
|
[sab-systems]
|
||||||
|
+ tests: add focal integration tests for ubuntu (#225)
|
||||||
|
|
||||||
|
- From 20.1 (first vesrion after 19.4)
|
||||||
|
+ ec2: Do not log IMDSv2 token values, instead use REDACTED (#219)
|
||||||
|
(LP: #1863943)
|
||||||
|
+ utils: use SystemRandom when generating random password. (#204)
|
||||||
|
[Dimitri John Ledkov]
|
||||||
|
+ docs: mount_default_files is a list of 6 items, not 7 (#212)
|
||||||
|
+ azurecloud: fix issues with instances not starting (#205) (LP: #1861921)
|
||||||
|
+ unittest: fix stderr leak in cc_set_password random unittest
|
||||||
|
output. (#208)
|
||||||
|
+ cc_disk_setup: add swap filesystem force flag (#207)
|
||||||
|
+ import sysvinit patches from freebsd-ports tree (#161) [Igor Galić]
|
||||||
|
+ docs: fix typo (#195) [Edwin Kofler]
|
||||||
|
+ sysconfig: distro-specific config rendering for BOOTPROTO option (#162)
|
||||||
|
[Robert Schweikert] (LP: #1800854)
|
||||||
|
+ cloudinit: replace "from six import X" imports (except in util.py) (#183)
|
||||||
|
+ run-container: use 'test -n' instead of 'test ! -z' (#202)
|
||||||
|
[Paride Legovini]
|
||||||
|
+ net/cmdline: correctly handle static ip= config (#201)
|
||||||
|
[Dimitri John Ledkov] (LP: #1861412)
|
||||||
|
+ Replace mock library with unittest.mock (#186)
|
||||||
|
+ HACKING.rst: update CLA link (#199)
|
||||||
|
+ Scaleway: Fix DatasourceScaleway to avoid backtrace (#128)
|
||||||
|
[Louis Bouchard]
|
||||||
|
+ cloudinit/cmd/devel/net_convert.py: add missing space (#191)
|
||||||
|
+ tools/run-container: drop support for python2 (#192) [Paride Legovini]
|
||||||
|
+ Print ssh key fingerprints using sha256 hash (#188) (LP: #1860789)
|
||||||
|
+ Make the RPM build use Python 3 (#190) [Paride Legovini]
|
||||||
|
+ cc_set_password: increase random pwlength from 9 to 20 (#189)
|
||||||
|
(LP: #1860795)
|
||||||
|
+ .travis.yml: use correct Python version for xenial tests (#185)
|
||||||
|
+ cloudinit: remove ImportError handling for mock imports (#182)
|
||||||
|
+ Do not use fallocate in swap file creation on xfs. (#70)
|
||||||
|
[Eduardo Otubo] (LP: #1781781)
|
||||||
|
+ .readthedocs.yaml: install cloud-init when building docs (#181)
|
||||||
|
(LP: #1860450)
|
||||||
|
+ Introduce an RTD config file, and pin the Sphinx version to the RTD
|
||||||
|
default (#180)
|
||||||
|
+ Drop most of the remaining use of six (#179)
|
||||||
|
+ Start removing dependency on six (#178)
|
||||||
|
+ Add Rootbox & HyperOne to list of cloud in README (#176) [Adam Dobrawy]
|
||||||
|
+ docs: add proposed SRU testing procedure (#167)
|
||||||
|
+ util: rename get_architecture to get_dpkg_architecture (#173)
|
||||||
|
+ Ensure util.get_architecture() runs only once (#172)
|
||||||
|
+ Only use gpart if it is the BSD gpart (#131) [Conrad Hoffmann]
|
||||||
|
+ freebsd: remove superflu exception mapping (#166) [Gonéri Le Bouder]
|
||||||
|
+ ssh_auth_key_fingerprints_disable test: fix capitalization (#165)
|
||||||
|
[Paride Legovini]
|
||||||
|
+ util: move uptime's else branch into its own boottime function (#53)
|
||||||
|
[Igor Galić] (LP: #1853160)
|
||||||
|
+ workflows: add contributor license agreement checker (#155)
|
||||||
|
+ net: fix rendering of 'static6' in network config (#77) (LP: #1850988)
|
||||||
|
+ Make tests work with Python 3.8 (#139) [Conrad Hoffmann]
|
||||||
|
+ fixed minor bug with mkswap in cc_disk_setup.py (#143) [andreaf74]
|
||||||
|
+ freebsd: fix create_group() cmd (#146) [Gonéri Le Bouder]
|
||||||
|
+ doc: make apt_update example consistent (#154)
|
||||||
|
+ doc: add modules page toc with links (#153) (LP: #1852456)
|
||||||
|
+ Add support for the amazon variant in cloud.cfg.tmpl (#119)
|
||||||
|
[Frederick Lefebvre]
|
||||||
|
+ ci: remove Python 2.7 from CI runs (#137)
|
||||||
|
+ modules: drop cc_snap_config config module (#134)
|
||||||
|
+ migrate-lp-user-to-github: ensure Launchpad repo exists (#136)
|
||||||
|
+ docs: add initial troubleshooting to FAQ (#104) [Joshua Powers]
|
||||||
|
+ doc: update cc_set_hostname frequency and descrip (#109)
|
||||||
|
[Joshua Powers] (LP: #1827021)
|
||||||
|
+ freebsd: introduce the freebsd renderer (#61) [Gonéri Le Bouder]
|
||||||
|
+ cc_snappy: remove deprecated module (#127)
|
||||||
|
+ HACKING.rst: clarify that everyone needs to do the LP->GH dance (#130)
|
||||||
|
+ freebsd: cloudinit service requires devd (#132) [Gonéri Le Bouder]
|
||||||
|
+ cloud-init: fix capitalisation of SSH (#126)
|
||||||
|
+ doc: update cc_ssh clarify host and auth keys
|
||||||
|
[Joshua Powers] (LP: #1827021)
|
||||||
|
+ ci: emit names of tests run in Travis (#120)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jun 18 12:11:49 UTC 2020 - Robert Schweikert <rjschwei@suse.com>
|
Thu Jun 18 12:11:49 UTC 2020 - Robert Schweikert <rjschwei@suse.com>
|
||||||
|
|
||||||
|
140
cloud-init.spec
140
cloud-init.spec
@ -18,7 +18,7 @@
|
|||||||
%global configver 0.7
|
%global configver 0.7
|
||||||
|
|
||||||
Name: cloud-init
|
Name: cloud-init
|
||||||
Version: 19.4
|
Version: 20.2
|
||||||
Release: 0
|
Release: 0
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
Summary: Cloud node initialization tool
|
Summary: Cloud node initialization tool
|
||||||
@ -26,35 +26,24 @@ Url: http://launchpad.net/cloud-init/
|
|||||||
Group: System/Management
|
Group: System/Management
|
||||||
Source0: %{name}-%{version}.tar.gz
|
Source0: %{name}-%{version}.tar.gz
|
||||||
Source1: rsyslog-cloud-init.cfg
|
Source1: rsyslog-cloud-init.cfg
|
||||||
Patch0: 0001-Make-tests-work-with-Python-3.8-139.patch
|
|
||||||
# FIXME
|
|
||||||
# python2 disables SIGPIPE, causing broken pipe errors in shell scripts (bsc#903449)
|
|
||||||
Patch20: cloud-init-python2-sigpipe.patch
|
|
||||||
Patch21: cloud-init-template-py2.patch
|
|
||||||
Patch29: datasourceLocalDisk.patch
|
Patch29: datasourceLocalDisk.patch
|
||||||
Patch34: cloud-init-tests-set-exec.patch
|
Patch34: cloud-init-tests-set-exec.patch
|
||||||
# FIXME (lp#1801364)
|
|
||||||
Patch42: cloud-init-ostack-metadat-dencode.patch
|
|
||||||
# FIXME (lp#1812117)
|
# FIXME (lp#1812117)
|
||||||
Patch43: cloud-init-write-routes.patch
|
Patch43: cloud-init-write-routes.patch
|
||||||
# FIXME (lp#1849296)
|
# FIXME (lp#1849296)
|
||||||
Patch52: cloud-init-break-resolv-symlink.patch
|
Patch52: cloud-init-break-resolv-symlink.patch
|
||||||
# FIXME (lp#1858808)
|
|
||||||
Patch55: cloud-init-mix-static-dhcp.patch
|
|
||||||
# FIXME no proposed solution
|
# FIXME no proposed solution
|
||||||
Patch56: cloud-init-sysconf-path.patch
|
Patch56: cloud-init-sysconf-path.patch
|
||||||
# FIXME (lp#1860164)
|
# FIXME (lp#1860164)
|
||||||
Patch57: cloud-init-no-tempnet-oci.patch
|
Patch57: cloud-init-no-tempnet-oci.patch
|
||||||
Patch58: cloud-init-use-different-random-src.diff
|
Patch58: cloud-init-after-kvp.diff
|
||||||
Patch59: cloud-init-long-pass.patch
|
Patch59: cloud-init-recognize-hpc.patch
|
||||||
|
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: filesystem
|
BuildRequires: filesystem
|
||||||
# pkg-config is needed to find correct systemd unit dir
|
# pkg-config is needed to find correct systemd unit dir
|
||||||
BuildRequires: pkg-config
|
BuildRequires: pkg-config
|
||||||
# needed for /lib/udev
|
# needed for /lib/udev
|
||||||
BuildRequires: pkgconfig(udev)
|
BuildRequires: pkgconfig(udev)
|
||||||
%if 0%{?suse_version} > 1320
|
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
# Test requirements
|
# Test requirements
|
||||||
@ -66,16 +55,8 @@ BuildRequires: python3-jsonpatch
|
|||||||
BuildRequires: python3-mock
|
BuildRequires: python3-mock
|
||||||
BuildRequires: python3-nose
|
BuildRequires: python3-nose
|
||||||
BuildRequires: python3-oauthlib
|
BuildRequires: python3-oauthlib
|
||||||
|
BuildRequires: python3-pytest
|
||||||
BuildRequires: python3-requests
|
BuildRequires: python3-requests
|
||||||
#BuildRequires: python3-testtools
|
|
||||||
%else
|
|
||||||
BuildRequires: python-devel
|
|
||||||
BuildRequires: python-Jinja2
|
|
||||||
BuildRequires: python-PyYAML
|
|
||||||
BuildRequires: python-requests
|
|
||||||
BuildRequires: python-setuptools
|
|
||||||
BuildRequires: python-six
|
|
||||||
%endif
|
|
||||||
%if 0%{?is_opensuse}
|
%if 0%{?is_opensuse}
|
||||||
BuildRequires: openSUSE-release
|
BuildRequires: openSUSE-release
|
||||||
%else
|
%else
|
||||||
@ -89,7 +70,6 @@ Requires: growpart
|
|||||||
Requires: e2fsprogs
|
Requires: e2fsprogs
|
||||||
Requires: net-tools
|
Requires: net-tools
|
||||||
Requires: openssh
|
Requires: openssh
|
||||||
%if 0%{?suse_version} > 1320
|
|
||||||
Requires: python3-configobj >= 5.0.2
|
Requires: python3-configobj >= 5.0.2
|
||||||
Requires: python3-Jinja2
|
Requires: python3-Jinja2
|
||||||
Requires: python3-jsonpatch
|
Requires: python3-jsonpatch
|
||||||
@ -101,31 +81,15 @@ Requires: python3-requests
|
|||||||
Requires: python3-setuptools
|
Requires: python3-setuptools
|
||||||
Requires: python3-six
|
Requires: python3-six
|
||||||
Requires: python3-xml
|
Requires: python3-xml
|
||||||
%else
|
|
||||||
Requires: python-argparse
|
|
||||||
Requires: python-configobj >= 5.0.2
|
|
||||||
Requires: python-Jinja2
|
|
||||||
Requires: python-jsonpatch
|
|
||||||
Requires: python-jsonschema
|
|
||||||
Requires: python-oauthlib
|
|
||||||
Requires: python-pyserial
|
|
||||||
Requires: python-PyYAML
|
|
||||||
Requires: python-requests
|
|
||||||
Requires: python-setuptools
|
|
||||||
Requires: python-six
|
|
||||||
Requires: python-xml
|
|
||||||
%endif
|
|
||||||
Requires: sudo
|
Requires: sudo
|
||||||
Requires: util-linux
|
Requires: util-linux
|
||||||
|
Requires: wicked-service
|
||||||
Requires: cloud-init-config = %configver
|
Requires: cloud-init-config = %configver
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
%define docdir %{_defaultdocdir}/%{name}
|
%define docdir %{_defaultdocdir}/%{name}
|
||||||
%ifarch %ix86 x86_64
|
%ifarch %ix86 x86_64
|
||||||
Requires: dmidecode
|
Requires: dmidecode
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1210
|
|
||||||
%define initsys sysvinit_suse
|
|
||||||
%else
|
|
||||||
%define initsys systemd
|
%define initsys systemd
|
||||||
BuildRequires: pkgconfig(systemd)
|
BuildRequires: pkgconfig(systemd)
|
||||||
%{?systemd_requires}
|
%{?systemd_requires}
|
||||||
@ -134,12 +98,6 @@ BuildRequires: pkgconfig(systemd)
|
|||||||
%else
|
%else
|
||||||
%define systemd_prefix /usr/lib
|
%define systemd_prefix /usr/lib
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} >= 1315
|
|
||||||
Requires: wicked-service
|
|
||||||
%else
|
|
||||||
Requires: sysconfig-network
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Cloud-init is an init script that initializes a cloud node (VM)
|
Cloud-init is an init script that initializes a cloud node (VM)
|
||||||
@ -147,9 +105,9 @@ according to the fetched configuration data from the admin node.
|
|||||||
|
|
||||||
%package config-suse
|
%package config-suse
|
||||||
Summary: Configuration file for Cloud node initialization tool
|
Summary: Configuration file for Cloud node initialization tool
|
||||||
Provides: cloud-init-config = %configver
|
Provides: cloud-init-config = %configver
|
||||||
Group: System/Management
|
Group: System/Management
|
||||||
Conflicts: otherproviders(cloud-init-config)
|
Conflicts: otherproviders(cloud-init-config)
|
||||||
|
|
||||||
%description config-suse
|
%description config-suse
|
||||||
This package contains the product specific configuration file
|
This package contains the product specific configuration file
|
||||||
@ -166,62 +124,27 @@ according to the fetched configuration data from the admin node.
|
|||||||
|
|
||||||
Documentation and examples for cloud-init tools
|
Documentation and examples for cloud-init tools
|
||||||
|
|
||||||
#%package test
|
|
||||||
#Summary: Cloud node initialization tool - Testsuite
|
|
||||||
#Group: System/Management
|
|
||||||
#Requires: cloud-init = %{version}
|
|
||||||
#
|
|
||||||
#%description test
|
|
||||||
#Cloud-init is an init script that initializes a cloud node (VM)
|
|
||||||
#according to the fetched configuration data from the admin node.
|
|
||||||
#
|
|
||||||
#Unit tests for the cloud-init tools
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
|
||||||
%if 0%{?suse_version} < 1315
|
|
||||||
%patch20
|
|
||||||
%patch21
|
|
||||||
%endif
|
|
||||||
%patch29 -p0
|
%patch29 -p0
|
||||||
%patch34
|
%patch34
|
||||||
%patch42
|
|
||||||
%patch43
|
%patch43
|
||||||
%patch52
|
%patch52
|
||||||
%patch55 -p0
|
|
||||||
%patch56
|
%patch56
|
||||||
%patch57
|
%patch57
|
||||||
%patch58 -p1
|
%patch58 -p1
|
||||||
%patch59
|
%patch59
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1315
|
|
||||||
python setup.py build
|
|
||||||
%else
|
|
||||||
python3 setup.py build
|
python3 setup.py build
|
||||||
%endif
|
|
||||||
|
|
||||||
|
%check
|
||||||
#%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
|
|
||||||
## Ignore test failure currently not doing anything with opennebula
|
## Ignore test failure currently not doing anything with opennebula
|
||||||
#rm -v tests/unittests/test_datasource/test_opennebula.py
|
rm -v tests/unittests/test_datasource/test_opennebula.py
|
||||||
## To be investigated
|
make unittest3
|
||||||
#rm -v tests/unittests/test_handler/test_handler_ntp.py
|
|
||||||
#make test
|
|
||||||
#%endif
|
|
||||||
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1315
|
|
||||||
python setup.py install --root=%{buildroot} --prefix=%{_prefix} --install-lib=%{python_sitelib} --init-system=%{initsys}
|
|
||||||
%else
|
|
||||||
python3 setup.py install --root=%{buildroot} --prefix=%{_prefix} --install-lib=%{python3_sitelib} --init-system=%{initsys}
|
python3 setup.py install --root=%{buildroot} --prefix=%{_prefix} --install-lib=%{python3_sitelib} --init-system=%{initsys}
|
||||||
%endif
|
|
||||||
find %{buildroot} \( -name .gitignore -o -name .placeholder \) -delete
|
find %{buildroot} \( -name .gitignore -o -name .placeholder \) -delete
|
||||||
# from debian install script
|
# from debian install script
|
||||||
for x in "%{buildroot}%{_bindir}/"*.py; do
|
for x in "%{buildroot}%{_bindir}/"*.py; do
|
||||||
@ -259,30 +182,10 @@ rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.debian.*
|
|||||||
rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.redhat.*
|
rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.redhat.*
|
||||||
rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.ubuntu.*
|
rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.ubuntu.*
|
||||||
|
|
||||||
# move sysvinit scripts into the "right" place
|
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1210
|
|
||||||
mkdir -p %{buildroot}/%{_initddir}
|
|
||||||
mkdir -p %{buildroot}/%{_sbindir}
|
|
||||||
pushd "%{buildroot}%{_initddir}"
|
|
||||||
for iniF in *; do
|
|
||||||
ln -s "%{_initddir}/${iniF}" "%{buildroot}/%{_sbindir}/rc${iniF}"
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# remove duplicate files
|
# remove duplicate files
|
||||||
%if 0%{?suse_version}
|
%if 0%{?suse_version}
|
||||||
%if 0%{?suse_version} <= 1315
|
|
||||||
%fdupes %{buildroot}%{python_sitelib}
|
|
||||||
%else
|
|
||||||
%fdupes %{buildroot}%{python3_sitelib}
|
%fdupes %{buildroot}%{python3_sitelib}
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1210
|
|
||||||
%postun
|
|
||||||
%insserv_cleanup
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
@ -301,24 +204,9 @@ popd
|
|||||||
%dir %{_datadir}/bash-completion/completions
|
%dir %{_datadir}/bash-completion/completions
|
||||||
%endif
|
%endif
|
||||||
%{_datadir}/bash-completion/completions/cloud-init
|
%{_datadir}/bash-completion/completions/cloud-init
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1315
|
|
||||||
%{python_sitelib}/cloudinit
|
|
||||||
%{python_sitelib}/cloud_init-%{version}-py%{py_ver}.egg-info
|
|
||||||
%else
|
|
||||||
%{python3_sitelib}/cloudinit
|
%{python3_sitelib}/cloudinit
|
||||||
%{python3_sitelib}/cloud_init-%{version}-py%{py3_ver}.egg-info
|
%{python3_sitelib}/cloud_init-%{version}-py%{py3_ver}.egg-info
|
||||||
%endif
|
|
||||||
%{_prefix}/lib/cloud-init
|
%{_prefix}/lib/cloud-init
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} <= 1210
|
|
||||||
%{_sbindir}/rccloud-config
|
|
||||||
%{_sbindir}/rccloud-init
|
|
||||||
%{_sbindir}/rccloud-init-local
|
|
||||||
%{_sbindir}/rccloud-final
|
|
||||||
%attr(0755, root, root) %{_initddir}/cloud-config
|
|
||||||
%attr(0755, root, root) %{_initddir}/cloud-init
|
|
||||||
%attr(0755, root, root) %{_initddir}/cloud-init-local
|
|
||||||
%attr(0755, root, root) %{_initddir}/cloud-final
|
|
||||||
%else
|
|
||||||
%{systemd_prefix}/systemd/system-generators/cloud-init-generator
|
%{systemd_prefix}/systemd/system-generators/cloud-init-generator
|
||||||
%{systemd_prefix}/systemd/system/cloud-config.service
|
%{systemd_prefix}/systemd/system/cloud-config.service
|
||||||
%{systemd_prefix}/systemd/system/cloud-config.target
|
%{systemd_prefix}/systemd/system/cloud-config.target
|
||||||
@ -326,17 +214,9 @@ popd
|
|||||||
%{systemd_prefix}/systemd/system/cloud-init.service
|
%{systemd_prefix}/systemd/system/cloud-init.service
|
||||||
%{systemd_prefix}/systemd/system/cloud-init.target
|
%{systemd_prefix}/systemd/system/cloud-init.target
|
||||||
%{systemd_prefix}/systemd/system/cloud-final.service
|
%{systemd_prefix}/systemd/system/cloud-final.service
|
||||||
%endif
|
|
||||||
%if 0%{?suse_version} && 0%{?suse_version} > 1110
|
|
||||||
%dir %{_sysconfdir}/rsyslog.d
|
%dir %{_sysconfdir}/rsyslog.d
|
||||||
%{_sysconfdir}/rsyslog.d/21-cloudinit.conf
|
%{_sysconfdir}/rsyslog.d/21-cloudinit.conf
|
||||||
/usr/lib/udev/rules.d/66-azure-ephemeral.rules
|
/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 %attr(0755, root, root) %{_localstatedir}/lib/cloud
|
||||||
%dir %{docdir}
|
%dir %{docdir}
|
||||||
%dir /etc/NetworkManager
|
%dir /etc/NetworkManager
|
||||||
|
Loading…
Reference in New Issue
Block a user