Hit this again in 18.04:

```
[   71.626777] cloud-init[1112]: 
------------------------------------------------------------
[   71.636680] cloud-init[1112]: Traceback (most recent call last):
[   71.641365] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 655, in 
status_wrapper
[   71.650437] cloud-init[1112]:     ret = functor(name, args)
[   71.653071] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 361, in main_init
[   71.657061] cloud-init[1112]:     
init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL))
[   71.661386] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/stages.py", line 653, in 
apply_network_config
[   71.668850] cloud-init[1112]:     return 
self.distro.apply_network_config(netcfg, bring_up=bring_up)
[   71.670922] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/distros/__init__.py", line 175, in 
apply_network_config
[   71.677208] cloud-init[1112]:     dev_names = 
self._write_network_config(netconfig)
[   71.678982] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/distros/debian.py", line 119, in 
_write_network_config
[   71.685348] cloud-init[1112]:     return 
self._supported_write_network_config(netconfig)
[   71.687216] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/distros/__init__.py", line 94, in 
_supported_write_network_config
[   71.693349] cloud-init[1112]:     
renderer.render_network_config(network_config=network_config)
[   71.694996] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/net/renderer.py", line 53, in 
render_network_config
[   71.701354] cloud-init[1112]:     
network_state=parse_net_config_data(network_config), target=target)
[   71.703120] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/net/netplan.py", line 193, in 
render_network_state
[   71.709377] cloud-init[1112]:     content = 
self._render_content(network_state)
[   71.713066] cloud-init[1112]:   File 
"/usr/lib/python3/dist-packages/cloudinit/net/netplan.py", line 227, in 
_render_content
[   71.717210] cloud-init[1112]:     if network_state.version == 2:
[   71.720878] cloud-init[1112]: AttributeError: 'NoneType' object has no 
attribute 'version'
[   71.724878] cloud-init[1112]: 
------------------------------------------------------------
[FAILED] Failed to start Initial cloud-init job (metadata service crawler).
```

Looking in the code:
[1] In 
netplan.py(https://github.com/cloud-init/cloud-init/blob/6d48d265a0548a2dc23e587f2a335d4e38e8db90/cloudinit/net/netplan.py)
```
    def _render_content(self, network_state):

        # if content already in netplan format, pass it back
        if network_state.version == 2: # <==== we got None here
```
seems like network_state is None. Let's see where this is set.

[2] It is set in  renderer.py 
(https://github.com/cloud-init/cloud-init/blob/6d48d265a0548a2dc23e587f2a335d4e38e8db90/cloudinit/net/renderer.py)
```
        network_state=parse_net_config_data(network_config), target=target)
```

[3] Looking at parse_net_config_data() in network_state.py 
(https://github.com/cloud-init/cloud-init/blob/6d48d265a0548a2dc23e587f2a335d4e38e8db90/cloudinit/net/network_state.py)
```
def parse_net_config_data(net_config, skip_broken=True):
    """Parses the config, returns NetworkState object
    :param net_config: curtin network config dict
    """
    state = None
    version = net_config.get('version')
    config = net_config.get('config')
    if version == 2:
        # v2 does not have explicit 'config' key so we
        # pass the whole net-config as-is
        config = net_config

    if version and config:
        nsi = NetworkStateInterpreter(version=version, config=config)
        nsi.parse_config(skip_broken=skip_broken)
        state = nsi.get_network_state()  # <====== here

    return state
```

>From the same file, in the class NetworkStateInterpreter():
```
    def get_network_state(self):
        ns = self.network_state
        return ns
```

Then looking into where is self.network_state populated, I can't find any
other reference to it, which would explain why it is always None.

Probably the mistake here is that this is mistyped (should be
self._network_state).

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1686338

Title:
  cloud-init fails if no network config is set

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1686338/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to