def do_add_intr(self, mac, label, domain, ip_str, ip_type='4'): r = StaticInterface(mac=mac, label=label, domain=domain, ip_str=ip_str, ip_type=ip_type, system=self.n) r.clean() r.save() repr(r) return r
def test_update_glue_record_intr(self): # Glue records can't change their name. glue = StaticInterface(label='ns788', domain=self.r, ip_str= '128.193.1.10', ip_type='4', system=self.s, mac="11:22:33:44:55:66") glue.save() data = {'domain': self.r, 'server': 'ns788.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) glue.label = "asdfasdf" self.assertRaises(ValidationError, glue.clean)
def test_update_glue_to_no_intr(self): glue = StaticInterface(label='ns34', domain=self.r, ip_str= '128.193.1.10', ip_type='4', system=self.s, mac="11:22:33:44:55:66") glue.save() data = {'domain': self.r, 'server': 'ns34.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) ns.server = "ns4.wee" ns.save() self.assertTrue(ns.glue is None)
def test_disallow_delete_of_glue_intr(self): # Interface glue records should not be allowed to be deleted. glue = StaticInterface(label='ns24', domain=self.f_r, ip_str= '128.193.99.10', ip_type='4', system=self.s, mac="11:22:33:44:55:66") glue.clean() glue.save() data = {'domain': self.f_r, 'server': 'ns24.foo.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) self.assertEqual(ns.glue, glue) self.assertRaises(ValidationError, glue.delete)
def test_intr_exists(self): label = "tdfestyfoo" data = "waasdft" dom, _ = Domain.objects.get_or_create(name="cd") dom, _ = Domain.objects.get_or_create(name="what.cd") intr = StaticInterface(label=label, domain=dom, ip_str="10.0.0.1", ip_type='4', system=self.s, mac="11:22:33:44:55:66") intr.clean() intr.save() cn = CNAME(label=label, domain=dom, target=data) self.assertRaises(ValidationError, cn.full_clean)
def test_manual_assign_of_glue(self): # Test that assigning a different glue record doesn't get overriden by # the auto assinging during the Nameserver's clean function. glue = StaticInterface(label='ns25', domain=self.f_r, ip_str= '128.193.99.10', ip_type='4', system=self.s, mac="11:22:33:44:55:66") glue.clean() glue.save() data = {'domain': self.f_r, 'server': 'ns25.foo.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) self.assertEqual(ns.glue, glue) glue2 = AddressRecord(label='ns25', domain=self.f_r, ip_str= '128.193.1.78', ip_type='4') glue2.clean() glue2.save() ns.clean() # Make sure things didn't get overriden. self.assertEqual(ns.glue, glue) ns.glue = glue2 ns.save() # Refresh the object ns = Nameserver.objects.get(pk=ns.pk) # Again, Make sure things didn't get overriden. self.assertEqual(ns.glue, glue2) # Make sure we still can't delete. self.assertRaises(ValidationError, glue2.delete) self.assertRaises(ValidationError, ns.glue.delete) # We shuold be able to delelte the other one. glue.delete()
def test_private_view_case_1_intr(self): intr = StaticInterface(label="asf", domain=self.f_o, ip_str="10.0.0.1", ip_type="4", mac="00:11:22:33:44:55", system=self.s) intr.clean() intr.save() # Object has to exist before views can be assigned. intr.views.add(self.private) intr.save()
def _create_ipv4_intr_from_range(label, domain_name, system, mac, range_start, range_end): errors = {} if range_start >= range_end - 1: errors['ip'] = ErrorList(["The start ip must be less than end ip."]) return None, errors ip = find_free_ip(range_start, range_end, ip_type='4') errors = ErrorDict() if not ip: errors['ip'] = ErrorList(["Could not find free ip in range {0} - " "{1}".format(range_start, range_end)]) return None, errors domain = ensure_domain(domain_name, inherit_soa=True) try: intr = StaticInterface(label=label, domain=domain, ip_str=str(ip), ip_type='4', system=system, mac=mac) intr.clean() except ValidationError, e: errors['interface'] = ErrorList(e.messages)
def test_intr_cname_exists(self): # Duplicate test? label = "tesafstyfoo" data = "wadfakt" dom, _ = Domain.objects.get_or_create(name="cd") dom, _ = Domain.objects.get_or_create(name="what.cd") cn, _ = CNAME.objects.get_or_create( label=label, domain=dom, target=data) cn.full_clean() cn.save() intr = StaticInterface(label=label, domain=dom, ip_str="10.0.0.2", ip_type='4', system=self.s, mac="00:11:22:33:44:55") self.assertRaises(ValidationError, intr.clean) cn.label = "differentlabel" cn.save() intr.clean() intr.save()
def test_add_ns_in_domain_intr(self): # Use an Interface as a glue record. glue = StaticInterface(label='ns232', domain=self.r, ip_str= '128.193.99.10', ip_type='4', system=self.s, mac="12:23:45:45:45:45") glue.clean() glue.save() data = {'domain': self.r, 'server': 'ns232.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) self.assertEqual(ns.server, ns.glue.fqdn) self.assertRaises(ValidationError, glue.delete) glue = StaticInterface(label='ns332', domain=self.f_r, ip_str= '128.193.1.10', ip_type='4', system=self.s, mac="11:22:33:44:55:66") glue.clean() glue.save() data = {'domain': self.f_r, 'server': 'ns332.foo.ru'} ns = self.do_add(**data) self.assertTrue(ns.glue) self.assertEqual(ns.server, ns.glue.fqdn)
def test2(self): ip_start = "10.0.1.0" ip_end = "10.0.1.99" ptr = PTR(name="foo.mz", ip_str="10.0.1.3", ip_type='4') ptr.full_clean() ptr.save() a = AddressRecord(label="foo", domain=self.domain, ip_str="10.0.1.3", ip_type='4') a.full_clean() a.save() s = System() s.save() intr = StaticInterface( label="foo", domain=self.domain, ip_str="10.0.1.4", ip_type='4', system=s, mac="00:11:22:33:44:55") intr.full_clean() intr.save() istart, iend, ipf_q = start_end_filter(ip_start, ip_end, '4') addrs = list(AddressRecord.objects.filter(ipf_q). order_by('ip_lower').order_by('ip_upper')) ptrs = list(PTR.objects.filter(ipf_q). order_by('ip_lower').order_by('ip_upper')) intrs = list(StaticInterface.objects.filter(ipf_q). order_by('ip_lower').order_by('ip_upper')) self.assertEqual(a.pk, addrs[0].pk) self.assertEqual(ptr.pk, ptrs[0].pk) self.assertEqual(intr.pk, intrs[0].pk) range_details = range_usage(ip_start, ip_end, '4') self.assertEqual(98, range_details['unused']) self.assertEqual(2, range_details['used']) self.assertEqual([(int(istart) + 0, int(istart) + 2), (int(istart) + 5, int(istart) + 99)], range_details['free_ranges'])
def test_cleanup_intr(self): self.assertFalse(Domain.objects.filter(name="x.y.z.foo.poo")) self.assertFalse(Domain.objects.filter(name="y.z.foo.poo")) self.assertFalse(Domain.objects.filter(name="z.foo.poo")) self.assertTrue(Domain.objects.filter(name="foo.poo")) Domain.objects.get_or_create(name="arpa") Domain.objects.get_or_create(name="in-addr.arpa") Domain.objects.get_or_create(name="10.in-addr.arpa") fqdn = "bar.x.y.z.foo.poo" label, the_domain = ensure_label_domain(fqdn) system = System() addr = StaticInterface(label=label, domain=the_domain, ip_type='4', ip_str="10.2.3.4", mac="00:11:22:33:44:55", system=system) addr.save() self.assertFalse(prune_tree(the_domain)) addr.delete() self.assertFalse(Domain.objects.filter(name="x.y.z.foo.poo")) self.assertFalse(Domain.objects.filter(name="y.z.foo.poo")) self.assertFalse(Domain.objects.filter(name="z.foo.poo")) self.assertTrue(Domain.objects.filter(name="foo.poo"))
def do_combine_a_ptr_to_interface( addr, ptr, system, mac_address=None, interface=None, dhcp_hostname=None, dhcp_domain_name=None, dhcp_domain_name_servers=None, dhcp_filename=None): if mac_address == '00:00:00:00:00:00' or mac_address is None: system.get_next_key_value_adapter() if (addr.ip_str != ptr.ip_str or addr.fqdn != ptr.name or addr.ip_type != ptr.ip_type): raise ValidationError("This A and PTR have different data.") intr = StaticInterface( label=addr.label, mac=mac_address, domain=addr.domain, ip_str=addr.ip_str, ip_type=addr.ip_type, system=system) addr_deleted = False ptr_deleted = False addr.delete(check_cname=False) addr_deleted = True ptr.delete() ptr_deleted = True intr.full_clean() intr.save() if interface: from api_v3.system_api import SystemResource intr.update_attrs() adapter_type, primary, alias = SystemResource.extract_nic_attrs( interface) intr.attrs.primary = primary intr.attrs.alias = alias intr.attrs.interface_type = adapter_type if dhcp_hostname: intr.attrs.hostname = dhcp_hostname if dhcp_filename: intr.attrs.filename = dhcp_filename if dhcp_domain_name: intr.attrs.domain_name = dhcp_domain_name if dhcp_domain_name_servers: intr.attrs.domain_name_servers = dhcp_domain_name_servers return intr, addr_deleted, ptr_deleted
def test1_freeip(self): start_str = "10.0.33.1" end_str = "10.0.33.3" default_domain = self.d network = self.s rtype = "s" ip_type = "4" system = System() kwargs = { "start_str": start_str, "end_str": end_str, "default_domain": default_domain, "network": network, "rtype": rtype, "ip_type": ip_type, } r = self.do_add(**kwargs) self.assertEqual(str(r.get_next_ip()), "10.0.33.1") self.assertEqual(str(r.get_next_ip()), "10.0.33.1") s = StaticInterface( label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00" ) s.clean() s.save() self.assertEqual(str(r.get_next_ip()), "10.0.33.2") s = StaticInterface( label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00" ) s.clean() s.save() self.assertEqual(str(r.get_next_ip()), "10.0.33.3") s = StaticInterface( label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00" ) s.clean() s.save() self.assertEqual(r.get_next_ip(), None)
def test6_create_ipv4_interface(self): v, _ = Vlan.objects.get_or_create(name="6db", number=3) s, _ = Site.objects.get_or_create(name="6scl3") d, _ = Domain.objects.get_or_create(name="6scl3.mozilla.com") d, _ = Domain.objects.get_or_create(name="6db.6scl3.mozilla.com") d, _ = Domain.objects.get_or_create(name="arpa") d, _ = Domain.objects.get_or_create(name="in-addr.arpa") d, _ = Domain.objects.get_or_create(name="11.in-addr.arpa") n = Network(network_str="11.0.0.0/8", ip_type="4") n.clean() n.site = s n.vlan = v n.save() r = Range(start_str="11.0.0.0", end_str="11.0.0.2", network=n) r.clean() r.save() s = StaticInterface(label="fab", domain=d, ip_type="4", ip_str="11.0.0.0", system=self.system, mac="00:00:00:00:00:00") s.clean() s.save() s = StaticInterface(label="fab", domain=d, ip_type="4", ip_str="11.0.0.1", system=self.system, mac="00:00:00:00:00:00") s.clean() s.save() s = StaticInterface(label="fab", domain=d, ip_type="4", ip_str="11.0.0.2", system=self.system, mac="00:00:00:00:00:00") s.clean() s.save() intr, errors = create_ipv4_interface( "foo", "6db", "6scl3", self.system, "11:22:33:44:55:66", "mozilla.com") self.assertEqual(intr, None) self.assertTrue("vlan" not in errors) self.assertTrue("site" not in errors) self.assertTrue("domain" not in errors) self.assertTrue("network" not in errors) self.assertTrue("range" not in errors) self.assertTrue("ip" in errors)
def process_extra(self, bundle, request, **kwargs): patch_dict = json.loads(request.POST.items()[0][0]) if patch_dict.has_key('delete_interface') and patch_dict.has_key('interface'): patch_dict.pop('delete_interface') sys = bundle.obj interface = patch_dict.pop('interface', None) if sys and interface: sys.delete_adapter(interface) if patch_dict.has_key('update_interface') and patch_dict.has_key('interface'): patch_dict.pop('update_interface') sys = bundle.obj if 'interface' in patch_dict: sys.update_adapter(**patch_dict) ## Entry point for adding a new adapter by mac address via the rest API if patch_dict.has_key('mac'): enable_dns = True enable_private = True enable_public = False sys = bundle.obj range = patch_dict.pop('range', None) fqdn = patch_dict.pop('fqdn', None) ip_str = patch_dict.pop('ip_address', None) interface = patch_dict.pop('interface', None) domain = patch_dict.pop('domain', 'mozilla.com') from core.lib.utils import create_ipv4_intr_from_range mac = patch_dict['mac'] if interface: interface_type, primary, alias = SystemResource.extract_nic_attrs(interface) else: interface_type, primary, alias = sys.get_next_adapter() if not fqdn: domain_parsed = ".".join(sys.hostname.split('.')[1:]) + '.' + domain domain_name = domain_parsed.lower() label = sys.hostname.split('.')[0] else: domain_parsed = ".".join(fqdn.split('.')[1:]) domain_name = domain_parsed.lower() label = fqdn.split('.')[0] if range: range_start_str = range.split(',')[0] range_end_str = range.split(',')[1] s, errors = create_ipv4_intr_from_range(label, domain_name, sys, mac, range_start_str, range_end_str) if ip_str: domain = Domain.objects.filter(name=domain_parsed)[0] s = StaticInterface(label=label, mac=mac, domain=domain, ip_str=ip_str, ip_type='4', system=sys) try: if s: s.save() s.update_attrs() if enable_dns and enable_public: private = View.objects.get(name='private') s.views.add(private) s.save() elif enable_dns and enable_private and not enable_public: private = View.objects.get(name='private') s.views.add(private) s.save() if interface: interface_type, primary, alias = SystemResource.extract_nic_attrs(interface) else: interface_type, primary, alias = sys.get_next_adapter() s.attrs.primary = primary s.attrs.interface_type = interface_type s.attrs.alias = alias else: print 'We failed' bundle.errors['error_message'] = "Unable to create adapter for unknown reason" raise ValidationError(join(e.messages)) except ValidationError, e: bundle.errors['error_message'] = " ".join(e.messages) raise ValidationError(join(e.messages)) except Exception, e: print e
def quick_create(request, system_pk): # TODO, make sure the user has access to this system system = get_object_or_404(System, pk=system_pk) if request.method == 'POST': interface_form = StaticInterfaceQuickForm(request.POST) a, ptr, r = None, None, None if interface_form.is_valid(): try: # mac = interface_form.cleaned_data['mac'] if 'label' in interface_form.cleaned_data: label = interface_form.cleaned_data['label'] else: label = "" mrange_pk = interface_form.cleaned_data['range'] mrange = get_object_or_404(Range, pk=mrange_pk) network = mrange.network ip_type = network.ip_type vlan = network.vlan site = network.site networks = [] for network in vlan.network_set.all(): if not network.site: continue if network.site.get_site_path() == site.get_site_path(): networks.append(network) if not networks: raise ValidationError( "No appropriate networks found. Consider adding this " "interface manually.") ip = mrange.get_next_ip() if ip is None: raise ValidationError( "No appropriate IP found in {0} Vlan {1} Range {2} - " "{3}. Consider adding this interface " "manually.".format(site.name, vlan.name, mrange.start_str, mrange.end_str)) expected_name = "{0}.{1}.mozilla.com".format( vlan.name, site.get_site_path()) print "Expected name {0}".format(expected_name) try: domain = Domain.objects.get(name=expected_name) except ObjectDoesNotExist, e: raise ValidationError( "The domain '{0}' doesn't seem to exist. Consider " "creating this interface manually.". format(expected_name)) intr = StaticInterface(label=label, domain=domain, ip_str=str(ip), # ip_type=ip_type, mac=mac, # system=system) ip_type=ip_type, system=system) intr.full_clean() intr.save() except ValidationError, e: interface_form._errors['__all__'] = ErrorList(e.messages) return render(request, 'static_intr/static_intr_form.html', { 'form': interface_form, 'form_title': "Quick Interface Create for System " "{0}".format(system) })
def do_add(self, mac, label, domain, ip_str, ip_type='4'): r = StaticInterface(mac=mac, label=label, domain=domain, ip_str=ip_str, ip_type=ip_type, system=self.n) r.clean() r.save() r.details() r.get_edit_url() r.get_delete_url() r.get_absolute_url() repr(r) return r
return HttpResponse(json.dumps({'success': False, 'error_message': "Error creating label and domain: " "{0}".format(" ".join(e.messages))})) # Determine the keys to store later when nameing the interface. try: x = SystemResource.extract_nic_attrs(intr_name) interface_type, primary, alias = x except ValidationError, e: prune_tree(domain) return HttpResponse(json.dumps({'success': False, 'error_message': " ".join(e.messages)})) # Create the Interface s = StaticInterface(label=label, mac=mac_address, domain=domain, ip_str=ip_address, ip_type='4', system=system, dhcp_enabled=enable_dhcp, dns_enabled=enable_dns) try: s.clean() s.save() except ValidationError, e: prune_tree(domain) return HttpResponse(json.dumps({'success': False, 'error_message': "Failed to create an interface: {0}".format(" ".join(e.messages))})) # Configure views if enable_dns: if enable_public: public = View.objects.get(name='public') s.views.add(public) if enable_private:
def test_private_view_case_3_intr(self): intr = StaticInterface( label="asf3", domain=self.f_o, ip_str="10.0.0.1", ip_type="4", mac="01:11:22:33:44:55", system=self.s) intr.clean() intr.save() intr.views.add(self.private) intr.save() # Object has to exist before views can be assigned. intr.views.add(self.public) self.assertFalse(intr.views.filter(name="public")) intr = StaticInterface( label="asf3", domain=self.f_o, ip_str="172.31.255.254", ip_type="4", mac="01:11:22:33:44:55", system=self.s) intr.clean() intr.save() intr.views.add(self.private) intr.save() # Object has to exist before views can be assigned. intr.views.add(self.public) self.assertFalse(intr.views.filter(name="public")) intr = StaticInterface(label="asf3", domain=self.f_o, ip_str="192.168.255.254", ip_type="4", mac="01:11:22:33:44:55", system=self.s) intr.clean() intr.save() intr.views.add(self.private) intr.save() # Object has to exist before views can be assigned. intr.views.add(self.public) self.assertFalse(intr.views.filter(name="public"))
def main(): for mrange in Range.objects.all(): #if not str(mrange.network.site) == 'Phx1': # continue print "Now starting on Range %s" % mrange attrs = mrange.rangekeyvalue_set.all() start_upper, start_lower = mrange.start_upper, mrange.start_lower end_upper, end_lower = mrange.end_upper, mrange.end_lower gt_start = Q(ip_upper=start_upper, ip_lower__gte=start_lower) gt_start = gt_start | Q(ip_upper__gte=start_upper) lt_end = Q(ip_upper=end_upper, ip_lower__lte=end_lower) lt_end = lt_end | Q(ip_upper__lte=end_upper) records = AddressRecord.objects.filter(gt_start, lt_end) ptrs = PTR.objects.filter(gt_start, lt_end) intrs = StaticInterface.objects.filter(gt_start, lt_end) range_data = [] for i in range((start_upper << 64) + start_lower, (end_upper << 64) + end_lower - 1): taken = False adr_taken = None ip_str = str(ipaddr.IPv4Address(i)) for record in records: if record.ip_lower == i: adr_taken = record break ptr_taken = None for ptr in ptrs: if ptr.ip_lower == i: ptr_taken = ptr break if ptr_taken and adr_taken: if ptr_taken.name == adr_taken.fqdn: range_data.append(('A/PTR', ip_str, ptr_taken, adr_taken)) else: range_data.append(('PTR', ip_str, ptr_taken)) range_data.append(('A', ip_str, adr_taken)) taken = True elif ptr_taken and not adr_taken: range_data.append(('PTR', ip_str, ptr_taken)) taken = True elif not ptr_taken and adr_taken: range_data.append(('A', ip_str, adr_taken)) taken = True for intr in intrs: if intr.ip_lower == i: range_data.append(('Interface', ip_str, intr)) taken = True break if taken == False: range_data.append((None, ip_str)) client = Client() for bl in range_data: system_hostname = '' try: if bl[2].name: #import pdb; pdb.set_trace() intr_hostname = bl[2].name.replace(".mozilla.com", "") system_hostname = intr_hostname #system = System.objects.get(hostname=intr_hostname) system = KeyValue.objects.filter(key__icontains='ipv4_address', value=bl[1])[0].system addr = AddressRecord.objects.get(pk=bl[3].pk) ptr = PTR.objects.get(pk=bl[2].pk) try: first = True while system.get_next_key_value_adapter(): adapter = system.get_next_key_value_adapter() mac_address = adapter['mac_address'] num = adapter['num'] private = View.objects.get(name='private') if 'nic' in adapter['name'] or 'eth' in adapter['name']: interface = 'eth%s.0' % num elif 'mgmt' in adapter['name']: interface = 'mgmt%s.0' % num else: interface = 'eth%s.0' % num if 'dhcp_hostname' in adapter: dhcp_hostname = adapter['dhcp_hostname'] else: dhcp_hostname = None if 'dhcp_filename' in adapter: dhcp_filename = adapter['dhcp_filename'] else: dhcp_filename = None if 'dhcp_domain_name_servers' in adapter: dhcp_domain_name_servers = adapter['dhcp_domain_name_servers'] else: dhcp_domain_name_servers = None if 'dhcp_domain_name' in adapter: dhcp_domain_name = adapter['dhcp_domain_name'] else: dhcp_domain_name = None if first: intr, addr_del, ptr_del = do_combine_a_ptr_to_interface( addr, ptr, system, mac_address, interface, dhcp_hostname=dhcp_hostname, dhcp_domain_name_servers=dhcp_domain_name_servers, dhcp_domain_name=dhcp_domain_name, dhcp_filename=dhcp_filename) intr.views.add(private) intr.save() else: from api_v3.system_api import SystemResource intr = StaticInterface(label=addr.label, mac=mac_address, domain=addr.domain, ip_str=addr.ip_str, ip_type=addr.ip_type, system=system) intr.full_clean() intr.dns_enabled = False intr.dhcp_enabled = True intr.save() intr.update_attrs() adapter_type, primary, alias = SystemResource.extract_nic_attrs(interface) intr.attrs.primary = primary intr.attrs.alias = alias intr.attrs.interface_type = adapter_type system.delete_key_value_adapter_by_index(num) first = False print "SUCCESS ===== %s" % system.hostname except IndexError: ### We can't get the next adapter pass except Exception, e: print e print "FAIL ===== %s - Could not get mac_address for" % system.hostname #client.post('/en-US/core/interface/combine_a_ptr_to_interface/%i/%i/' % (bl[3].pk, bl[2].pk), data={'is_ajax' : 1, 'system_hostname': bl[2].name.replace(".mozilla.com", "")}) except IndexError, e: pass except System.DoesNotExist, e: print "FAIL ===== %s Host Not Found" % (system_hostname) except AttributeError, e: if str(e) == "'AddressRecord' object has no attribute 'name'": #import pdb; pdb.set_trace() try: print "FAIL ===== %s - %s - %s" % (addr.ip_str, system_hostname, e) except: print "FAIL ===== %s - %s" % (system_hostname, e)
def main(): for mrange in Range.objects.all(): #if not str(mrange.network.site) == 'Phx1': # continue print "Now starting on Range %s" % mrange attrs = mrange.rangekeyvalue_set.all() start_upper, start_lower = mrange.start_upper, mrange.start_lower end_upper, end_lower = mrange.end_upper, mrange.end_lower gt_start = Q(ip_upper=start_upper, ip_lower__gte=start_lower) gt_start = gt_start | Q(ip_upper__gte=start_upper) lt_end = Q(ip_upper=end_upper, ip_lower__lte=end_lower) lt_end = lt_end | Q(ip_upper__lte=end_upper) records = AddressRecord.objects.filter(gt_start, lt_end) ptrs = PTR.objects.filter(gt_start, lt_end) intrs = StaticInterface.objects.filter(gt_start, lt_end) range_data = [] for i in range((start_upper << 64) + start_lower, (end_upper << 64) + end_lower - 1): taken = False adr_taken = None ip_str = str(ipaddr.IPv4Address(i)) for record in records: if record.ip_lower == i: adr_taken = record break ptr_taken = None for ptr in ptrs: if ptr.ip_lower == i: ptr_taken = ptr break if ptr_taken and adr_taken: if ptr_taken.name == adr_taken.fqdn: range_data.append(('A/PTR', ip_str, ptr_taken, adr_taken)) else: range_data.append(('PTR', ip_str, ptr_taken)) range_data.append(('A', ip_str, adr_taken)) taken = True elif ptr_taken and not adr_taken: range_data.append(('PTR', ip_str, ptr_taken)) taken = True elif not ptr_taken and adr_taken: range_data.append(('A', ip_str, adr_taken)) taken = True for intr in intrs: if intr.ip_lower == i: range_data.append(('Interface', ip_str, intr)) taken = True break if taken == False: range_data.append((None, ip_str)) client = Client() for bl in range_data: system_hostname = '' try: if bl[2].name: #import pdb; pdb.set_trace() intr_hostname = bl[2].name.replace(".mozilla.com", "") system_hostname = intr_hostname #system = System.objects.get(hostname=intr_hostname) system = KeyValue.objects.filter(key__icontains='ipv4_address', value=bl[1])[0].system addr = AddressRecord.objects.get(pk=bl[3].pk) ptr = PTR.objects.get(pk=bl[2].pk) try: first = True while system.get_next_key_value_adapter(): adapter = system.get_next_key_value_adapter() mac_address = adapter['mac_address'] num = adapter['num'] private = View.objects.get(name='private') if 'nic' in adapter['name'] or 'eth' in adapter['name']: interface = 'eth%s.0' % num elif 'mgmt' in adapter['name']: interface = 'mgmt%s.0' % num else: interface = 'eth%s.0' % num if 'dhcp_hostname' in adapter: dhcp_hostname = adapter['dhcp_hostname'] else: dhcp_hostname = None if 'dhcp_filename' in adapter: dhcp_filename = adapter['dhcp_filename'] else: dhcp_filename = None if 'dhcp_domain_name_servers' in adapter: dhcp_domain_name_servers = adapter[ 'dhcp_domain_name_servers'] else: dhcp_domain_name_servers = None if 'dhcp_domain_name' in adapter: dhcp_domain_name = adapter['dhcp_domain_name'] else: dhcp_domain_name = None if first: intr, addr_del, ptr_del = do_combine_a_ptr_to_interface( addr, ptr, system, mac_address, interface, dhcp_hostname=dhcp_hostname, dhcp_domain_name_servers= dhcp_domain_name_servers, dhcp_domain_name=dhcp_domain_name, dhcp_filename=dhcp_filename) intr.views.add(private) intr.save() else: from api_v3.system_api import SystemResource intr = StaticInterface(label=addr.label, mac=mac_address, domain=addr.domain, ip_str=addr.ip_str, ip_type=addr.ip_type, system=system) intr.full_clean() intr.dns_enabled = False intr.dhcp_enabled = True intr.save() intr.update_attrs() adapter_type, primary, alias = SystemResource.extract_nic_attrs( interface) intr.attrs.primary = primary intr.attrs.alias = alias intr.attrs.interface_type = adapter_type system.delete_key_value_adapter_by_index(num) first = False print "SUCCESS ===== %s" % system.hostname except IndexError: ### We can't get the next adapter pass except Exception, e: print e print "FAIL ===== %s - Could not get mac_address for" % system.hostname #client.post('/en-US/core/interface/combine_a_ptr_to_interface/%i/%i/' % (bl[3].pk, bl[2].pk), data={'is_ajax' : 1, 'system_hostname': bl[2].name.replace(".mozilla.com", "")}) except IndexError, e: pass except System.DoesNotExist, e: print "FAIL ===== %s Host Not Found" % (system_hostname) except AttributeError, e: if str(e) == "'AddressRecord' object has no attribute 'name'": #import pdb; pdb.set_trace() try: print "FAIL ===== %s - %s - %s" % (addr.ip_str, system_hostname, e) except: print "FAIL ===== %s - %s" % (system_hostname, e)