def _generate_bond_operation(self, version=1): """Generate bond operation for `iface` and place in `network_config`.""" addrs = self._generate_addresses(version=version) bond_operation = self._get_initial_params() if version == 1: bond_operation.update({ "id": self.name, "type": "bond", "name": self.name, "mac_address": str(self.iface.mac_address), "bond_interfaces": [parent.get_name() for parent in self.iface.parents.order_by('name')], "params": self._get_bond_params(), }) if addrs: bond_operation["subnets"] = addrs else: bond_operation.update({ # XXX mpontillo 2017-02-17: netplan does not yet support # specifying the MAC that should be used for a bond. # See launchpad bug #1664698. # "macaddress": str(self.iface.mac_address), "interfaces": [ parent.get_name() for parent in self.iface.parents.order_by('name') ], }) bond_params = get_netplan_bond_parameters(self._get_bond_params()) if len(bond_params) > 0: bond_operation['parameters'] = bond_params bond_operation.update(addrs) return bond_operation
def test_converts_arp_ip_target_to_list_with_weird_whitespace(self): netplan_params = get_netplan_bond_parameters( {"bond-arp-ip-target": " 192.168.0.1 fe80::1 "}) self.expectThat( netplan_params, Equals({"arp-ip-targets": ["192.168.0.1", "fe80::1"]}), )
def _generate_bond_operation(self, version=1): """Generate bond operation for `iface` and place in `network_config`.""" addrs = self._generate_addresses(version=version) bond_operation = self._get_initial_params() if version == 1: bond_operation.update({ "id": self.name, "type": "bond", "name": self.name, "mac_address": str(self.iface.mac_address), "bond_interfaces": [parent.get_name() for parent in self.iface.parents.order_by('name')], "params": self._get_bond_params(), }) if addrs: bond_operation["subnets"] = addrs else: bond_operation.update({ "macaddress": str(self.iface.mac_address), "interfaces": [ parent.get_name() for parent in self.iface.parents.order_by('name') ], }) bond_params = get_netplan_bond_parameters(self._get_bond_params()) if len(bond_params) > 0: bond_operation['parameters'] = bond_params bond_operation.update(addrs) return bond_operation
def test_converts_parameter_names(self): netplan_params = get_netplan_bond_parameters({ "bond-downdelay": 100, "bond-mode": 'active-backup', "bond-updelay": 200, }) self.expectThat( netplan_params, Equals({ "down-delay": 100, "mode": 'active-backup', "up-delay": 200, }))
def test_skips_and_logs_unknown_parameters(self): with TwistedLoggerFixture() as logger: netplan_params = get_netplan_bond_parameters({ "xbond-downdelay": 100, "bond-mode": "active-backup", "xbond-updelay": 200, }) self.assertThat( logger.output, DocTestMatches( dedent("""\ ...unknown bond option...""")), ) self.expectThat(netplan_params, Equals({"mode": "active-backup"}))
def test_skips_and_logs_parameters_with_no_netplan_equivalent(self): with TwistedLoggerFixture() as logger: netplan_params = get_netplan_bond_parameters({ "bond-queue-id": 100, "bond-mode": "active-backup" }) self.assertThat( logger.output, DocTestMatches( dedent("""\ ...no netplan equivalent for bond option...""")), ) self.expectThat(netplan_params, Equals({"mode": "active-backup"}))
def test_converts_arp_ip_target_to_list(self): netplan_params = get_netplan_bond_parameters( {"bond-arp-ip-target": "192.168.0.1"}) self.expectThat(netplan_params, Equals({"arp-ip-targets": ["192.168.0.1"]}))