def test_get_dhcp_opts_for_nw01(self): self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2], fixed_ips[5]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[0], vifs[1], vifs[4]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[2], vifs[3], vifs[5]]) self.mox.ReplayAll() expected_opts = "NW-i00000000-1,3" actual_opts = self.driver.get_dhcp_opts(None, networks[1]) self.assertEquals(actual_opts, expected_opts)
def test_get_dhcp_hosts_for_nw01(self): self.flags(use_single_default_gateway=True) def get_vif(_context, vif_id): return vifs[vif_id] def get_instance(_context, instance_id): return instances[instance_id] self.stubs.Set(db, 'virtual_interface_get', get_vif) self.stubs.Set(db, 'instance_get', get_instance) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( [fixed_ips[1], fixed_ips[2]]) self.mox.ReplayAll() expected = ("DE:AD:BE:EF:00:01,fake_instance00.novalocal," "192.168.1.100,net:NW-i00000000-1\n" "DE:AD:BE:EF:00:02,fake_instance01.novalocal," "192.168.0.101,net:NW-i00000001-1") actual_hosts = self.driver.get_dhcp_hosts(self.context, networks[0]) self.assertEquals(actual_hosts, expected)
def test_get_dhcp_opts_for_nw01(self): def get_instance(_context, instance_id): print instance_id return instances[instance_id] self.stubs.Set(db, 'instance_get', get_instance) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn([ fixed_ips[1], fixed_ips[2], fixed_ips[5] ]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( [vifs[0], vifs[1], vifs[4]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( [vifs[2], vifs[3], vifs[5]]) self.mox.ReplayAll() expected_opts = "NW-i00000000-1,3" actual_opts = self.driver.get_dhcp_opts(self.context, networks[1]) self.assertEquals(actual_opts, expected_opts)
def test_network_get_associated_fixed_ips(self): ctxt = context.get_admin_context() values = {"host": "foo", "hostname": "myname"} instance = db.instance_create(ctxt, values) values = {"address": "bar", "instance_id": instance["id"]} vif = db.virtual_interface_create(ctxt, values) values = { "address": "baz", "network_id": 1, "allocated": True, "instance_id": instance["id"], "virtual_interface_id": vif["id"], } fixed_address = db.fixed_ip_create(ctxt, values) data = db.network_get_associated_fixed_ips(ctxt, 1) self.assertEqual(len(data), 1) record = data[0] self.assertEqual(record["address"], fixed_address) self.assertEqual(record["instance_id"], instance["id"]) self.assertEqual(record["network_id"], 1) self.assertEqual(record["instance_created"], instance["created_at"]) self.assertEqual(record["instance_updated"], instance["updated_at"]) self.assertEqual(record["instance_hostname"], instance["hostname"]) self.assertEqual(record["vif_id"], vif["id"]) self.assertEqual(record["vif_address"], vif["address"]) data = db.network_get_associated_fixed_ips(ctxt, 1, "nothing") self.assertEqual(len(data), 0)
def test_get_dhcp_hosts_for_nw01(self): self.flags(use_single_default_gateway=True) def get_vif(_context, vif_id): return vifs[vif_id] def get_instance(_context, instance_id): return instances[instance_id] self.stubs.Set(db, "virtual_interface_get", get_vif) self.stubs.Set(db, "instance_get", get_instance) self.mox.StubOutWithMock(db, "network_get_associated_fixed_ips") db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn([fixed_ips[1], fixed_ips[2]]) self.mox.ReplayAll() expected = ( "DE:AD:BE:EF:00:01,fake_instance00.novalocal," "192.168.1.100,net:NW-i00000000-1\n" "DE:AD:BE:EF:00:02,fake_instance01.novalocal," "192.168.0.101,net:NW-i00000001-1" ) actual_hosts = self.driver.get_dhcp_hosts(self.context, networks[0]) self.assertEquals(actual_hosts, expected)
def test_get_dhcp_opts_for_nw01(self): def get_instance(_context, instance_id): print instance_id return instances[instance_id] self.stubs.Set(db, 'instance_get', get_instance) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') db.network_get_associated_fixed_ips( mox.IgnoreArg(), mox.IgnoreArg()).AndReturn([fixed_ips[1], fixed_ips[2], fixed_ips[5]]) db.virtual_interface_get_by_instance( mox.IgnoreArg(), mox.IgnoreArg()).AndReturn([vifs[0], vifs[1], vifs[4]]) db.virtual_interface_get_by_instance( mox.IgnoreArg(), mox.IgnoreArg()).AndReturn([vifs[2], vifs[3], vifs[5]]) self.mox.ReplayAll() expected_opts = "NW-i00000000-1,3" actual_opts = self.driver.get_dhcp_opts(self.context, networks[1]) self.assertEquals(actual_opts, expected_opts)
def test_network_get_associated_fixed_ips(self): ctxt = context.get_admin_context() values = {'host': 'foo', 'hostname': 'myname'} instance = db.instance_create(ctxt, values) values = {'address': 'bar', 'instance_id': instance['id']} vif = db.virtual_interface_create(ctxt, values) values = { 'address': 'baz', 'network_id': 1, 'allocated': True, 'instance_id': instance['id'], 'virtual_interface_id': vif['id'] } fixed_address = db.fixed_ip_create(ctxt, values) data = db.network_get_associated_fixed_ips(ctxt, 1) self.assertEqual(len(data), 1) record = data[0] self.assertEqual(record['address'], fixed_address) self.assertEqual(record['instance_id'], instance['id']) self.assertEqual(record['network_id'], 1) self.assertEqual(record['instance_created'], instance['created_at']) self.assertEqual(record['instance_updated'], instance['updated_at']) self.assertEqual(record['instance_hostname'], instance['hostname']) self.assertEqual(record['vif_id'], vif['id']) self.assertEqual(record['vif_address'], vif['address']) data = db.network_get_associated_fixed_ips(ctxt, 1, 'nothing') self.assertEqual(len(data), 0)
def test_network_get_associated_fixed_ips(self): ctxt = context.get_admin_context() values = {'host': 'foo', 'hostname': 'myname'} instance = db.instance_create(ctxt, values) values = {'address': 'bar', 'instance_id': instance['id']} vif = db.virtual_interface_create(ctxt, values) values = {'address': 'baz', 'network_id': 1, 'allocated': True, 'instance_id': instance['id'], 'virtual_interface_id': vif['id']} fixed_address = db.fixed_ip_create(ctxt, values) data = db.network_get_associated_fixed_ips(ctxt, 1) self.assertEqual(len(data), 1) record = data[0] self.assertEqual(record['address'], fixed_address) self.assertEqual(record['instance_id'], instance['id']) self.assertEqual(record['network_id'], 1) self.assertEqual(record['instance_created'], instance['created_at']) self.assertEqual(record['instance_updated'], instance['updated_at']) self.assertEqual(record['instance_hostname'], instance['hostname']) self.assertEqual(record['vif_id'], vif['id']) self.assertEqual(record['vif_address'], vif['address']) data = db.network_get_associated_fixed_ips(ctxt, 1, 'nothing') self.assertEqual(len(data), 0)
def get_by_network(cls, context, network, host=None): ipinfo = db.network_get_associated_fixed_ips(context, network["id"], host=host) if not ipinfo: return [] fips = cls(context=context, objects=[]) for info in ipinfo: inst = instance_obj.Instance( context=context, uuid=info["instance_uuid"], hostname=info["instance_hostname"], created_at=info["instance_created"], updated_at=info["instance_updated"], ) vif = vif_obj.VirtualInterface(context=context, id=info["vif_id"], address=info["vif_address"]) fip = FixedIP( context=context, address=info["address"], instance_uuid=info["instance_uuid"], network_id=info["network_id"], virtual_interface_id=info["vif_id"], allocated=info["allocated"], leased=info["leased"], instance=inst, virtual_interface=vif, ) fips.objects.append(fip) fips.obj_reset_changes() return fips
def get_dhcp_hosts(context, network_id): """Get a string containing a network's hosts config in dhcp-host format""" hosts = [] for fixed_ip_ref in db.network_get_associated_fixed_ips( context, network_id): hosts.append(_host_dhcp(fixed_ip_ref)) return '\n'.join(hosts)
def get_dhcp_opts(context, network_ref): """Get network's hosts config in dhcp-opts format.""" hosts = [] ips_ref = db.network_get_associated_fixed_ips(context, network_ref['id']) if ips_ref: #set of instance ids instance_set = set( [fixed_ip_ref['instance_id'] for fixed_ip_ref in ips_ref]) default_gw_network_node = {} for instance_id in instance_set: vifs = db.virtual_interface_get_by_instance(context, instance_id) if vifs: #offer a default gateway to the first virtual interface default_gw_network_node[instance_id] = vifs[0]['network_id'] for fixed_ip_ref in ips_ref: instance_id = fixed_ip_ref['instance_id'] try: instance_ref = db.instance_get(context, instance_id) except exception.InstanceNotFound: msg = _("Instance %(instance_id)s not found") LOG.debug(msg % {'instance_id': instance_id}) continue if instance_id in default_gw_network_node: target_network_id = default_gw_network_node[instance_id] # we don't want default gateway for this fixed ip if target_network_id != fixed_ip_ref['network_id']: hosts.append(_host_dhcp_opts(fixed_ip_ref, instance_ref)) return '\n'.join(hosts)
def get_dhcp_leases(context, network_id): """Return a network's hosts config in dnsmasq leasefile format""" hosts = [] for fixed_ip_ref in db.network_get_associated_fixed_ips(context, network_id): hosts.append(_host_lease(fixed_ip_ref)) return '\n'.join(hosts)
def get_dhcp_opts(context, network_ref): """Get network's hosts config in dhcp-opts format.""" hosts = [] host = None if network_ref['multi_host']: host = FLAGS.host data = db.network_get_associated_fixed_ips(context, network_ref['id'], host=host) if data: #set of instance ids instance_set = set([datum['instance_id'] for datum in data]) default_gw_vif = {} for instance_id in instance_set: vifs = db.virtual_interface_get_by_instance(context, instance_id) if vifs: #offer a default gateway to the first virtual interface default_gw_vif[instance_id] = vifs[0]['id'] for datum in data: if instance_id in default_gw_vif: # we don't want default gateway for this fixed ip if default_gw_vif[instance_id] != datum['vif_id']: hosts.append(_host_dhcp_opts(datum)) return '\n'.join(hosts)
def get_by_network(cls, context, network, host=None): ipinfo = db.network_get_associated_fixed_ips(context, network['id'], host=host) if not ipinfo: return [] fips = cls(context=context, objects=[]) for info in ipinfo: inst = objects.Instance(context=context, uuid=info['instance_uuid'], hostname=info['instance_hostname'], created_at=info['instance_created'], updated_at=info['instance_updated']) vif = objects.VirtualInterface(context=context, id=info['vif_id'], address=info['vif_address']) fip = objects.FixedIP(context=context, address=info['address'], instance_uuid=info['instance_uuid'], network_id=info['network_id'], virtual_interface_id=info['vif_id'], allocated=info['allocated'], leased=info['leased'], default_route=info['default_route'], instance=inst, virtual_interface=vif) fips.objects.append(fip) fips.obj_reset_changes() return fips
def get_dhcp_opts(context, network_ref): """Get network's hosts config in dhcp-opts format.""" hosts = [] ips_ref = db.network_get_associated_fixed_ips(context, network_ref['id']) if ips_ref: #set of instance ids instance_set = set([fixed_ip_ref['instance_id'] for fixed_ip_ref in ips_ref]) default_gw_network_node = {} for instance_id in instance_set: vifs = db.virtual_interface_get_by_instance(context, instance_id) if vifs: #offer a default gateway to the first virtual interface default_gw_network_node[instance_id] = vifs[0]['network_id'] for fixed_ip_ref in ips_ref: instance_id = fixed_ip_ref['instance_id'] try: instance_ref = db.instance_get(context, instance_id) except exception.InstanceNotFound: msg = _("Instance %(instance_id)s not found") LOG.debug(msg % {'instance_id': instance_id}) continue if instance_id in default_gw_network_node: target_network_id = default_gw_network_node[instance_id] # we don't want default gateway for this fixed ip if target_network_id != fixed_ip_ref['network_id']: hosts.append(_host_dhcp_opts(fixed_ip_ref, instance_ref)) return '\n'.join(hosts)
def get_dhcp_hosts(context, network_id): """Get a string containing a network's hosts config in dhcp-host format""" hosts = [] for fixed_ip_ref in db.network_get_associated_fixed_ips(context, network_id): hosts.append(_host_dhcp(fixed_ip_ref)) return '\n'.join(hosts)
def get_dhcp_leases(context, network_id): """Return a network's hosts config in dnsmasq leasefile format""" hosts = [] for fixed_ip_ref in db.network_get_associated_fixed_ips( context, network_id): hosts.append(_host_lease(fixed_ip_ref)) return '\n'.join(hosts)
def test_update_dhcp_for_nw01(self): self.flags(use_single_default_gateway=True) def get_vif(_context, vif_id): return vifs[vif_id] def get_instance(_context, instance_id): return instances[instance_id] self.stubs.Set(db, 'virtual_interface_get', get_vif) self.stubs.Set(db, 'instance_get', get_instance) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') self.mox.StubOutWithMock(self.driver, 'write_to_file') self.mox.StubOutWithMock(self.driver, 'ensure_path') self.mox.StubOutWithMock(os, 'chmod') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2]]) db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[0], vifs[1]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[2], vifs[3]]) self.driver.write_to_file(mox.IgnoreArg(), mox.IgnoreArg()) self.driver.write_to_file(mox.IgnoreArg(), mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) os.chmod(mox.IgnoreArg(), mox.IgnoreArg()) os.chmod(mox.IgnoreArg(), mox.IgnoreArg()) self.mox.ReplayAll() self.driver.update_dhcp(self.context, "eth0", networks[0])
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] host = None if network_ref["multi_host"]: host = FLAGS.host for data in db.network_get_associated_fixed_ips(context, network_ref["id"], host=host): hosts.append(_host_dhcp(data)) return "\n".join(hosts)
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips(context, network_ref["id"]): host = fixed_ref["instance"]["host"] if network_ref["multi_host"] and FLAGS.host != host: continue hosts.append(_host_dhcp(fixed_ref)) return "\n".join(hosts)
def test_get_dhcp_hosts_for_nw01(self): self.flags(use_single_default_gateway=True) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2]]) self.mox.ReplayAll() expected = \ "10.0.0.2,fake_instance00.novalocal,"\ "192.168.1.100,net:NW-i00000000-1\n"\ "10.0.0.3,fake_instance01.novalocal,"\ "192.168.0.101,net:NW-i00000001-1" actual_hosts = self.driver.get_dhcp_hosts(None, networks[0]) self.assertEquals(actual_hosts, expected)
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips(context, network_ref['id']): host = fixed_ref['instance']['host'] if network_ref['multi_host'] and FLAGS.host != host: continue hosts.append(_host_dhcp(fixed_ref)) return '\n'.join(hosts)
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips( context, network_ref['id']): host = fixed_ref['instance']['host'] if network_ref['multi_host'] and FLAGS.host != host: continue hosts.append(_host_dhcp(fixed_ref)) return '\n'.join(hosts)
def get_dhcp_leases(context, network_ref): """Return a network's hosts config in dnsmasq leasefile format.""" hosts = [] host = None if network_ref['multi_host']: host = FLAGS.host for data in db.network_get_associated_fixed_ips(context, network_ref['id'], host=host): hosts.append(_host_lease(data)) return '\n'.join(hosts)
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] host = None if network_ref['multi_host']: host = FLAGS.host for data in db.network_get_associated_fixed_ips(context, network_ref['id'], host=host): hosts.append(_host_dhcp(data)) return '\n'.join(hosts)
def test_update_dhcp_for_nw00(self): self.flags(use_single_default_gateway=True) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') self.mox.StubOutWithMock(self.driver, 'write_to_file') self.mox.StubOutWithMock(self.driver, 'ensure_path') self.mox.StubOutWithMock(os, 'chmod') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[0], fixed_ips[3]]) db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[0], fixed_ips[3]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[0], vifs[1]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[2], vifs[3]]) self.driver.write_to_file(mox.IgnoreArg(), mox.IgnoreArg()) self.driver.write_to_file(mox.IgnoreArg(), mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) self.driver.ensure_path(mox.IgnoreArg()) os.chmod(mox.IgnoreArg(), mox.IgnoreArg()) os.chmod(mox.IgnoreArg(), mox.IgnoreArg()) self.mox.ReplayAll() self.driver.update_dhcp(None, "eth0", networks[0])
def test_update_dhcp_for_nw01(self): self.flags(use_single_default_gateway=True) self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips') self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance') db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2]]) db.network_get_associated_fixed_ips(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([fixed_ips[1], fixed_ips[2]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[0], vifs[1]]) db.virtual_interface_get_by_instance(mox.IgnoreArg(), mox.IgnoreArg())\ .AndReturn([vifs[2], vifs[3]]) self.mox.ReplayAll() self.driver.update_dhcp(None, "eth0", networks[0])
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips(context, network_ref["id"]): vif_id = fixed_ref["virtual_interface_id"] # NOTE(jkoelker) We need a larger refactor to happen to prevent # looking these up here vif_ref = db.virtual_interface_get(context, vif_id) instance_id = fixed_ref["instance_id"] try: instance_ref = db.instance_get(context, instance_id) except exception.InstanceNotFound: msg = _("Instance %(instance_id)s not found") LOG.debug(msg % {"instance_id": instance_id}) continue if network_ref["multi_host"] and FLAGS.host != instance_ref["host"]: continue hosts.append(_host_dhcp(fixed_ref, vif_ref, instance_ref)) return "\n".join(hosts)
def get_dhcp_hosts(context, network_ref): """Get network's hosts config in dhcp-host format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips( context, network_ref['id']): vif_id = fixed_ref['virtual_interface_id'] # NOTE(jkoelker) We need a larger refactor to happen to prevent # looking these up here vif_ref = db.virtual_interface_get(context, vif_id) instance_id = fixed_ref['instance_id'] try: instance_ref = db.instance_get(context, instance_id) except exception.InstanceNotFound: msg = _("Instance %(instance_id)s not found") LOG.debug(msg % {'instance_id': instance_id}) continue if network_ref['multi_host'] and FLAGS.host != instance_ref['host']: continue hosts.append(_host_dhcp(fixed_ref, vif_ref, instance_ref)) return '\n'.join(hosts)
def get_dhcp_leases(context, network_ref): """Return a network's hosts config in dnsmasq leasefile format.""" hosts = [] for fixed_ref in db.network_get_associated_fixed_ips(context, network_ref['id']): vif_id = fixed_ref['virtual_interface_id'] # NOTE(jkoelker) We need a larger refactor to happen to prevent # looking these up here vif_ref = db.virtual_interface_get(context, vif_id) instance_id = fixed_ref['instance_id'] try: instance_ref = db.instance_get(context, instance_id) except exception.InstanceNotFound: msg = _("Instance %(instance_id)s not found") LOG.debug(msg % {'instance_id': instance_id}) continue if network_ref['multi_host'] and FLAGS.host != instance_ref['host']: continue hosts.append(_host_lease(fixed_ref, vif_ref, instance_ref)) return '\n'.join(hosts)
def get_dhcp_opts(context, network_ref): """Get network's hosts config in dhcp-opts format.""" hosts = [] ips_ref = db.network_get_associated_fixed_ips(context, network_ref["id"]) if ips_ref: # set of instance ids instance_set = set([fixed_ip_ref["instance_id"] for fixed_ip_ref in ips_ref]) default_gw_network_node = {} for instance_id in instance_set: vifs = db.virtual_interface_get_by_instance(context, instance_id) if vifs: # offer a default gateway to the first virtual interface default_gw_network_node[instance_id] = vifs[0]["network_id"] for fixed_ip_ref in ips_ref: instance_id = fixed_ip_ref["instance_id"] if instance_id in default_gw_network_node: target_network_id = default_gw_network_node[instance_id] # we don't want default gateway for this fixed ip if target_network_id != fixed_ip_ref["network_id"]: hosts.append(_host_dhcp_opts(fixed_ip_ref)) return "\n".join(hosts)