Comment 0 for bug 1691135

Revision history for this message
Scott Moser (smoser) wrote :

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
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'