route files are not written on SUSE distros
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
| cloud-init |
Undecided
|
Unassigned |
Bug Description
On SUSE distros the routes need to be written to ifroute-* files.
At present the sysconfig renderer does not write the default routes to ifroute-* files, rather the default rout information is set in ifcfg-*. However the values DEFROUTE=yes and IPV6_DEFAULTGW have no meaning in SUSE ifcfg-* files and are ignored. The routes for an interface are loaded from the ifroute-* file.
The file content is expected to be in the format
Destination Gateway Netmask Interface Options
The following config shown at https:/
ifroute-eth1
default 10.80.124.81
ifroute-eth2
default 192.168.1.254
ifroute-eth3
default fe80::10:80:124:81
Related branches
- Server Team CI bot: Approve (continuous-integration) on 2019-03-12
- Ryan Harper: Approve on 2019-03-11
- Dan Watkins: Approve on 2019-03-11
- Ryan Harper: Pending requested 2019-01-21
-
Diff: 273 lines (+118/-17)3 files modifiedcloudinit/net/network_state.py (+33/-8)
cloudinit/net/sysconfig.py (+22/-9)
tests/unittests/test_net.py (+63/-0)
Robert Schweikert (rjschwei) wrote : | #1 |
Robert Schweikert (rjschwei) wrote : | #2 |
Robert Schweikert (rjschwei) wrote : | #3 |
Robert Schweikert (rjschwei) wrote : | #4 |
And some more fun. We have to know the routes for all the interfaces. For example with the following configuration:
{'version': 1, 'config': [{'type': 'physical', 'mtu': 1500, 'subnets': [{'type': 'static', 'netmask': '255.255.240.0', 'routes': [{'netmask': '0.0.0.0', 'network': '0.0.0.0', 'gateway': '51.68.80.1'}], 'address': '51.68.89.122', 'ipv4': True}], 'mac_address': 'fa:16:
We need to generate ifcfg-eth1 that contains:
DHCLIENT_
in order to avoid the dhcpclient to set the default route based on the information received from the dhcp server on eth1.
I have a test case for this already. But I haven't figure out how to make it work as in sysconfig.py _render_subnets() does so on a per interface basis and thus there is no knowledge of the network topology.
Robert Schweikert (rjschwei) wrote : | #5 |
https:/
Addresses the issue with setting DHCLIENT_
This bug is fixed with commit 3acaacc9 to cloud-init on branch master.
To view that commit see the following URL:
https:/
Changed in cloud-init: | |
status: | New → Fix Committed |
This bug is believed to be fixed in cloud-init in version 19.1. If this is still a problem for you, please make a comment and set the state back to New
Thank you.
Changed in cloud-init: | |
status: | Fix Committed → Fix Released |
Ali Haider (alihaider97) wrote : | #8 |
Hello, I just tested this with Sles 15 SP2 with cloud-init 19.4 and still do not see the generation of route files in /etc/sysconfig/
I'm using a very simple network.cfg file
version: 2
ethernets:
eth0:
addresses:
- 10.20.112.221/22
gateway4: 10.20.115.254
routes:
- to: 0.0.0.0/0
via: 10.20.115.254
and am able to generate the first part:
cat /etc/sysconfig/
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=static
IPADDR=
NETMASK=
STARTMODE=auto
But no default route is present
$ ip route
10.20.112.0/22 dev eth0 proto kernel scope link src 10.20.112.221
I don't believe that there are any errors with the network.cfg file itself, as I have tested it on the latest RHEL and Ubuntu distributions without any errors thus far.
I've attached the cloud-init.log file, but don't see any errors that indicate any explicit failures.
Robert Schweikert (rjschwei) wrote : | #9 |
A couple of things, form the documentation:
"Cloud-init’s support for Version 2 network config is a subset of the version 2 format defined for the netplan tool."
SUSE distros do not use netplan, so you need version 1 network configuration. Secondly the code to write route files currently only exists in a patch [1] and there's not been a push to get that upstream that I was involved in.
Ali Haider (alihaider97) wrote : | #10 |
Much obliged, translating the above configuration into the following version 1 equivalent worked immediately.
Here it is for reference:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: static
address: 10.20.112.221/22
gateway: 10.20.115.254
- type: route
destination: 0.0.0.0/0
gateway: 10.20.115.254
Thank you for your assistance on this matter, I was under the presumption from the above comment that it had been picked up in upstream 19.1 and greater.
Examples from the man page
An example with common network interfaces and some static routes:
# --- IPv4 routes in CIDR prefix notation:
204.127. 235.0/24 - - eth0
207.68. 156.51/ 32 207.68.145.45 - eth1
192.168. 0.0/16 207.68.156.51 - eth1
# Destination [Gateway] - Interface
#
127.0.0.0/8 - - lo
default 204.127.235.41 - eth0
# --- IPv4 routes in deprecared netmask notation:
204.127. 235.0 0.0.0.0 255.255.255.0 eth0
207.68. 156.51 207.68.145.45 255.255.255.255 eth1
# Destination [Dummy/Gateway] Netmask Interface
#
127.0.0.0 0.0.0.0 255.255.255.0 lo
default 204.127.235.41 0.0.0.0 eth0
192.168.0.0 207.68.156.51 255.255.0.0 eth1
# --- IPv6 routes are always using CIDR notation:
2001:DB8: 100::/64 - - eth0
2001:DB8: 100::/32 fe80::216: 3eff:fe6d: c042 - eth0
# Destination [Gateway] - Interface
#