network configuration fails on CentoS 7.5: using dhcp instead of static address
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
cloud-init |
Invalid
|
Undecided
|
Unassigned | ||
cloud-init (CentOS) |
Confirmed
|
Undecided
|
Bug Description
Cloud-Provider: NoCloud via Proxmox and qm set
I have centostemplate CentOS 7.5 VM on Proxmox and with:
[root@centostem
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_
NAME=eth0
UUID=9c[…]
DEVICE=eth0
ONBOOT=yes
DNS1=10.0.0.4
DOMAIN=qs.de
IPADDR=10.0.88.101
PREFIX=8
GATEWAY=10.0.0.4
IPV6_PRIVACY=no
PROXY_METHOD=none
BROWSER_ONLY=no
I have a script that on Proxmox does:
- qm clone 2100 2101 --name centos1
- qm set 2101 --ipconfig0 ip=10.0.
- qm start 2101
I get
[root@centos1 ~]# cat /mnt/zeit/
version: 1
config:
- type: physical
name: eth0
mac_address: F2:15:C8:E1:0A:49
subnets:
- type: static
address: 10.0.88.151/8
gateway: 10.0.0.4
- type: nameserver
address:
- 10.0.0.4
search:
- somedomain.de
[root@centos1 ~]# ip -4 addr show eth0
2: eth0: <BROADCAST,
inet 10.0.0.161/16 brd 10.0.255.255 scope global noprefixroute dynamic eth0
valid_lft 171536sec preferred_lft 171536sec
and:
[root@centos1 ~]# cat /etc/sysconfig/
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=none
DEFROUTE=yes
DEVICE=eth0
GATEWAY=10.0.0.4
HWADDR=
IPADDR=
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
[root@centos1 ~]# ip link show eth0
2: eth0: <BROADCAST,
link/ether f2:15:c8:e1:0a:49 brd ff:ff:ff:ff:ff:ff
Yet while this works it is wrong on RedHat. It has to be:
IPADDR=10.0.88.151
PREFIX=8
Otherwise I get this:
[root@centos1 ~]# LANG=C ifup eth0
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Display brief usage message
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Display brief usage message
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Display brief usage message
arping: 10.0.88.151/8: Name or service not known
Error: any valid prefix is expected rather than "10.0.88.151/8/".
ERROR : [/etc/sysconfig
arping: 10.0.88.151/8: Name or service not known
Error: any valid prefix is expected rather than "10.0.88.151/8/".
RTNETLINK answers: File exists
Consequently this little change fixes the issue:
[root@centos1 ~]# diff -u /etc/sysconfig/
--- /etc/sysconfig/
+++ /etc/sysconfig/
@@ -5,7 +5,8 @@
DEVICE=eth0
GATEWAY=10.0.0.4
HWADDR=
-IPADDR=
+IPADDR=10.0.88.151
+PREFIX=8
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
Changed in cloud-init (CentOS): | |
importance: | Unknown → Undecided |
status: | Unknown → Confirmed |
Using CentOS but reporting here as the fix needs to go into the upstream source and then RHEL RPM anyway before going into CentOS, also reported there, see under "Additional info".
Description of problem:
cloud-init configures static network wrongly as:
IPADDR= 10.0.88. 151/8
instead of
IPADDR=10.0.88.151
PREFIX=8
Version-Release number of selected component (if applicable):
cloud-init- 0.7.9-24. el7.centos. x86_64
How reproducible:
Always.
Steps to Reproduce:
1. Have a network configuration like (here via NoCloud source on Proxmox):
[root@centos1 ~]# mount | grep sr0 network- config
/dev/sr0 on /mnt/zeit type iso9660 (ro,relatime)
[root@centos1 ~]# cat /mnt/zeit/
meta-data network-config user-data
[root@centos1 ~]# cat /mnt/zeit/
version: 1
config:
- type: physical
name: eth0
mac_address: F2:15:C8:E1:0A:49
subnets:
- type: static
address: 10.0.88.151/8
gateway: 10.0.0.4
- type: nameserver
address:
- 10.0.0.4
search:
- somedomain.de
2. Boot the image with this cloud init configuration
Actual results:
[root@centos1 network-scripts]# cat ifcfg-eth0. cloud-init. orig F2:15:C8: E1:0A:49 10.0.88. 151/8
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=none
DEFROUTE=yes
DEVICE=eth0
GATEWAY=10.0.0.4
HWADDR=
IPADDR=
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
Which leads to:
[root@centos1 ~]# LANG=C ifup eth0
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Display brief usage message
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Display brief usage message
ipcalc: both netmask and prefix specified
Usage: ipcalc [OPTION...]
-c, --check Validate IP address for specified address family
-4, --ipv4 IPv4 address family (default)
-6, --ipv6 IPv6 address family
-b, --broadcast Display calculated broadcast address
-h, --hostname Show hostname determined via DNS
-m, --netmask Display default netmask for IP (class A, B, or C)
-n, --network Display network address
-p, --prefix Display network prefix
-s, --silent Don't ever display error messages
Help options:
-?, --help Show this help message
--usage Displa...