import cloud-init-21.1-7.el8
This commit is contained in:
parent
5918eb684a
commit
f2b347fb74
@ -1 +1 @@
|
||||
cbde66f717b7883c4ab64b145042de54f131afab SOURCES/cloud-init-20.3.tar.gz
|
||||
2ae378aa2ae23b34b0ff123623ba5e2fbdc4928d SOURCES/cloud-init-21.1.tar.gz
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/cloud-init-20.3.tar.gz
|
||||
SOURCES/cloud-init-21.1.tar.gz
|
||||
|
@ -1,8 +1,18 @@
|
||||
From 25ea7a28d69518319ae1ed1b3cd510147868fd29 Mon Sep 17 00:00:00 2001
|
||||
From 074cb9b011623849cfa95c1d7cc813bb28f03ff0 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:49:36 +0200
|
||||
Date: Fri, 7 May 2021 13:36:03 +0200
|
||||
Subject: Add initial redhat setup
|
||||
|
||||
Merged patches (21.1):
|
||||
- 915d30ad Change gating file to correct rhel version
|
||||
- 311f318d Removing net-tools dependency
|
||||
- 74731806 Adding man pages to Red Hat spec file
|
||||
- 758d333d Removing blocking test from yaml configuration file
|
||||
- c7e7c59c Changing permission of cloud-init-generator to 755
|
||||
- 8b85abbb Installing man pages in the correct place with correct permissions
|
||||
- c6808d8d Fix unit failure of cloud-final.service if NetworkManager was not present.
|
||||
- 11866ef6 Report full specific version with "cloud-init --version"
|
||||
|
||||
Rebase notes (18.5):
|
||||
- added bash_completition file
|
||||
- added cloud-id file
|
||||
@ -33,36 +43,36 @@ setup.py:
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
---
|
||||
.gitignore | 1 +
|
||||
cloudinit/config/cc_chef.py | 67 ++++-
|
||||
cloudinit/config/cc_chef.py | 67 +++-
|
||||
cloudinit/settings.py | 7 +-
|
||||
redhat/.gitignore | 1 +
|
||||
redhat/Makefile | 71 +++++
|
||||
redhat/Makefile.common | 37 +++
|
||||
redhat/Makefile | 71 ++++
|
||||
redhat/Makefile.common | 37 ++
|
||||
redhat/cloud-init-tmpfiles.conf | 1 +
|
||||
redhat/cloud-init.spec.template | 517 ++++++++++++++++++++++++++++++++++
|
||||
redhat/gating.yaml | 9 +
|
||||
redhat/cloud-init.spec.template | 530 ++++++++++++++++++++++++++
|
||||
redhat/gating.yaml | 8 +
|
||||
redhat/rpmbuild/BUILD/.gitignore | 3 +
|
||||
redhat/rpmbuild/RPMS/.gitignore | 3 +
|
||||
redhat/rpmbuild/SOURCES/.gitignore | 3 +
|
||||
redhat/rpmbuild/SPECS/.gitignore | 3 +
|
||||
redhat/rpmbuild/SRPMS/.gitignore | 3 +
|
||||
redhat/scripts/frh.py | 27 ++
|
||||
redhat/scripts/git-backport-diff | 327 +++++++++++++++++++++
|
||||
redhat/scripts/git-compile-check | 215 ++++++++++++++
|
||||
redhat/scripts/process-patches.sh | 77 +++++
|
||||
redhat/scripts/git-backport-diff | 327 ++++++++++++++++
|
||||
redhat/scripts/git-compile-check | 215 +++++++++++
|
||||
redhat/scripts/process-patches.sh | 77 ++++
|
||||
redhat/scripts/tarball_checksum.sh | 3 +
|
||||
rhel/README.rhel | 5 +
|
||||
rhel/cloud-init-tmpfiles.conf | 1 +
|
||||
rhel/cloud.cfg | 69 +++++
|
||||
rhel/systemd/cloud-config.service | 18 ++
|
||||
rhel/cloud.cfg | 69 ++++
|
||||
rhel/systemd/cloud-config.service | 18 +
|
||||
rhel/systemd/cloud-config.target | 11 +
|
||||
rhel/systemd/cloud-final.service | 19 ++
|
||||
rhel/systemd/cloud-final.service | 24 ++
|
||||
rhel/systemd/cloud-init-local.service | 31 ++
|
||||
rhel/systemd/cloud-init.service | 25 ++
|
||||
rhel/systemd/cloud-init.target | 7 +
|
||||
setup.py | 23 +-
|
||||
tools/read-version | 28 +-
|
||||
30 files changed, 1562 insertions(+), 50 deletions(-)
|
||||
30 files changed, 1579 insertions(+), 50 deletions(-)
|
||||
create mode 100644 redhat/.gitignore
|
||||
create mode 100644 redhat/Makefile
|
||||
create mode 100644 redhat/Makefile.common
|
||||
@ -90,7 +100,7 @@ Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
create mode 100644 rhel/systemd/cloud-init.target
|
||||
|
||||
diff --git a/cloudinit/config/cc_chef.py b/cloudinit/config/cc_chef.py
|
||||
index aaf7136..97ef649 100644
|
||||
index aaf71366..97ef649a 100644
|
||||
--- a/cloudinit/config/cc_chef.py
|
||||
+++ b/cloudinit/config/cc_chef.py
|
||||
@@ -6,7 +6,70 @@
|
||||
@ -175,10 +185,10 @@ index aaf7136..97ef649 100644
|
||||
REQUIRED_CHEF_DIRS = tuple([
|
||||
'/etc/chef',
|
||||
diff --git a/cloudinit/settings.py b/cloudinit/settings.py
|
||||
index ca4ffa8..3a04a58 100644
|
||||
index 91e1bfe7..e690c0fd 100644
|
||||
--- a/cloudinit/settings.py
|
||||
+++ b/cloudinit/settings.py
|
||||
@@ -46,13 +46,16 @@ CFG_BUILTIN = {
|
||||
@@ -47,13 +47,16 @@ CFG_BUILTIN = {
|
||||
],
|
||||
'def_log_file': '/var/log/cloud-init.log',
|
||||
'log_cfgs': [],
|
||||
@ -199,7 +209,7 @@ index ca4ffa8..3a04a58 100644
|
||||
'vendor_data': {'enabled': True, 'prefix': []},
|
||||
diff --git a/rhel/README.rhel b/rhel/README.rhel
|
||||
new file mode 100644
|
||||
index 0000000..aa29630
|
||||
index 00000000..aa29630d
|
||||
--- /dev/null
|
||||
+++ b/rhel/README.rhel
|
||||
@@ -0,0 +1,5 @@
|
||||
@ -210,14 +220,14 @@ index 0000000..aa29630
|
||||
+ - grub_dpkg
|
||||
diff --git a/rhel/cloud-init-tmpfiles.conf b/rhel/cloud-init-tmpfiles.conf
|
||||
new file mode 100644
|
||||
index 0000000..0c6d2a3
|
||||
index 00000000..0c6d2a3b
|
||||
--- /dev/null
|
||||
+++ b/rhel/cloud-init-tmpfiles.conf
|
||||
@@ -0,0 +1 @@
|
||||
+d /run/cloud-init 0700 root root - -
|
||||
diff --git a/rhel/cloud.cfg b/rhel/cloud.cfg
|
||||
new file mode 100644
|
||||
index 0000000..82e8bf6
|
||||
index 00000000..82e8bf62
|
||||
--- /dev/null
|
||||
+++ b/rhel/cloud.cfg
|
||||
@@ -0,0 +1,69 @@
|
||||
@ -292,7 +302,7 @@ index 0000000..82e8bf6
|
||||
+# vim:syntax=yaml
|
||||
diff --git a/rhel/systemd/cloud-config.service b/rhel/systemd/cloud-config.service
|
||||
new file mode 100644
|
||||
index 0000000..f3dcd4b
|
||||
index 00000000..f3dcd4be
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-config.service
|
||||
@@ -0,0 +1,18 @@
|
||||
@ -316,7 +326,7 @@ index 0000000..f3dcd4b
|
||||
+WantedBy=cloud-init.target
|
||||
diff --git a/rhel/systemd/cloud-config.target b/rhel/systemd/cloud-config.target
|
||||
new file mode 100644
|
||||
index 0000000..ae9b7d0
|
||||
index 00000000..ae9b7d02
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-config.target
|
||||
@@ -0,0 +1,11 @@
|
||||
@ -333,10 +343,10 @@ index 0000000..ae9b7d0
|
||||
+After=cloud-init-local.service cloud-init.service
|
||||
diff --git a/rhel/systemd/cloud-final.service b/rhel/systemd/cloud-final.service
|
||||
new file mode 100644
|
||||
index 0000000..739b7e3
|
||||
index 00000000..e281c0cf
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-final.service
|
||||
@@ -0,0 +1,19 @@
|
||||
@@ -0,0 +1,24 @@
|
||||
+[Unit]
|
||||
+Description=Execute cloud user/final scripts
|
||||
+After=network-online.target cloud-config.service rc-local.service
|
||||
@ -350,6 +360,11 @@ index 0000000..739b7e3
|
||||
+RemainAfterExit=yes
|
||||
+TimeoutSec=0
|
||||
+KillMode=process
|
||||
+# Restart NetworkManager if it is present and running.
|
||||
+ExecStartPost=/bin/sh -c 'u=NetworkManager.service; \
|
||||
+ out=$(systemctl show --property=SubState $u) || exit; \
|
||||
+ [ "$out" = "SubState=running" ] || exit 0; \
|
||||
+ systemctl reload-or-try-restart $u'
|
||||
+
|
||||
+# Output needs to appear in instance console output
|
||||
+StandardOutput=journal+console
|
||||
@ -358,7 +373,7 @@ index 0000000..739b7e3
|
||||
+WantedBy=cloud-init.target
|
||||
diff --git a/rhel/systemd/cloud-init-local.service b/rhel/systemd/cloud-init-local.service
|
||||
new file mode 100644
|
||||
index 0000000..8f9f6c9
|
||||
index 00000000..8f9f6c9f
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-init-local.service
|
||||
@@ -0,0 +1,31 @@
|
||||
@ -395,7 +410,7 @@ index 0000000..8f9f6c9
|
||||
+WantedBy=cloud-init.target
|
||||
diff --git a/rhel/systemd/cloud-init.service b/rhel/systemd/cloud-init.service
|
||||
new file mode 100644
|
||||
index 0000000..d0023a0
|
||||
index 00000000..d0023a05
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-init.service
|
||||
@@ -0,0 +1,25 @@
|
||||
@ -426,7 +441,7 @@ index 0000000..d0023a0
|
||||
+WantedBy=cloud-init.target
|
||||
diff --git a/rhel/systemd/cloud-init.target b/rhel/systemd/cloud-init.target
|
||||
new file mode 100644
|
||||
index 0000000..083c3b6
|
||||
index 00000000..083c3b6f
|
||||
--- /dev/null
|
||||
+++ b/rhel/systemd/cloud-init.target
|
||||
@@ -0,0 +1,7 @@
|
||||
@ -438,7 +453,7 @@ index 0000000..083c3b6
|
||||
+Description=Cloud-init target
|
||||
+After=multi-user.target
|
||||
diff --git a/setup.py b/setup.py
|
||||
index cbacf48..d5cd01a 100755
|
||||
index cbacf48e..d5cd01a4 100755
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -125,14 +125,6 @@ INITSYS_FILES = {
|
||||
@ -503,7 +518,7 @@ index cbacf48..d5cd01a 100755
|
||||
'console_scripts': [
|
||||
'cloud-init = cloudinit.cmd.main:main',
|
||||
diff --git a/tools/read-version b/tools/read-version
|
||||
index 02c9064..79755f7 100755
|
||||
index 02c90643..79755f78 100755
|
||||
--- a/tools/read-version
|
||||
+++ b/tools/read-version
|
||||
@@ -71,32 +71,8 @@ version_long = None
|
||||
@ -542,5 +557,5 @@ index 02c9064..79755f7 100755
|
||||
# version is X.Y.Z[+xxx.gHASH]
|
||||
# version_long is None or X.Y.Z-xxx-gHASH
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From d9024cd3bd3bf09b05eb75ba3d81bd15f519c9f8 Mon Sep 17 00:00:00 2001
|
||||
From 472c2b5d4342b6ab6ce1584dc39bed0e6c1ca2e7 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:49:46 +0200
|
||||
Date: Fri, 7 May 2021 13:36:06 +0200
|
||||
Subject: Do not write NM_CONTROLLED=no in generated interface config files
|
||||
|
||||
Conflicts 20.3:
|
||||
@ -13,14 +13,14 @@ Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
Signed-off-by: Ryan McCabe <rmccabe@redhat.com>
|
||||
---
|
||||
cloudinit/net/sysconfig.py | 2 +-
|
||||
tests/unittests/test_net.py | 30 ------------------------------
|
||||
2 files changed, 1 insertion(+), 31 deletions(-)
|
||||
tests/unittests/test_net.py | 28 ----------------------------
|
||||
2 files changed, 1 insertion(+), 29 deletions(-)
|
||||
|
||||
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
|
||||
index 0a5d481..23e467d 100644
|
||||
index 99a4bae4..3d276666 100644
|
||||
--- a/cloudinit/net/sysconfig.py
|
||||
+++ b/cloudinit/net/sysconfig.py
|
||||
@@ -277,7 +277,7 @@ class Renderer(renderer.Renderer):
|
||||
@@ -289,7 +289,7 @@ class Renderer(renderer.Renderer):
|
||||
# details about this)
|
||||
|
||||
iface_defaults = {
|
||||
@ -30,7 +30,7 @@ index 0a5d481..23e467d 100644
|
||||
'suse': {'BOOTPROTO': 'static', 'STARTMODE': 'auto'},
|
||||
}
|
||||
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
|
||||
index 54cc846..9985a97 100644
|
||||
index 38d934d4..c67b5fcc 100644
|
||||
--- a/tests/unittests/test_net.py
|
||||
+++ b/tests/unittests/test_net.py
|
||||
@@ -535,7 +535,6 @@ GATEWAY=172.19.3.254
|
||||
@ -49,15 +49,15 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -754,7 +752,6 @@ IPV6ADDR_SECONDARIES="2001:DB9::10/64 2001:DB10::10/64"
|
||||
IPV6INIT=yes
|
||||
@@ -756,7 +754,6 @@ IPV6_AUTOCONF=no
|
||||
IPV6_DEFAULTGW=2001:DB8::1
|
||||
IPV6_FORCE_ACCEPT_RA=no
|
||||
NETMASK=255.255.252.0
|
||||
-NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -882,7 +879,6 @@ NETWORK_CONFIGS = {
|
||||
@@ -884,7 +881,6 @@ NETWORK_CONFIGS = {
|
||||
BOOTPROTO=none
|
||||
DEVICE=eth1
|
||||
HWADDR=cf:d6:af:48:e8:80
|
||||
@ -65,7 +65,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -899,7 +895,6 @@ NETWORK_CONFIGS = {
|
||||
@@ -901,7 +897,6 @@ NETWORK_CONFIGS = {
|
||||
IPADDR=192.168.21.3
|
||||
NETMASK=255.255.255.0
|
||||
METRIC=10000
|
||||
@ -73,15 +73,15 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -1028,7 +1023,6 @@ NETWORK_CONFIGS = {
|
||||
IPV6ADDR=2001:1::1/64
|
||||
IPV6INIT=yes
|
||||
@@ -1032,7 +1027,6 @@ NETWORK_CONFIGS = {
|
||||
IPV6_AUTOCONF=no
|
||||
IPV6_FORCE_ACCEPT_RA=no
|
||||
NETMASK=255.255.255.0
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -1622,7 +1616,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1737,7 +1731,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
DHCPV6C=yes
|
||||
IPV6INIT=yes
|
||||
MACADDR=aa:bb:cc:dd:ee:ff
|
||||
@ -89,15 +89,15 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Bond
|
||||
USERCTL=no"""),
|
||||
@@ -1630,7 +1623,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1745,7 +1738,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BOOTPROTO=dhcp
|
||||
DEVICE=bond0.200
|
||||
DHCLIENT_SET_DEFAULT_ROUTE=no
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
PHYSDEV=bond0
|
||||
TYPE=Ethernet
|
||||
@@ -1647,7 +1639,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
USERCTL=no
|
||||
@@ -1763,7 +1755,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
IPV6_DEFAULTGW=2001:4800:78ff:1b::1
|
||||
MACADDR=bb:bb:bb:bb:bb:aa
|
||||
NETMASK=255.255.255.0
|
||||
@ -105,7 +105,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
PRIO=22
|
||||
STP=no
|
||||
@@ -1657,7 +1648,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1773,7 +1764,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BOOTPROTO=none
|
||||
DEVICE=eth0
|
||||
HWADDR=c0:d6:9f:2c:e8:80
|
||||
@ -113,15 +113,15 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -1674,7 +1664,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1790,7 +1780,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
MTU=1500
|
||||
NETMASK=255.255.255.0
|
||||
NETMASK1=255.255.255.0
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
PHYSDEV=eth0
|
||||
TYPE=Ethernet
|
||||
@@ -1685,7 +1674,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
USERCTL=no
|
||||
@@ -1800,7 +1789,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
DEVICE=eth1
|
||||
HWADDR=aa:d6:9f:2c:e8:80
|
||||
MASTER=bond0
|
||||
@ -129,7 +129,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
SLAVE=yes
|
||||
TYPE=Ethernet
|
||||
@@ -1695,7 +1683,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1810,7 +1798,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
DEVICE=eth2
|
||||
HWADDR=c0:bb:9f:2c:e8:80
|
||||
MASTER=bond0
|
||||
@ -137,7 +137,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
SLAVE=yes
|
||||
TYPE=Ethernet
|
||||
@@ -1705,7 +1692,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1820,7 +1807,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BRIDGE=br0
|
||||
DEVICE=eth3
|
||||
HWADDR=66:bb:9f:2c:e8:80
|
||||
@ -145,7 +145,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -1714,7 +1700,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1829,7 +1815,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BRIDGE=br0
|
||||
DEVICE=eth4
|
||||
HWADDR=98:bb:9f:2c:e8:80
|
||||
@ -153,7 +153,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -1723,7 +1708,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1838,7 +1823,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
DEVICE=eth5
|
||||
DHCLIENT_SET_DEFAULT_ROUTE=no
|
||||
HWADDR=98:bb:9f:2c:e8:8a
|
||||
@ -161,7 +161,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=no
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -2177,7 +2161,6 @@ iface bond0 inet6 static
|
||||
@@ -2294,7 +2278,6 @@ iface bond0 inet6 static
|
||||
MTU=9000
|
||||
NETMASK=255.255.255.0
|
||||
NETMASK1=255.255.255.0
|
||||
@ -169,7 +169,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Bond
|
||||
USERCTL=no
|
||||
@@ -2187,7 +2170,6 @@ iface bond0 inet6 static
|
||||
@@ -2304,7 +2287,6 @@ iface bond0 inet6 static
|
||||
DEVICE=bond0s0
|
||||
HWADDR=aa:bb:cc:dd:e8:00
|
||||
MASTER=bond0
|
||||
@ -177,7 +177,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
SLAVE=yes
|
||||
TYPE=Ethernet
|
||||
@@ -2209,7 +2191,6 @@ iface bond0 inet6 static
|
||||
@@ -2326,7 +2308,6 @@ iface bond0 inet6 static
|
||||
DEVICE=bond0s1
|
||||
HWADDR=aa:bb:cc:dd:e8:01
|
||||
MASTER=bond0
|
||||
@ -185,7 +185,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
SLAVE=yes
|
||||
TYPE=Ethernet
|
||||
@@ -2266,7 +2247,6 @@ iface bond0 inet6 static
|
||||
@@ -2383,7 +2364,6 @@ iface bond0 inet6 static
|
||||
BOOTPROTO=none
|
||||
DEVICE=en0
|
||||
HWADDR=aa:bb:cc:dd:e8:00
|
||||
@ -193,15 +193,15 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no"""),
|
||||
@@ -2283,7 +2263,6 @@ iface bond0 inet6 static
|
||||
@@ -2402,7 +2382,6 @@ iface bond0 inet6 static
|
||||
MTU=2222
|
||||
NETMASK=255.255.255.0
|
||||
NETMASK1=255.255.255.0
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
PHYSDEV=en0
|
||||
TYPE=Ethernet
|
||||
@@ -2349,7 +2328,6 @@ iface bond0 inet6 static
|
||||
USERCTL=no
|
||||
@@ -2467,7 +2446,6 @@ iface bond0 inet6 static
|
||||
DEVICE=br0
|
||||
IPADDR=192.168.2.2
|
||||
NETMASK=255.255.255.0
|
||||
@ -209,23 +209,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
PRIO=22
|
||||
STP=no
|
||||
@@ -2363,7 +2341,6 @@ iface bond0 inet6 static
|
||||
HWADDR=52:54:00:12:34:00
|
||||
IPV6ADDR=2001:1::100/96
|
||||
IPV6INIT=yes
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -2375,7 +2352,6 @@ iface bond0 inet6 static
|
||||
HWADDR=52:54:00:12:34:01
|
||||
IPV6ADDR=2001:1::101/96
|
||||
IPV6INIT=yes
|
||||
- NM_CONTROLLED=no
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -2469,7 +2445,6 @@ iface bond0 inet6 static
|
||||
@@ -2591,7 +2569,6 @@ iface bond0 inet6 static
|
||||
HWADDR=52:54:00:12:34:00
|
||||
IPADDR=192.168.1.2
|
||||
NETMASK=255.255.255.0
|
||||
@ -233,7 +217,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=no
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -2479,7 +2454,6 @@ iface bond0 inet6 static
|
||||
@@ -2601,7 +2578,6 @@ iface bond0 inet6 static
|
||||
DEVICE=eth1
|
||||
HWADDR=52:54:00:12:34:aa
|
||||
MTU=1480
|
||||
@ -241,7 +225,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -2488,7 +2462,6 @@ iface bond0 inet6 static
|
||||
@@ -2610,7 +2586,6 @@ iface bond0 inet6 static
|
||||
BOOTPROTO=none
|
||||
DEVICE=eth2
|
||||
HWADDR=52:54:00:12:34:ff
|
||||
@ -249,7 +233,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=no
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -2905,7 +2878,6 @@ class TestRhelSysConfigRendering(CiTestCase):
|
||||
@@ -3027,7 +3002,6 @@ class TestRhelSysConfigRendering(CiTestCase):
|
||||
BOOTPROTO=dhcp
|
||||
DEVICE=eth1000
|
||||
HWADDR=07-1c-c6-75-a4-be
|
||||
@ -257,7 +241,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -3026,7 +2998,6 @@ GATEWAY=10.0.2.2
|
||||
@@ -3148,7 +3122,6 @@ GATEWAY=10.0.2.2
|
||||
HWADDR=52:54:00:12:34:00
|
||||
IPADDR=10.0.2.15
|
||||
NETMASK=255.255.255.0
|
||||
@ -265,7 +249,7 @@ index 54cc846..9985a97 100644
|
||||
ONBOOT=yes
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
@@ -3096,7 +3067,6 @@ USERCTL=no
|
||||
@@ -3218,7 +3191,6 @@ USERCTL=no
|
||||
#
|
||||
BOOTPROTO=dhcp
|
||||
DEVICE=eth0
|
||||
@ -274,5 +258,5 @@ index 54cc846..9985a97 100644
|
||||
TYPE=Ethernet
|
||||
USERCTL=no
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From de22eafc9046b8ea6fddda7440df5a05f5a40607 Mon Sep 17 00:00:00 2001
|
||||
From 6134624f10ef56534e37624adc12f11b09910591 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:49:53 +0200
|
||||
Date: Fri, 7 May 2021 13:36:08 +0200
|
||||
Subject: limit permissions on def_log_file
|
||||
|
||||
This sets a default mode of 0600 on def_log_file, and makes this
|
||||
@ -10,18 +10,22 @@ LP: #1541196
|
||||
Resolves: rhbz#1424612
|
||||
X-approved-upstream: true
|
||||
|
||||
Conflicts 21.1:
|
||||
cloudinit/stages.py: adjusting call of ensure_file() to use more
|
||||
recent version
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
---
|
||||
cloudinit/settings.py | 1 +
|
||||
cloudinit/stages.py | 3 ++-
|
||||
cloudinit/stages.py | 1 +
|
||||
doc/examples/cloud-config.txt | 4 ++++
|
||||
3 files changed, 7 insertions(+), 1 deletion(-)
|
||||
3 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/cloudinit/settings.py b/cloudinit/settings.py
|
||||
index 3a04a58..439eee0 100644
|
||||
index e690c0fd..43a1490c 100644
|
||||
--- a/cloudinit/settings.py
|
||||
+++ b/cloudinit/settings.py
|
||||
@@ -45,6 +45,7 @@ CFG_BUILTIN = {
|
||||
@@ -46,6 +46,7 @@ CFG_BUILTIN = {
|
||||
'None',
|
||||
],
|
||||
'def_log_file': '/var/log/cloud-init.log',
|
||||
@ -30,22 +34,19 @@ index 3a04a58..439eee0 100644
|
||||
'mount_default_fields': [None, None, 'auto', 'defaults,nofail', '0', '2'],
|
||||
'ssh_deletekeys': False,
|
||||
diff --git a/cloudinit/stages.py b/cloudinit/stages.py
|
||||
index 765f4aa..d769375 100644
|
||||
index 3ef4491c..83e25dd1 100644
|
||||
--- a/cloudinit/stages.py
|
||||
+++ b/cloudinit/stages.py
|
||||
@@ -147,8 +147,9 @@ class Init(object):
|
||||
@@ -147,6 +147,7 @@ class Init(object):
|
||||
def _initialize_filesystem(self):
|
||||
util.ensure_dirs(self._initial_subdirs())
|
||||
log_file = util.get_cfg_option_str(self.cfg, 'def_log_file')
|
||||
+ log_file_mode = util.get_cfg_option_int(self.cfg, 'def_log_file_mode')
|
||||
if log_file:
|
||||
- util.ensure_file(log_file)
|
||||
+ util.ensure_file(log_file, mode=log_file_mode)
|
||||
util.ensure_file(log_file, preserve_mode=True)
|
||||
perms = self.cfg.get('syslog_fix_perms')
|
||||
if not perms:
|
||||
perms = {}
|
||||
diff --git a/doc/examples/cloud-config.txt b/doc/examples/cloud-config.txt
|
||||
index f3ae5e6..b5b1fdd 100644
|
||||
index de9a0f87..bb33ad45 100644
|
||||
--- a/doc/examples/cloud-config.txt
|
||||
+++ b/doc/examples/cloud-config.txt
|
||||
@@ -414,10 +414,14 @@ timezone: US/Eastern
|
||||
@ -64,5 +65,5 @@ index f3ae5e6..b5b1fdd 100644
|
||||
|
||||
# you can set passwords for a user or multiple users
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From bb87d9a83ddbc5bf84fbdab9c58dedc0c9629eea Mon Sep 17 00:00:00 2001
|
||||
From 699d37a6ff3e343e214943794aac09e4156c2b2b Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:51:34 +0200
|
||||
Date: Fri, 7 May 2021 13:36:10 +0200
|
||||
Subject: sysconfig: Don't write BOOTPROTO=dhcp for ipv6 dhcp
|
||||
|
||||
Don't write BOOTPROTO=dhcp for ipv6 dhcp, as BOOTPROTO applies
|
||||
@ -20,10 +20,10 @@ Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
|
||||
index 9985a97..2cc57fe 100644
|
||||
index c67b5fcc..4ea0e597 100644
|
||||
--- a/tests/unittests/test_net.py
|
||||
+++ b/tests/unittests/test_net.py
|
||||
@@ -1614,6 +1614,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1729,6 +1729,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BOOTPROTO=none
|
||||
DEVICE=bond0
|
||||
DHCPV6C=yes
|
||||
@ -32,5 +32,5 @@ index 9985a97..2cc57fe 100644
|
||||
MACADDR=aa:bb:cc:dd:ee:ff
|
||||
ONBOOT=yes
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From 9c6562c6d3516df8d11aa7cf7cd9cc62e5c91a70 Mon Sep 17 00:00:00 2001
|
||||
From ccc75c1be3ae08d813193071c798fc905b5c03e5 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:51:37 +0200
|
||||
Date: Fri, 7 May 2021 13:36:12 +0200
|
||||
Subject: DataSourceAzure.py: use hostnamectl to set hostname
|
||||
|
||||
RH-Author: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||||
@ -40,10 +40,10 @@ Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
|
||||
index f3c6452..1c214db 100755
|
||||
index cee630f7..553b5a7e 100755
|
||||
--- a/cloudinit/sources/DataSourceAzure.py
|
||||
+++ b/cloudinit/sources/DataSourceAzure.py
|
||||
@@ -258,7 +258,7 @@ def get_hostname(hostname_command='hostname'):
|
||||
@@ -296,7 +296,7 @@ def get_hostname(hostname_command='hostname'):
|
||||
|
||||
|
||||
def set_hostname(hostname, hostname_command='hostname'):
|
||||
@ -53,5 +53,5 @@ index f3c6452..1c214db 100755
|
||||
|
||||
@azure_ds_telemetry_reporter
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From bdcad981ac530277529d1c77fb5e9e6f89409bd8 Mon Sep 17 00:00:00 2001
|
||||
From dfea0490b899804761fbd7aa23822783d7c36ec5 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:51:44 +0200
|
||||
Date: Fri, 7 May 2021 13:36:13 +0200
|
||||
Subject: include 'NOZEROCONF=yes' in /etc/sysconfig/network
|
||||
|
||||
RH-Author: Eduardo Otubo <otubo@redhat.com>
|
||||
@ -27,10 +27,10 @@ Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
2 files changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
|
||||
index 23e467d..af093dd 100644
|
||||
index 3d276666..d5440998 100644
|
||||
--- a/cloudinit/net/sysconfig.py
|
||||
+++ b/cloudinit/net/sysconfig.py
|
||||
@@ -888,7 +888,16 @@ class Renderer(renderer.Renderer):
|
||||
@@ -925,7 +925,16 @@ class Renderer(renderer.Renderer):
|
||||
# Distros configuring /etc/sysconfig/network as a file e.g. Centos
|
||||
if sysconfig_path.endswith('network'):
|
||||
util.ensure_dir(os.path.dirname(sysconfig_path))
|
||||
@ -49,10 +49,10 @@ index 23e467d..af093dd 100644
|
||||
netcfg.append('NETWORKING_IPV6=yes')
|
||||
netcfg.append('IPV6_AUTOCONF=no')
|
||||
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
|
||||
index 2cc57fe..9985a97 100644
|
||||
index 4ea0e597..c67b5fcc 100644
|
||||
--- a/tests/unittests/test_net.py
|
||||
+++ b/tests/unittests/test_net.py
|
||||
@@ -1614,7 +1614,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
@@ -1729,7 +1729,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true
|
||||
BOOTPROTO=none
|
||||
DEVICE=bond0
|
||||
DHCPV6C=yes
|
||||
@ -61,5 +61,5 @@ index 2cc57fe..9985a97 100644
|
||||
MACADDR=aa:bb:cc:dd:ee:ff
|
||||
ONBOOT=yes
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
From a52c7b659c6569c78aad4b92303f289009da476c Mon Sep 17 00:00:00 2001
|
||||
From 24894dcf45a307f44e29dc5d5b2d864b75fd982c Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Mon, 5 Oct 2020 13:51:50 +0200
|
||||
Date: Fri, 7 May 2021 13:36:14 +0200
|
||||
Subject: Remove race condition between cloud-init and NetworkManager
|
||||
|
||||
Message-id: <20200302104635.11648-1-otubo@redhat.com>
|
||||
@ -114,13 +114,12 @@ Date: Thu May 28 08:44:06 2020 +0200
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
---
|
||||
rhel/cloud.cfg | 2 +-
|
||||
rhel/systemd/cloud-final.service | 2 ++
|
||||
rhel/systemd/cloud-init.service | 1 +
|
||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
||||
rhel/cloud.cfg | 2 +-
|
||||
rhel/systemd/cloud-init.service | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rhel/cloud.cfg b/rhel/cloud.cfg
|
||||
index 82e8bf6..9ecba21 100644
|
||||
index 82e8bf62..9ecba215 100644
|
||||
--- a/rhel/cloud.cfg
|
||||
+++ b/rhel/cloud.cfg
|
||||
@@ -6,7 +6,7 @@ ssh_pwauth: 0
|
||||
@ -132,21 +131,8 @@ index 82e8bf6..9ecba21 100644
|
||||
ssh_genkeytypes: ~
|
||||
syslog_fix_perms: ~
|
||||
disable_vmware_customization: false
|
||||
diff --git a/rhel/systemd/cloud-final.service b/rhel/systemd/cloud-final.service
|
||||
index 739b7e3..05add07 100644
|
||||
--- a/rhel/systemd/cloud-final.service
|
||||
+++ b/rhel/systemd/cloud-final.service
|
||||
@@ -11,6 +11,8 @@ ExecStart=/usr/bin/cloud-init modules --mode=final
|
||||
RemainAfterExit=yes
|
||||
TimeoutSec=0
|
||||
KillMode=process
|
||||
+ExecStartPost=/bin/echo "trying to reload or restart NetworkManager.service"
|
||||
+ExecStartPost=/usr/bin/systemctl try-reload-or-restart NetworkManager.service
|
||||
|
||||
# Output needs to appear in instance console output
|
||||
StandardOutput=journal+console
|
||||
diff --git a/rhel/systemd/cloud-init.service b/rhel/systemd/cloud-init.service
|
||||
index d0023a0..0b3d796 100644
|
||||
index d0023a05..0b3d796d 100644
|
||||
--- a/rhel/systemd/cloud-init.service
|
||||
+++ b/rhel/systemd/cloud-init.service
|
||||
@@ -5,6 +5,7 @@ Wants=sshd-keygen.service
|
||||
@ -158,5 +144,5 @@ index d0023a0..0b3d796 100644
|
||||
Before=sshd-keygen.service
|
||||
Before=sshd.service
|
||||
--
|
||||
1.8.3.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,41 +1,25 @@
|
||||
From 83e17432645b9e959c82ffe9c86d20fa183bc5ef Mon Sep 17 00:00:00 2001
|
||||
From b48dda73da94782d7ab0c455fa382d3a5ef3c419 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Watkins <oddbloke@ubuntu.com>
|
||||
Date: Mon, 8 Mar 2021 12:50:57 -0500
|
||||
Subject: [PATCH 2/2] net: exclude OVS internal interfaces in get_interfaces
|
||||
(#829)
|
||||
Subject: net: exclude OVS internal interfaces in get_interfaces (#829)
|
||||
|
||||
RH-Author: Eduardo Otubo (otubo)
|
||||
RH-MergeRequest: 6: Patch series to fix "Bug 1957135 - Intermittent failure to start cloud-init due to failure to detect macs"
|
||||
RH-Commit: [2/2] d401dc64a7ceeecb091a792aa24de334940a3750 (otubo/cloud-init)
|
||||
RH-Bugzilla: 1957135
|
||||
RH-Acked-by: Mohammed Gamal <mmorsy@redhat.com>
|
||||
RH-Acked-by: Emanuele Giuseppe Esposito <[eesposit@redhat.com](mailto:eesposit@redhat.com>
|
||||
`get_interfaces` is used to in two ways, broadly: firstly, to determine
|
||||
the available interfaces when converting cloud network configuration
|
||||
formats to cloud-init's network configuration formats; and, secondly, to
|
||||
ensure that any interfaces which are specified in network configuration
|
||||
are (a) available, and (b) named correctly. The first of these is
|
||||
unaffected by this commit, as no clouds support Open vSwitch
|
||||
configuration in their network configuration formats.
|
||||
|
||||
commit 121bc04cdf0e6732fe143b7419131dc250c13384
|
||||
Author: Daniel Watkins <oddbloke@ubuntu.com>
|
||||
Date: Mon Mar 8 12:50:57 2021 -0500
|
||||
For the second, we check that MAC addresses of physical devices are
|
||||
unique. In some OVS configurations, there are OVS-created devices which
|
||||
have duplicate MAC addresses, either with each other or with physical
|
||||
devices. As these interfaces are created by OVS, we can be confident
|
||||
that (a) they will be available when appropriate, and (b) that OVS will
|
||||
name them correctly. As such, this commit excludes any OVS-internal
|
||||
interfaces from the set of interfaces returned by `get_interfaces`.
|
||||
|
||||
net: exclude OVS internal interfaces in get_interfaces (#829)
|
||||
|
||||
`get_interfaces` is used to in two ways, broadly: firstly, to determine
|
||||
the available interfaces when converting cloud network configuration
|
||||
formats to cloud-init's network configuration formats; and, secondly, to
|
||||
ensure that any interfaces which are specified in network configuration
|
||||
are (a) available, and (b) named correctly. The first of these is
|
||||
unaffected by this commit, as no clouds support Open vSwitch
|
||||
configuration in their network configuration formats.
|
||||
|
||||
For the second, we check that MAC addresses of physical devices are
|
||||
unique. In some OVS configurations, there are OVS-created devices which
|
||||
have duplicate MAC addresses, either with each other or with physical
|
||||
devices. As these interfaces are created by OVS, we can be confident
|
||||
that (a) they will be available when appropriate, and (b) that OVS will
|
||||
name them correctly. As such, this commit excludes any OVS-internal
|
||||
interfaces from the set of interfaces returned by `get_interfaces`.
|
||||
|
||||
LP: #1912844
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
LP: #1912844
|
||||
---
|
||||
cloudinit/net/__init__.py | 62 +++++++++
|
||||
cloudinit/net/tests/test_init.py | 119 ++++++++++++++++++
|
||||
@ -48,7 +32,7 @@ Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
create mode 100644 tests/integration_tests/bugs/test_lp1912844.py
|
||||
|
||||
diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py
|
||||
index 0aa58b27..2ff770e1 100644
|
||||
index de65e7af..385b7bcc 100644
|
||||
--- a/cloudinit/net/__init__.py
|
||||
+++ b/cloudinit/net/__init__.py
|
||||
@@ -6,6 +6,7 @@
|
||||
@ -132,15 +116,15 @@ index 0aa58b27..2ff770e1 100644
|
||||
def is_netfailover(devname, driver=None):
|
||||
""" netfailover driver uses 3 nics, master, primary and standby.
|
||||
this returns True if the device is either the primary or standby
|
||||
@@ -877,6 +937,8 @@ def get_interfaces():
|
||||
@@ -884,6 +944,8 @@ def get_interfaces(blacklist_drivers=None) -> list:
|
||||
# skip nics that have no mac (00:00....)
|
||||
if name != 'lo' and mac == zero_mac[:len(mac)]:
|
||||
continue
|
||||
+ if is_openvswitch_internal_interface(name):
|
||||
+ continue
|
||||
ret.append((name, mac, device_driver(name), device_devid(name)))
|
||||
return ret
|
||||
|
||||
# skip nics that have drivers blacklisted
|
||||
driver = device_driver(name)
|
||||
if driver in blacklist_drivers:
|
||||
diff --git a/cloudinit/net/tests/test_init.py b/cloudinit/net/tests/test_init.py
|
||||
index 0535387a..946f8ee2 100644
|
||||
--- a/cloudinit/net/tests/test_init.py
|
||||
@ -299,7 +283,7 @@ index 2bde1e3f..95fb9743 100644
|
||||
|
||||
def test_phy_types(self):
|
||||
diff --git a/cloudinit/sources/tests/test_oracle.py b/cloudinit/sources/tests/test_oracle.py
|
||||
index 7bd23813..902d1e40 100644
|
||||
index a7bbdfd9..dcf33b9b 100644
|
||||
--- a/cloudinit/sources/tests/test_oracle.py
|
||||
+++ b/cloudinit/sources/tests/test_oracle.py
|
||||
@@ -173,6 +173,10 @@ class TestIsPlatformViable(test_helpers.CiTestCase):
|
||||
@ -449,10 +433,10 @@ index 6f830cc6..2e2b7847 100644
|
||||
|
||||
with_logs = True
|
||||
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
|
||||
index 844d5ba8..3607c5e3 100644
|
||||
index c67b5fcc..14d3462f 100644
|
||||
--- a/tests/unittests/test_net.py
|
||||
+++ b/tests/unittests/test_net.py
|
||||
@@ -2825,6 +2825,10 @@ iface eth1 inet dhcp
|
||||
@@ -2908,6 +2908,10 @@ iface eth1 inet dhcp
|
||||
self.assertEqual(0, mock_settle.call_count)
|
||||
|
||||
|
||||
@ -463,7 +447,7 @@ index 844d5ba8..3607c5e3 100644
|
||||
class TestRhelSysConfigRendering(CiTestCase):
|
||||
|
||||
with_logs = True
|
||||
@@ -3495,6 +3499,10 @@ USERCTL=no
|
||||
@@ -3592,6 +3596,10 @@ USERCTL=no
|
||||
expected, self._render_and_read(network_config=v2data))
|
||||
|
||||
|
||||
@ -474,7 +458,7 @@ index 844d5ba8..3607c5e3 100644
|
||||
class TestOpenSuseSysConfigRendering(CiTestCase):
|
||||
|
||||
with_logs = True
|
||||
@@ -4859,6 +4867,10 @@ class TestNetRenderers(CiTestCase):
|
||||
@@ -5009,6 +5017,10 @@ class TestNetRenderers(CiTestCase):
|
||||
self.assertTrue(result)
|
||||
|
||||
|
||||
@ -485,7 +469,7 @@ index 844d5ba8..3607c5e3 100644
|
||||
class TestGetInterfaces(CiTestCase):
|
||||
_data = {'bonds': ['bond1'],
|
||||
'bridges': ['bridge1'],
|
||||
@@ -5008,6 +5020,10 @@ class TestInterfaceHasOwnMac(CiTestCase):
|
||||
@@ -5158,6 +5170,10 @@ class TestInterfaceHasOwnMac(CiTestCase):
|
||||
self.assertFalse(interface_has_own_mac("eth0"))
|
||||
|
||||
|
||||
@ -496,7 +480,7 @@ index 844d5ba8..3607c5e3 100644
|
||||
class TestGetInterfacesByMac(CiTestCase):
|
||||
_data = {'bonds': ['bond1'],
|
||||
'bridges': ['bridge1'],
|
||||
@@ -5164,6 +5180,10 @@ class TestInterfacesSorting(CiTestCase):
|
||||
@@ -5314,6 +5330,10 @@ class TestInterfacesSorting(CiTestCase):
|
||||
['enp0s3', 'enp0s8', 'enp0s13', 'enp1s2', 'enp2s0', 'enp2s3'])
|
||||
|
||||
|
@ -1,40 +1,24 @@
|
||||
From 93b48730e201bf374f75a3f71d8d6b28211016ba Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Tue, 23 Mar 2021 16:14:16 +0100
|
||||
Subject: [PATCH] Fix requiring device-number on EC2 derivatives (#836)
|
||||
From bec5fb60ffae3d1137c7261e5571c2751c5dda25 Mon Sep 17 00:00:00 2001
|
||||
From: James Falcon <TheRealFalcon@users.noreply.github.com>
|
||||
Date: Mon, 8 Mar 2021 14:09:47 -0600
|
||||
Subject: Fix requiring device-number on EC2 derivatives (#836)
|
||||
|
||||
RH-Author: Eduardo Otubo <otubo@redhat.com>
|
||||
RH-MergeRequest: 3: Fix requiring device-number on EC2 derivatives (#836)
|
||||
RH-Commit: [1/1] f372b10d179a969fcf824db8a39bdea3befc4ef4 (eterell/cloud-init)
|
||||
RH-Bugzilla: 1942699
|
||||
RH-Acked-by: Acked-by: Mohammed Gamal <mgamal@redhat.com>
|
||||
RH-Acked-by: Acked-by: Vitaly Kuznetsov vkuznets@redhat.com
|
||||
RH-Acked-by: Acked-by: Cathy Avery cavery@redhat.com
|
||||
#342 (70dbccbb) introduced the ability to determine route-metrics based on
|
||||
the `device-number` provided by the EC2 IMDS. Not all datasources that
|
||||
subclass EC2 will have this attribute, so allow the old behavior if
|
||||
`device-number` is not present.
|
||||
|
||||
commit 9bd19645a61586b82e86db6f518dd05c3363b17f
|
||||
Author: James Falcon <TheRealFalcon@users.noreply.github.com>
|
||||
Date: Mon Mar 8 14:09:47 2021 -0600
|
||||
|
||||
Fix requiring device-number on EC2 derivatives (#836)
|
||||
|
||||
#342 (70dbccbb) introduced the ability to determine route-metrics based on
|
||||
the `device-number` provided by the EC2 IMDS. Not all datasources that
|
||||
subclass EC2 will have this attribute, so allow the old behavior if
|
||||
`device-number` is not present.
|
||||
|
||||
LP: #1917875
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
LP: #1917875
|
||||
---
|
||||
cloudinit/sources/DataSourceEc2.py | 3 +-
|
||||
.../unittests/test_datasource/test_aliyun.py | 30 +++++++++++++++++++
|
||||
2 files changed, 32 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cloudinit/sources/DataSourceEc2.py b/cloudinit/sources/DataSourceEc2.py
|
||||
index 1d09c12a..ce69d1b3 100644
|
||||
index 1930a509..a2105dc7 100644
|
||||
--- a/cloudinit/sources/DataSourceEc2.py
|
||||
+++ b/cloudinit/sources/DataSourceEc2.py
|
||||
@@ -764,13 +764,14 @@ def convert_ec2_metadata_network_config(
|
||||
@@ -765,13 +765,14 @@ def convert_ec2_metadata_network_config(
|
||||
netcfg['ethernets'][nic_name] = dev_config
|
||||
return netcfg
|
||||
# Apply network config for all nics and any secondary IPv4/v6 addresses
|
||||
@ -51,7 +35,7 @@ index 1d09c12a..ce69d1b3 100644
|
||||
dev_config = {'dhcp4': True, 'dhcp4-overrides': dhcp_override,
|
||||
'dhcp6': False,
|
||||
diff --git a/tests/unittests/test_datasource/test_aliyun.py b/tests/unittests/test_datasource/test_aliyun.py
|
||||
index b626229e..a57f86a1 100644
|
||||
index eb2828d5..cab1ac2b 100644
|
||||
--- a/tests/unittests/test_datasource/test_aliyun.py
|
||||
+++ b/tests/unittests/test_datasource/test_aliyun.py
|
||||
@@ -7,6 +7,7 @@ from unittest import mock
|
@ -1,496 +0,0 @@
|
||||
From c3a1b3a5d7abe51a1facbdae71aca4b2bca7d6aa Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Wed, 28 Oct 2020 20:43:33 +0100
|
||||
Subject: [PATCH 2/3] Add config modules for controlling IBM PowerVM RMC.
|
||||
(#584)
|
||||
|
||||
RH-Author: Eduardo Terrell Ferrari Otubo (eterrell)
|
||||
RH-MergeRequest: 12: Support for cloud-init config modules for PowerVM Hypervisor in Red Hat cloud-init
|
||||
RH-Commit: [1/1] d175c3607a8d4f473573ba0ce42e0f311dbc31ed (eterrell/cloud-init)
|
||||
RH-Bugzilla: 1886430
|
||||
|
||||
commit f99d4f96b00a9cfec1c721d364cbfd728674e5dc (upstream/master)
|
||||
Author: Aman306 <45781773+Aman306@users.noreply.github.com>
|
||||
Date: Wed Oct 28 23:36:09 2020 +0530
|
||||
|
||||
Add config modules for controlling IBM PowerVM RMC. (#584)
|
||||
|
||||
Reliable Scalable Cluster Technology (RSCT) is a set of software
|
||||
components that together provide a comprehensive clustering
|
||||
environment(RAS features) for IBM PowerVM based virtual machines. RSCT
|
||||
includes the Resource Monitoring and Control (RMC) subsystem. RMC is a
|
||||
generalized framework used for managing, monitoring, and manipulating
|
||||
resources. RMC runs as a daemon process on individual machines and needs
|
||||
creation of unique node id and restarts during VM boot.
|
||||
|
||||
LP: #1895979
|
||||
|
||||
Co-authored-by: Scott Moser <smoser@brickies.net>
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
---
|
||||
cloudinit/config/cc_refresh_rmc_and_interface.py | 159 +++++++++++++++++++++
|
||||
cloudinit/config/cc_reset_rmc.py | 143 ++++++++++++++++++
|
||||
config/cloud.cfg.tmpl | 2 +
|
||||
.../test_handler_refresh_rmc_and_interface.py | 109 ++++++++++++++
|
||||
tools/.github-cla-signers | 1 +
|
||||
5 files changed, 414 insertions(+)
|
||||
create mode 100644 cloudinit/config/cc_refresh_rmc_and_interface.py
|
||||
create mode 100644 cloudinit/config/cc_reset_rmc.py
|
||||
create mode 100644 tests/unittests/test_handler/test_handler_refresh_rmc_and_interface.py
|
||||
|
||||
diff --git a/cloudinit/config/cc_refresh_rmc_and_interface.py b/cloudinit/config/cc_refresh_rmc_and_interface.py
|
||||
new file mode 100644
|
||||
index 0000000..146758a
|
||||
--- /dev/null
|
||||
+++ b/cloudinit/config/cc_refresh_rmc_and_interface.py
|
||||
@@ -0,0 +1,159 @@
|
||||
+# (c) Copyright IBM Corp. 2020 All Rights Reserved
|
||||
+#
|
||||
+# Author: Aman Kumar Sinha <amansi26@in.ibm.com>
|
||||
+#
|
||||
+# This file is part of cloud-init. See LICENSE file for license information.
|
||||
+
|
||||
+"""
|
||||
+Refresh IPv6 interface and RMC
|
||||
+------------------------------
|
||||
+**Summary:** Ensure Network Manager is not managing IPv6 interface
|
||||
+
|
||||
+This module is IBM PowerVM Hypervisor specific
|
||||
+
|
||||
+Reliable Scalable Cluster Technology (RSCT) is a set of software components
|
||||
+that together provide a comprehensive clustering environment(RAS features)
|
||||
+for IBM PowerVM based virtual machines. RSCT includes the Resource
|
||||
+Monitoring and Control (RMC) subsystem. RMC is a generalized framework used
|
||||
+for managing, monitoring, and manipulating resources. RMC runs as a daemon
|
||||
+process on individual machines and needs creation of unique node id and
|
||||
+restarts during VM boot.
|
||||
+More details refer
|
||||
+https://www.ibm.com/support/knowledgecenter/en/SGVKBA_3.2/admin/bl503_ovrv.htm
|
||||
+
|
||||
+This module handles
|
||||
+- Refreshing RMC
|
||||
+- Disabling NetworkManager from handling IPv6 interface, as IPv6 interface
|
||||
+ is used for communication between RMC daemon and PowerVM hypervisor.
|
||||
+
|
||||
+**Internal name:** ``cc_refresh_rmc_and_interface``
|
||||
+
|
||||
+**Module frequency:** per always
|
||||
+
|
||||
+**Supported distros:** RHEL
|
||||
+
|
||||
+"""
|
||||
+
|
||||
+from cloudinit import log as logging
|
||||
+from cloudinit.settings import PER_ALWAYS
|
||||
+from cloudinit import util
|
||||
+from cloudinit import subp
|
||||
+from cloudinit import netinfo
|
||||
+
|
||||
+import errno
|
||||
+
|
||||
+frequency = PER_ALWAYS
|
||||
+
|
||||
+LOG = logging.getLogger(__name__)
|
||||
+# Ensure that /opt/rsct/bin has been added to standard PATH of the
|
||||
+# distro. The symlink to rmcctrl is /usr/sbin/rsct/bin/rmcctrl .
|
||||
+RMCCTRL = 'rmcctrl'
|
||||
+
|
||||
+
|
||||
+def handle(name, _cfg, _cloud, _log, _args):
|
||||
+ if not subp.which(RMCCTRL):
|
||||
+ LOG.debug("No '%s' in path, disabled", RMCCTRL)
|
||||
+ return
|
||||
+
|
||||
+ LOG.debug(
|
||||
+ 'Making the IPv6 up explicitly. '
|
||||
+ 'Ensuring IPv6 interface is not being handled by NetworkManager '
|
||||
+ 'and it is restarted to re-establish the communication with '
|
||||
+ 'the hypervisor')
|
||||
+
|
||||
+ ifaces = find_ipv6_ifaces()
|
||||
+
|
||||
+ # Setting NM_CONTROLLED=no for IPv6 interface
|
||||
+ # making it down and up
|
||||
+
|
||||
+ if len(ifaces) == 0:
|
||||
+ LOG.debug("Did not find any interfaces with ipv6 addresses.")
|
||||
+ else:
|
||||
+ for iface in ifaces:
|
||||
+ refresh_ipv6(iface)
|
||||
+ disable_ipv6(sysconfig_path(iface))
|
||||
+ restart_network_manager()
|
||||
+
|
||||
+
|
||||
+def find_ipv6_ifaces():
|
||||
+ info = netinfo.netdev_info()
|
||||
+ ifaces = []
|
||||
+ for iface, data in info.items():
|
||||
+ if iface == "lo":
|
||||
+ LOG.debug('Skipping localhost interface')
|
||||
+ if len(data.get("ipv4", [])) != 0:
|
||||
+ # skip this interface, as it has ipv4 addrs
|
||||
+ continue
|
||||
+ ifaces.append(iface)
|
||||
+ return ifaces
|
||||
+
|
||||
+
|
||||
+def refresh_ipv6(interface):
|
||||
+ # IPv6 interface is explicitly brought up, subsequent to which the
|
||||
+ # RMC services are restarted to re-establish the communication with
|
||||
+ # the hypervisor.
|
||||
+ subp.subp(['ip', 'link', 'set', interface, 'down'])
|
||||
+ subp.subp(['ip', 'link', 'set', interface, 'up'])
|
||||
+
|
||||
+
|
||||
+def sysconfig_path(iface):
|
||||
+ return '/etc/sysconfig/network-scripts/ifcfg-' + iface
|
||||
+
|
||||
+
|
||||
+def restart_network_manager():
|
||||
+ subp.subp(['systemctl', 'restart', 'NetworkManager'])
|
||||
+
|
||||
+
|
||||
+def disable_ipv6(iface_file):
|
||||
+ # Ensuring that the communication b/w the hypervisor and VM is not
|
||||
+ # interrupted due to NetworkManager. For this purpose, as part of
|
||||
+ # this function, the NM_CONTROLLED is explicitly set to No for IPV6
|
||||
+ # interface and NetworkManager is restarted.
|
||||
+ try:
|
||||
+ contents = util.load_file(iface_file)
|
||||
+ except IOError as e:
|
||||
+ if e.errno == errno.ENOENT:
|
||||
+ LOG.debug("IPv6 interface file %s does not exist\n",
|
||||
+ iface_file)
|
||||
+ else:
|
||||
+ raise e
|
||||
+
|
||||
+ if 'IPV6INIT' not in contents:
|
||||
+ LOG.debug("Interface file %s did not have IPV6INIT", iface_file)
|
||||
+ return
|
||||
+
|
||||
+ LOG.debug("Editing interface file %s ", iface_file)
|
||||
+
|
||||
+ # Dropping any NM_CONTROLLED or IPV6 lines from IPv6 interface file.
|
||||
+ lines = contents.splitlines()
|
||||
+ lines = [line for line in lines if not search(line)]
|
||||
+ lines.append("NM_CONTROLLED=no")
|
||||
+
|
||||
+ with open(iface_file, "w") as fp:
|
||||
+ fp.write("\n".join(lines) + "\n")
|
||||
+
|
||||
+
|
||||
+def search(contents):
|
||||
+ # Search for any NM_CONTROLLED or IPV6 lines in IPv6 interface file.
|
||||
+ return(
|
||||
+ contents.startswith("IPV6ADDR") or
|
||||
+ contents.startswith("IPADDR6") or
|
||||
+ contents.startswith("IPV6INIT") or
|
||||
+ contents.startswith("NM_CONTROLLED"))
|
||||
+
|
||||
+
|
||||
+def refresh_rmc():
|
||||
+ # To make a healthy connection between RMC daemon and hypervisor we
|
||||
+ # refresh RMC. With refreshing RMC we are ensuring that making IPv6
|
||||
+ # down and up shouldn't impact communication between RMC daemon and
|
||||
+ # hypervisor.
|
||||
+ # -z : stop Resource Monitoring & Control subsystem and all resource
|
||||
+ # managers, but the command does not return control to the user
|
||||
+ # until the subsystem and all resource managers are stopped.
|
||||
+ # -s : start Resource Monitoring & Control subsystem.
|
||||
+ try:
|
||||
+ subp.subp([RMCCTRL, '-z'])
|
||||
+ subp.subp([RMCCTRL, '-s'])
|
||||
+ except Exception:
|
||||
+ util.logexc(LOG, 'Failed to refresh the RMC subsystem.')
|
||||
+ raise
|
||||
diff --git a/cloudinit/config/cc_reset_rmc.py b/cloudinit/config/cc_reset_rmc.py
|
||||
new file mode 100644
|
||||
index 0000000..1cd7277
|
||||
--- /dev/null
|
||||
+++ b/cloudinit/config/cc_reset_rmc.py
|
||||
@@ -0,0 +1,143 @@
|
||||
+# (c) Copyright IBM Corp. 2020 All Rights Reserved
|
||||
+#
|
||||
+# Author: Aman Kumar Sinha <amansi26@in.ibm.com>
|
||||
+#
|
||||
+# This file is part of cloud-init. See LICENSE file for license information.
|
||||
+
|
||||
+
|
||||
+"""
|
||||
+Reset RMC
|
||||
+------------
|
||||
+**Summary:** reset rsct node id
|
||||
+
|
||||
+Reset RMC module is IBM PowerVM Hypervisor specific
|
||||
+
|
||||
+Reliable Scalable Cluster Technology (RSCT) is a set of software components,
|
||||
+that together provide a comprehensive clustering environment (RAS features)
|
||||
+for IBM PowerVM based virtual machines. RSCT includes the Resource monitoring
|
||||
+and control (RMC) subsystem. RMC is a generalized framework used for managing,
|
||||
+monitoring, and manipulating resources. RMC runs as a daemon process on
|
||||
+individual machines and needs creation of unique node id and restarts
|
||||
+during VM boot.
|
||||
+More details refer
|
||||
+https://www.ibm.com/support/knowledgecenter/en/SGVKBA_3.2/admin/bl503_ovrv.htm
|
||||
+
|
||||
+This module handles
|
||||
+- creation of the unique RSCT node id to every instance/virtual machine
|
||||
+ and ensure once set, it isn't changed subsequently by cloud-init.
|
||||
+ In order to do so, it restarts RSCT service.
|
||||
+
|
||||
+Prerequisite of using this module is to install RSCT packages.
|
||||
+
|
||||
+**Internal name:** ``cc_reset_rmc``
|
||||
+
|
||||
+**Module frequency:** per instance
|
||||
+
|
||||
+**Supported distros:** rhel, sles and ubuntu
|
||||
+
|
||||
+"""
|
||||
+import os
|
||||
+
|
||||
+from cloudinit import log as logging
|
||||
+from cloudinit.settings import PER_INSTANCE
|
||||
+from cloudinit import util
|
||||
+from cloudinit import subp
|
||||
+
|
||||
+frequency = PER_INSTANCE
|
||||
+
|
||||
+# RMCCTRL is expected to be in system PATH (/opt/rsct/bin)
|
||||
+# The symlink for RMCCTRL and RECFGCT are
|
||||
+# /usr/sbin/rsct/bin/rmcctrl and
|
||||
+# /usr/sbin/rsct/install/bin/recfgct respectively.
|
||||
+RSCT_PATH = '/opt/rsct/install/bin'
|
||||
+RMCCTRL = 'rmcctrl'
|
||||
+RECFGCT = 'recfgct'
|
||||
+
|
||||
+LOG = logging.getLogger(__name__)
|
||||
+
|
||||
+NODE_ID_FILE = '/etc/ct_node_id'
|
||||
+
|
||||
+
|
||||
+def handle(name, _cfg, cloud, _log, _args):
|
||||
+ # Ensuring node id has to be generated only once during first boot
|
||||
+ if cloud.datasource.platform_type == 'none':
|
||||
+ LOG.debug('Skipping creation of new ct_node_id node')
|
||||
+ return
|
||||
+
|
||||
+ if not os.path.isdir(RSCT_PATH):
|
||||
+ LOG.debug("module disabled, RSCT_PATH not present")
|
||||
+ return
|
||||
+
|
||||
+ orig_path = os.environ.get('PATH')
|
||||
+ try:
|
||||
+ add_path(orig_path)
|
||||
+ reset_rmc()
|
||||
+ finally:
|
||||
+ if orig_path:
|
||||
+ os.environ['PATH'] = orig_path
|
||||
+ else:
|
||||
+ del os.environ['PATH']
|
||||
+
|
||||
+
|
||||
+def reconfigure_rsct_subsystems():
|
||||
+ # Reconfigure the RSCT subsystems, which includes removing all RSCT data
|
||||
+ # under the /var/ct directory, generating a new node ID, and making it
|
||||
+ # appear as if the RSCT components were just installed
|
||||
+ try:
|
||||
+ out = subp.subp([RECFGCT])[0]
|
||||
+ LOG.debug(out.strip())
|
||||
+ return out
|
||||
+ except subp.ProcessExecutionError:
|
||||
+ util.logexc(LOG, 'Failed to reconfigure the RSCT subsystems.')
|
||||
+ raise
|
||||
+
|
||||
+
|
||||
+def get_node_id():
|
||||
+ try:
|
||||
+ fp = util.load_file(NODE_ID_FILE)
|
||||
+ node_id = fp.split('\n')[0]
|
||||
+ return node_id
|
||||
+ except Exception:
|
||||
+ util.logexc(LOG, 'Failed to get node ID from file %s.' % NODE_ID_FILE)
|
||||
+ raise
|
||||
+
|
||||
+
|
||||
+def add_path(orig_path):
|
||||
+ # Adding the RSCT_PATH to env standard path
|
||||
+ # So thet cloud init automatically find and
|
||||
+ # run RECFGCT to create new node_id.
|
||||
+ suff = ":" + orig_path if orig_path else ""
|
||||
+ os.environ['PATH'] = RSCT_PATH + suff
|
||||
+ return os.environ['PATH']
|
||||
+
|
||||
+
|
||||
+def rmcctrl():
|
||||
+ # Stop the RMC subsystem and all resource managers so that we can make
|
||||
+ # some changes to it
|
||||
+ try:
|
||||
+ return subp.subp([RMCCTRL, '-z'])
|
||||
+ except Exception:
|
||||
+ util.logexc(LOG, 'Failed to stop the RMC subsystem.')
|
||||
+ raise
|
||||
+
|
||||
+
|
||||
+def reset_rmc():
|
||||
+ LOG.debug('Attempting to reset RMC.')
|
||||
+
|
||||
+ node_id_before = get_node_id()
|
||||
+ LOG.debug('Node ID at beginning of module: %s', node_id_before)
|
||||
+
|
||||
+ # Stop the RMC subsystem and all resource managers so that we can make
|
||||
+ # some changes to it
|
||||
+ rmcctrl()
|
||||
+ reconfigure_rsct_subsystems()
|
||||
+
|
||||
+ node_id_after = get_node_id()
|
||||
+ LOG.debug('Node ID at end of module: %s', node_id_after)
|
||||
+
|
||||
+ # Check if new node ID is generated or not
|
||||
+ # by comparing old and new node ID
|
||||
+ if node_id_after == node_id_before:
|
||||
+ msg = 'New node ID did not get generated.'
|
||||
+ LOG.error(msg)
|
||||
+ raise Exception(msg)
|
||||
diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl
|
||||
index 2beb9b0..7171aaa 100644
|
||||
--- a/config/cloud.cfg.tmpl
|
||||
+++ b/config/cloud.cfg.tmpl
|
||||
@@ -135,6 +135,8 @@ cloud_final_modules:
|
||||
- chef
|
||||
- mcollective
|
||||
- salt-minion
|
||||
+ - reset_rmc
|
||||
+ - refresh_rmc_and_interface
|
||||
- rightscale_userdata
|
||||
- scripts-vendor
|
||||
- scripts-per-once
|
||||
diff --git a/tests/unittests/test_handler/test_handler_refresh_rmc_and_interface.py b/tests/unittests/test_handler/test_handler_refresh_rmc_and_interface.py
|
||||
new file mode 100644
|
||||
index 0000000..e13b779
|
||||
--- /dev/null
|
||||
+++ b/tests/unittests/test_handler/test_handler_refresh_rmc_and_interface.py
|
||||
@@ -0,0 +1,109 @@
|
||||
+from cloudinit.config import cc_refresh_rmc_and_interface as ccrmci
|
||||
+
|
||||
+from cloudinit import util
|
||||
+
|
||||
+from cloudinit.tests import helpers as t_help
|
||||
+from cloudinit.tests.helpers import mock
|
||||
+
|
||||
+from textwrap import dedent
|
||||
+import logging
|
||||
+
|
||||
+LOG = logging.getLogger(__name__)
|
||||
+MPATH = "cloudinit.config.cc_refresh_rmc_and_interface"
|
||||
+NET_INFO = {
|
||||
+ 'lo': {'ipv4': [{'ip': '127.0.0.1',
|
||||
+ 'bcast': '', 'mask': '255.0.0.0',
|
||||
+ 'scope': 'host'}],
|
||||
+ 'ipv6': [{'ip': '::1/128',
|
||||
+ 'scope6': 'host'}], 'hwaddr': '',
|
||||
+ 'up': 'True'},
|
||||
+ 'env2': {'ipv4': [{'ip': '8.0.0.19',
|
||||
+ 'bcast': '8.0.0.255', 'mask': '255.255.255.0',
|
||||
+ 'scope': 'global'}],
|
||||
+ 'ipv6': [{'ip': 'fe80::f896:c2ff:fe81:8220/64',
|
||||
+ 'scope6': 'link'}], 'hwaddr': 'fa:96:c2:81:82:20',
|
||||
+ 'up': 'True'},
|
||||
+ 'env3': {'ipv4': [{'ip': '90.0.0.14',
|
||||
+ 'bcast': '90.0.0.255', 'mask': '255.255.255.0',
|
||||
+ 'scope': 'global'}],
|
||||
+ 'ipv6': [{'ip': 'fe80::f896:c2ff:fe81:8221/64',
|
||||
+ 'scope6': 'link'}], 'hwaddr': 'fa:96:c2:81:82:21',
|
||||
+ 'up': 'True'},
|
||||
+ 'env4': {'ipv4': [{'ip': '9.114.23.7',
|
||||
+ 'bcast': '9.114.23.255', 'mask': '255.255.255.0',
|
||||
+ 'scope': 'global'}],
|
||||
+ 'ipv6': [{'ip': 'fe80::f896:c2ff:fe81:8222/64',
|
||||
+ 'scope6': 'link'}], 'hwaddr': 'fa:96:c2:81:82:22',
|
||||
+ 'up': 'True'},
|
||||
+ 'env5': {'ipv4': [],
|
||||
+ 'ipv6': [{'ip': 'fe80::9c26:c3ff:fea4:62c8/64',
|
||||
+ 'scope6': 'link'}], 'hwaddr': '42:20:86:df:fa:4c',
|
||||
+ 'up': 'True'}}
|
||||
+
|
||||
+
|
||||
+class TestRsctNodeFile(t_help.CiTestCase):
|
||||
+ def test_disable_ipv6_interface(self):
|
||||
+ """test parsing of iface files."""
|
||||
+ fname = self.tmp_path("iface-eth5")
|
||||
+ util.write_file(fname, dedent("""\
|
||||
+ BOOTPROTO=static
|
||||
+ DEVICE=eth5
|
||||
+ HWADDR=42:20:86:df:fa:4c
|
||||
+ IPV6INIT=yes
|
||||
+ IPADDR6=fe80::9c26:c3ff:fea4:62c8/64
|
||||
+ IPV6ADDR=fe80::9c26:c3ff:fea4:62c8/64
|
||||
+ NM_CONTROLLED=yes
|
||||
+ ONBOOT=yes
|
||||
+ STARTMODE=auto
|
||||
+ TYPE=Ethernet
|
||||
+ USERCTL=no
|
||||
+ """))
|
||||
+
|
||||
+ ccrmci.disable_ipv6(fname)
|
||||
+ self.assertEqual(dedent("""\
|
||||
+ BOOTPROTO=static
|
||||
+ DEVICE=eth5
|
||||
+ HWADDR=42:20:86:df:fa:4c
|
||||
+ ONBOOT=yes
|
||||
+ STARTMODE=auto
|
||||
+ TYPE=Ethernet
|
||||
+ USERCTL=no
|
||||
+ NM_CONTROLLED=no
|
||||
+ """), util.load_file(fname))
|
||||
+
|
||||
+ @mock.patch(MPATH + '.refresh_rmc')
|
||||
+ @mock.patch(MPATH + '.restart_network_manager')
|
||||
+ @mock.patch(MPATH + '.disable_ipv6')
|
||||
+ @mock.patch(MPATH + '.refresh_ipv6')
|
||||
+ @mock.patch(MPATH + '.netinfo.netdev_info')
|
||||
+ @mock.patch(MPATH + '.subp.which')
|
||||
+ def test_handle(self, m_refresh_rmc,
|
||||
+ m_netdev_info, m_refresh_ipv6, m_disable_ipv6,
|
||||
+ m_restart_nm, m_which):
|
||||
+ """Basic test of handle."""
|
||||
+ m_netdev_info.return_value = NET_INFO
|
||||
+ m_which.return_value = '/opt/rsct/bin/rmcctrl'
|
||||
+ ccrmci.handle(
|
||||
+ "refresh_rmc_and_interface", None, None, None, None)
|
||||
+ self.assertEqual(1, m_netdev_info.call_count)
|
||||
+ m_refresh_ipv6.assert_called_with('env5')
|
||||
+ m_disable_ipv6.assert_called_with(
|
||||
+ '/etc/sysconfig/network-scripts/ifcfg-env5')
|
||||
+ self.assertEqual(1, m_restart_nm.call_count)
|
||||
+ self.assertEqual(1, m_refresh_rmc.call_count)
|
||||
+
|
||||
+ @mock.patch(MPATH + '.netinfo.netdev_info')
|
||||
+ def test_find_ipv6(self, m_netdev_info):
|
||||
+ """find_ipv6_ifaces parses netdev_info returning those with ipv6"""
|
||||
+ m_netdev_info.return_value = NET_INFO
|
||||
+ found = ccrmci.find_ipv6_ifaces()
|
||||
+ self.assertEqual(['env5'], found)
|
||||
+
|
||||
+ @mock.patch(MPATH + '.subp.subp')
|
||||
+ def test_refresh_ipv6(self, m_subp):
|
||||
+ """refresh_ipv6 should ip down and up the interface."""
|
||||
+ iface = "myeth0"
|
||||
+ ccrmci.refresh_ipv6(iface)
|
||||
+ m_subp.assert_has_calls([
|
||||
+ mock.call(['ip', 'link', 'set', iface, 'down']),
|
||||
+ mock.call(['ip', 'link', 'set', iface, 'up'])])
|
||||
diff --git a/tools/.github-cla-signers b/tools/.github-cla-signers
|
||||
index c67db43..802a35b 100644
|
||||
--- a/tools/.github-cla-signers
|
||||
+++ b/tools/.github-cla-signers
|
||||
@@ -1,4 +1,5 @@
|
||||
AlexBaranowski
|
||||
+Aman306
|
||||
beezly
|
||||
bipinbachhao
|
||||
BirknerAlex
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,58 +0,0 @@
|
||||
From 8a7d21fa739901bad847294004266dba76c027af Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Tue, 1 Dec 2020 15:51:47 +0100
|
||||
Subject: [PATCH 2/4] Adding BOOTPROTO = dhcp to render sysconfig dhcp6
|
||||
stateful on RHEL (#685)
|
||||
|
||||
RH-Author: Eduardo Terrell Ferrari Otubo (eterrell)
|
||||
RH-MergeRequest: 25: Adding BOOTPROTO = dhcp to render sysconfig dhcp6 stateful on RHEL (#685)
|
||||
RH-Commit: [1/1] b7304323096b1e40287950e44cf7aa3cdb4ba99e (eterrell/cloud-init)
|
||||
RH-Bugzilla: 1859695
|
||||
|
||||
BOOTPROTO needs to be set to 'dhcp' on RHEL so NetworkManager can
|
||||
properly acquire ipv6 address.
|
||||
|
||||
rhbz: #1859695
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
||||
|
||||
Co-authored-by: Daniel Watkins <oddbloke@ubuntu.com>
|
||||
Co-authored-by: Scott Moser <smoser@brickies.net>
|
||||
---
|
||||
cloudinit/net/sysconfig.py | 6 ++++++
|
||||
tests/unittests/test_net.py | 2 +-
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
|
||||
index 078636a4..94801a93 100644
|
||||
--- a/cloudinit/net/sysconfig.py
|
||||
+++ b/cloudinit/net/sysconfig.py
|
||||
@@ -391,6 +391,12 @@ class Renderer(renderer.Renderer):
|
||||
# Only IPv6 is DHCP, IPv4 may be static
|
||||
iface_cfg['BOOTPROTO'] = 'dhcp6'
|
||||
iface_cfg['DHCLIENT6_MODE'] = 'managed'
|
||||
+ # only if rhel AND dhcpv6 stateful
|
||||
+ elif (flavor == 'rhel' and
|
||||
+ subnet_type == 'ipv6_dhcpv6-stateful'):
|
||||
+ iface_cfg['BOOTPROTO'] = 'dhcp'
|
||||
+ iface_cfg['DHCPV6C'] = True
|
||||
+ iface_cfg['IPV6INIT'] = True
|
||||
else:
|
||||
iface_cfg['IPV6INIT'] = True
|
||||
# Configure network settings using DHCPv6
|
||||
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
|
||||
index c0337459..bcd261db 100644
|
||||
--- a/tests/unittests/test_net.py
|
||||
+++ b/tests/unittests/test_net.py
|
||||
@@ -1359,7 +1359,7 @@ NETWORK_CONFIGS = {
|
||||
},
|
||||
'expected_sysconfig_rhel': {
|
||||
'ifcfg-iface0': textwrap.dedent("""\
|
||||
- BOOTPROTO=none
|
||||
+ BOOTPROTO=dhcp
|
||||
DEVICE=iface0
|
||||
DHCPV6C=yes
|
||||
IPV6INIT=yes
|
||||
--
|
||||
2.18.4
|
||||
|
@ -1,60 +0,0 @@
|
||||
From bcbd6be99d8317793aff905c4222c351a1bf5c46 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@redhat.com>
|
||||
Date: Thu, 21 Jan 2021 10:08:49 +0100
|
||||
Subject: [PATCH 1/2] DataSourceAzure: update password for defuser if exists
|
||||
(#671)
|
||||
|
||||
RH-Author: Eduardo Terrell Ferrari Otubo (eterrell)
|
||||
RH-MergeRequest: 37: DataSourceAzure: update password for defuser if exists (#671)
|
||||
RH-Commit: [1/1] 264092a68a3771cc4ed99dad5b93f7a1433e143a (eterrell/cloud-init)
|
||||