** Also affects: cloud-init (Ubuntu) Importance: Undecided Status: New
** Changed in: cloud-init (Ubuntu) Status: New => Fix Released ** Changed in: cloud-init (Ubuntu) Importance: Undecided => Medium ** Also affects: cloud-init (Ubuntu Yakkety) Importance: Undecided Status: New ** Also affects: cloud-init (Ubuntu Zesty) Importance: Undecided Status: New ** Also affects: cloud-init (Ubuntu Xenial) Importance: Undecided Status: New ** Changed in: cloud-init (Ubuntu Xenial) Status: New => Confirmed ** Changed in: cloud-init (Ubuntu Yakkety) Status: New => Confirmed ** Changed in: cloud-init (Ubuntu Zesty) Status: New => Confirmed ** Changed in: cloud-init (Ubuntu Xenial) Importance: Undecided => Medium ** Changed in: cloud-init (Ubuntu Yakkety) Importance: Undecided => Medium ** Changed in: cloud-init (Ubuntu Zesty) Importance: Undecided => Medium -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to cloud-init. https://bugs.launchpad.net/bugs/1684349 Title: mask2cidr error with integer value - argument of type 'int' is not iterable Status in cloud-init: Fix Committed Status in cloud-init package in Ubuntu: Fix Released Status in cloud-init source package in Xenial: Confirmed Status in cloud-init source package in Yakkety: Confirmed Status in cloud-init source package in Zesty: Confirmed Bug description: mask2cidr error with integer value - argument of type 'int' is not iterable ~~~ def mask2cidr(mask): if ':' in str(mask): return ipv6mask2cidr(mask) elif '.' in mask: return ipv4mask2cidr(mask) else: return mask ~~~ is not type safe. It tries to take into account that this can be a prefix (so it does not contain ':' not '.' and then return mask. The problem is that if mask is an integer, then this returns: ~~~ Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 513, in status_wrapper ret = functor(name, args) File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 269, in main_init init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL)) File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 641, in apply_network_config return self.distro.apply_network_config(netcfg, bring_up=bring_up) File "/usr/lib/python2.7/site-packages/cloudinit/distros/__init__.py", line 150, in apply_network_config dev_names = self._write_network_config(netconfig) File "/usr/lib/python2.7/site-packages/cloudinit/distros/rhel.py", line 59, in _write_network_config ns = parse_net_config_data(netconfig) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 32, in parse_net_config_data nsi.parse_config(skip_broken=skip_broken) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 205, in parse_config handler(self, command) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 78, in decorator return func(self, command, *args, **kwargs) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 239, in handle_physical subnet['netmask'] = mask2cidr(subnet['netmask']) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 441, in mask2cidr elif '.' in mask: ~~~ Made a modification to the code to troubleshoot this: ~~~ # convert subnet ipv6 netmask to cidr as needed subnets = command.get('subnets') print subnets if subnets: for subnet in subnets: if subnet['type'] == 'static': if 'netmask' in subnet and ':' in subnet['address']: subnet['netmask'] = mask2cidr(subnet['netmask']) for route in subnet.get('routes', []): if 'netmask' in route: route['netmask'] = mask2cidr(route['netmask']) ~~~ This error can be hit on RHEL when running the following 2x (don't know why 2x): rm -Rf /var/lib/cloud/data/* ; cloud-init --force init On the second run, this will be returned: ~~~ Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 513, in status_wrapper ret = functor(name, args) File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 269, in main_init init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL)) File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 641, in apply_network_config return self.distro.apply_network_config(netcfg, bring_up=bring_up) File "/usr/lib/python2.7/site-packages/cloudinit/distros/__init__.py", line 150, in apply_network_config dev_names = self._write_network_config(netconfig) File "/usr/lib/python2.7/site-packages/cloudinit/distros/rhel.py", line 59, in _write_network_config ns = parse_net_config_data(netconfig) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 32, in parse_net_config_data nsi.parse_config(skip_broken=skip_broken) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 205, in parse_config handler(self, command) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 78, in decorator return func(self, command, *args, **kwargs) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 239, in handle_physical subnet['netmask'] = mask2cidr(subnet['netmask']) File "/usr/lib/python2.7/site-packages/cloudinit/net/network_state.py", line 441, in mask2cidr elif '.' in mask: TypeError: argument of type 'int' is not iterable ------------------------------------------------------------ [{u'routes': [{u'netmask': u'0.0.0.0', u'network': u'0.0.0.0', u'gateway': u'192.168.0.1'}], u'netmask': u'255.255.255.0', u'type': 'static', 'ipv4': True, 'address': u'192.168.0.11'}, {u'routes': [{u'netmask': 0, u'network': u'::', u'gateway': u'2000:192:168::1'}], u'netmask': 64, 'ipv6': True, u'type': 'static', 'address': u'2000:192:168::4'}] ~~~ not the `u'netmask': 64` integer This can be fixed by changing the code to: ~~~ def mask2cidr(mask): if ':' in str(mask): return ipv6mask2cidr(mask) elif '.' in str(mask): return ipv4mask2cidr(mask) else: return mask ~~~ To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1684349/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp