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

Reply via email to