Hello,
I'm trying to use cloud-init with the OVH Public Cloud (Openstack) but it fails to initialize. I built the image using vyos-build and vyos-vm-images.
This is my network config:
```
---
version: 1
config:
- type: physical
mtu: 1500
accept-ra: false
subnets:
- type: dhcp4
- type: static6
netmask: 'ffff:ffff:ffff:ff00::'
routes:
- network: "::"
netmask: "::"
gateway: <SECRET GATEWAY IPV6>
address: <SECRET IPV6>
ipv6: true
mac_address: fa:16:3e:ee:27:8a
name: eth0
- type: physical
mtu: 9000
subnets:
- type: static
netmask: 255.255.240.0
routes:
- network: 0.0.0.0
netmask: 0.0.0.0
gateway: 172.28.0.2
address: 172.28.0.2
ipv4: true
mac_address: fa:16:3e:09:9a:43
name: eth1
- type: nameserver
address: 213.186.33.99
```
Because the `netmask` is not in CIDR notation, `cc_vyos.py` fails at `ipaddress.ip_network('{}/{}'.format(item['network'], item['netmask']))` ([github link](https://github.com/vyos/vyos-cloud-init/blob/3e5ae5fe3b2038bb809ab267a945346cfe1d0d79/cloudinit/config/cc_vyos.py#L401-L402)) with the error:
```
2022-10-28 22:09:16,878 - handlers.py[DEBUG]: finish: modules-config/config-vyos: FAIL: running config-vyos with frequency once-per-instance
2022-10-28 22:09:16,878 - util.py[WARNING]: Running module vyos (<module 'cloudinit.config.cc_vyos' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_vyos.py'>) failed
2022-10-28 22:09:16,880 - util.py[DEBUG]: Running module vyos (<module 'cloudinit.config.cc_vyos' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_vyos.py'>) failed
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 1086, in _run_modules
ran, _r = cc.run(
File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 55, in run
return self._runners.run(name, functor, args, freq, clear_on_fail)
File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 185, in run
results = functor(*args)
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_vyos.py", line 1089, in handle
set_config_interfaces_v1(config, interface_config)
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_vyos.py", line 437, in set_config_interfaces_v1
_configure_subnets_v1(config, 'ethernet', iface_name, iface_config['subnets'])
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_vyos.py", line 401, in _configure_subnets_v1
ip_network = ipaddress.ip_network('{}/{}'.format(
File "/usr/lib/python3.9/ipaddress.py", line 83, in ip_network
raise ValueError('%r does not appear to be an IPv4 or IPv6 network' %
ValueError: '::/::' does not appear to be an IPv4 or IPv6 network
```
This problem has already been seen on the cloud-init repo: [github.com/canonical/cloud-init/pull/1215](https://github.com/canonical/cloud-init/pull/1215)
The solution would be to use the `ipv6_mask_to_net_prefix` function from the `cloudinit.net.network_state` package when the mask is an ipv6 address.
To reproduce the bug:
- Use the function `_configure_subnets_v1` with the parameters:
```
config = {
"version": 1,
"config": [
{
"type": "physical",
"mtu": 1500,
"accept-ra": False,
"subnets": [
{
"type": "static6",
"netmask": "ffff:ffff:ffff:ff00::",
"routes": [
{
"network": "::",
"netmask": "::",
"gateway": "5c81:e18b:b9b3:5b1f:c79b:7b60:e735:1dde",
}
],
"address": "fb72:ce1c:9552:90ed:5dfa:01db:fd1b:934e",
"ipv6": True,
},
],
"mac_address": "fa:16:3e:ee:27:8a",
"name": "eth0",
},
],
}
subnets = [
{
"type": "static6",
"netmask": "ffff:ffff:ffff:ff00::",
"routes": [
{
"network": "::",
"netmask": "::",
"gateway": "5c81:e18b:b9b3:5b1f:c79b:7b60:e735:1dde",
}
],
"address": "fb72:ce1c:9552:90ed:5dfa:01db:fd1b:934e",
"ipv6": True,
},
]
type = "ipv6"
iface_name = "eth0"
```
- Then call the function:
```
_configure_subnets_v1(config, type, iface_name, subnets)
```
This is the **[cloud-init.log](https://pastebin.com/wtDtz7BN)**