As reported by user niluje, the ifi 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.
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'
As reported by user niluje, the ifi 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
'broadcast' : '10.0.0.255'
'dns_search' : ['foo.com']
'dns_nameserve rs': ['10.0.1.1']
network:
version: 1
config:
- name: eth1
type: physical
subnets:
- 'type': 'static'
'control': 'manual'
'gateway': '10.0.0.1'
'netmask': '255.255.255.0'
# '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
dns_nameserver s:
Input YAML
config:
- name: eth1
subnets:
- broadcast: 10.0.0.255
control: manual
- 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): net-convert. py", line 82, in <module> net-convert. py", line 58, in main state.parse_ net_config_ data(pre_ ns) smoser/ src/cloud- init/cloud- init/cloudinit/ net/network_ state.py" , line 42, in parse_net_ config_ data parse_config( skip_broken= skip_broken) smoser/ src/cloud- init/cloud- init/cloudinit/ net/network_ state.py" , line 225, in parse_config parse_config_ v1(skip_ broken= skip_broken) smoser/ src/cloud- init/cloud- init/cloudinit/ net/network_ state.py" , line 240, in parse_config_v1 smoser/ src/cloud- init/cloud- init/cloudinit/ net/network_ state.py" , line 89, in decorator smoser/ src/cloud- init/cloud- init/cloudinit/ net/network_ state.py" , line 296, in handle_physical
File "./tools/
main()
File "./tools/
ns = network_
File "/home/
nsi.
File "/home/
self.
File "/home/
handler(self, command)
File "/home/
return func(self, command, *args, **kwargs)
File "/home/
if ':' in subnet['address']:
KeyError: 'address'