** Attachment removed: "script showing the stacktrace." https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1691135/+attachment/4887989/+files/bug-1691135.sh
** Attachment added: "recreate test case." https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1691135/+attachment/4888001/+files/bug-1691135.sh ** Description changed: + === Begin SRU Template === + [Impact] + When cloud-init sees 'ip=' on the kernel command line, it will take + the networking configuration that is written by the ipconfig tool, + and convert it into the proper network config for the system + (/etc/network/interfaces). + + This works well for the 'ip=dhcp' and 'ip=dhcp6' cases, but did not + work correctly for the "statick" path with a command line like: + ip=<client-ip>::<gw-ip>:<netmask>:<hostname>:device:... + + Cloud-init would stack trace when trying to bring up this networking + resulting in a system that did not boot properly. + + [Test Case] + The basic idea below is: + a.) launch an instance with proposed version of cloud-init. + b.) inside instance, use cloud-init's net library to convert + 'net-eth1.cfg' into a different format, and the render that format + using cloud-init's trunk tool 'net-convert.py' + + ## launch an instance. + $ release=xenial + $ ref=$release-proposed + $ lxc-proposed-snapshot --proposed --publish $release $ref + $ lxc launch $ref $name + $ lxc exec $ref $name /bin/bash + + ## get render tool + % wget https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1691135/+attachment/4888001/+files/bug-1691135.sh -O bug-1691135.sh + % sh ./bug-1691135.sh + + ## if that runs to completion, then it will show the /etc/network/interfaces + ## file and the netplan etc/netplan/50-cloud-init.yaml file. + ## if it fails it will stack trace. + + As seen in the upstream commit, the change is in a very focused path, + only changing something when the protocol was 'static'. + + [Regression Potential] + Potential for regression would be limited to the 'ip=' command line path. + + [Other Info] + Upstream commit at + https://git.launchpad.net/cloud-init/commit/?id=9d437489b + + === End SRU Template === + As reported by user niluje, if the initramfs tools write a config that has static networking, then cloud-init would not populate the address field in its rendered network config (_klibc_to_config_entry). The result would be incomplete or invalid configuration, and attempt to render that configuration would result in stacktrace due to KeyError. This can be seen in trunk with the net-convert tool as below. Editing the yaml and uncommenting the 'address' line will work. $ cat /tmp/foo.yaml network: version: 1 config: - name: eth1 type: physical subnets: - 'type': 'static' 'broadcast': '10.0.0.255' 'control': 'manual' 'gateway': '10.0.0.1' 'dns_search': ['foo.com'] 'netmask': '255.255.255.0' 'dns_nameservers': ['10.0.1.1'] # 'address': '10.0.0.2' EOF $ PYTHONPATH=$PWD ./tools/net-convert.py --network-data=/tmp/foo.yaml --kind=yaml --output-kind=eni -d /tmp/out.d Input YAML config: - name: eth1 subnets: - broadcast: 10.0.0.255 control: manual dns_nameservers: - 10.0.1.1 dns_search: - foo.com gateway: 10.0.0.1 netmask: 255.255.255.0 type: static type: physical version: 1 Traceback (most recent call last): File "./tools/net-convert.py", line 82, in <module> main() File "./tools/net-convert.py", line 58, in main ns = network_state.parse_net_config_data(pre_ns) File "/home/smoser/src/cloud-init/cloud-init/cloudinit/net/network_state.py", line 42, in parse_net_config_data nsi.parse_config(skip_broken=skip_broken) File "/home/smoser/src/cloud-init/cloud-init/cloudinit/net/network_state.py", line 225, in parse_config self.parse_config_v1(skip_broken=skip_broken) File "/home/smoser/src/cloud-init/cloud-init/cloudinit/net/network_state.py", line 240, in parse_config_v1 handler(self, command) File "/home/smoser/src/cloud-init/cloud-init/cloudinit/net/network_state.py", line 89, in decorator return func(self, command, *args, **kwargs) File "/home/smoser/src/cloud-init/cloud-init/cloudinit/net/network_state.py", line 296, in handle_physical if ':' in subnet['address']: KeyError: 'address' -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1691135 Title: address field not set when reading cmdline/initramfs configured network To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1691135/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
