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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
 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()
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
    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"))
Exemplo n.º 13
0
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
Exemplo n.º 14
0
    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)
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
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)
                })
Exemplo n.º 18
0
 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
Exemplo n.º 19
0
        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:
Exemplo n.º 20
0
    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)
Exemplo n.º 22
0
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)