def test_validate_deploy_children(self):
     _validate_deploy_children('deadbeefcafe', 0)
     parent = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
     )
     _validate_deploy_children('deadbeefcafe', 0)
     device = Device.create(
         ethernets=[('', 'cafedeadbeef', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
         parent=parent,
     )
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('deadbeefcafe', 0)
     device.parent = None
     device.save()
     _validate_deploy_children('deadbeefcafe', 0)
     _validate_deploy_children('cafedeadbeef', 0)
     share = DiskShare(wwn='a' * 33, device=parent)
     share.save()
     mount = DiskShareMount(share=share, device=device, server=device)
     mount.save()
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('deadbeefcafe', 0)
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('cafedeadbeef', 0)
示例#2
0
文件: tests.py 项目: damjanek/ralph
    def test_blade_server(self):
        encl = Device.create(sn='devicex', model_type=DeviceType.blade_system,
                             model_name='device encl')
        dev = Device.create(sn='device', model_type=DeviceType.blade_server,
                            model_name='device', parent=encl)

        encl_dmg = DeviceModelGroup(name='DeviceModelGroup encl')
        encl_dmg.slots = 4
        encl_dmg.price = 65535
        encl_dmg.save()
        encl.model.group = encl_dmg
        encl.model.save()

        dmg = DeviceModelGroup(name='DeviceModelGroup')
        dmg.price = 1337
        dmg.slots = 1
        dmg.save()
        dev.model.group = dmg
        dev.model.save()

        pricing.device_update_cached(encl)
        pricing.device_update_cached(dev)
        dev = Device.objects.get(id=dev.id)
        encl = Device.objects.get(id=encl.id)

        self.assertEquals(dev.cached_price, 17720.75)
        self.assertEquals(encl.cached_price, 49151.25)
        self.assertEquals(dev.cached_price + encl.cached_price, 65535 + 1337)
示例#3
0
文件: tests.py 项目: pb-it/ralph
    def setUp(self):
        self.top_venture = Venture(name='top_venture')
        self.top_venture.save()

        self.child_venture = Venture(name='child_venture', parent=self.top_venture)
        self.child_venture.save()

        self.role = VentureRole(name='role', venture=self.child_venture)
        self.role.save()
        self.child_role = VentureRole(name='child_role',
                venture=self.child_venture,
                parent=self.role,
        )
        self.child_role.save()
        dm = self.add_model('DC model sample', DeviceType.data_center.id)
        self.dc = Device.create(sn='sn1', name='Rack 1', model=dm)
        dm = self.add_model('Rack model sample', DeviceType.rack_server.id)
        self.rack = Device.create(venture=self.child_venture, sn='sn2', name='DC', model=dm)
        self.rack.parent=self.dc
        self.rack.save()
        dm = self.add_model('Blade model sample', DeviceType.blade_server.id)
        self.blade = Device.create(
                venture=self.child_venture,
                venturerole=self.child_role,
                sn='sn3',
                name='blade1',
                model=dm
        )
        self.blade.parent=self.rack
        self.blade.save()
示例#4
0
    def test_blade_server(self):
        encl = Device.create(sn='devicex',
                             model_type=DeviceType.blade_system,
                             model_name='device encl')
        dev = Device.create(sn='device',
                            model_type=DeviceType.blade_server,
                            model_name='device',
                            parent=encl)

        encl_dmg = DeviceModelGroup(name='DeviceModelGroup encl')
        encl_dmg.slots = 4
        encl_dmg.price = 65535
        encl_dmg.save()
        encl.model.group = encl_dmg
        encl.model.save()

        dmg = DeviceModelGroup(name='DeviceModelGroup')
        dmg.price = 1337
        dmg.slots = 1
        dmg.save()
        dev.model.group = dmg
        dev.model.save()

        pricing.device_update_cached(encl)
        pricing.device_update_cached(dev)

        self.assertEquals(dev.cached_price, 17720.75)
        self.assertEquals(encl.cached_price, 49151.25)
        self.assertEquals(dev.cached_price + encl.cached_price, 65535 + 1337)
示例#5
0
 def _prepare_data_for_device_tests(self):
     self.sample_device = Device.create(
         sn='sn_123456789_1',
         model_name='sampleDevice',
         model_type=DeviceType.unknown,
     )
     self.other_sample_device = Device.create(
         sn='sn_123456789_2',
         model_name='otherSampleDevice',
         model_type=DeviceType.unknown,
     )
     created = datetime.datetime.now() - datetime.timedelta(days=31)
     change = CIChange(
         type=CI_CHANGE_TYPES.DEVICE,
         content_type=ContentType.objects.get_for_model(
             self.sample_device,
         ),
         object_id=self.sample_device.id,
         created=created,
         priority=CI_CHANGE_PRIORITY_TYPES.ERROR,
     )
     change.save()
     self.cichange_device_id = change.id
     change = CIChange(
         type=CI_CHANGE_TYPES.DEVICE,
         content_type=ContentType.objects.get_for_model(
             self.other_sample_device,
         ),
         object_id=self.other_sample_device.id,
         created=created + datetime.timedelta(days=2),
         priority=CI_CHANGE_PRIORITY_TYPES.ERROR,
     )
     change.save()
     self.not_touched_cichange_device_id = change.id
示例#6
0
文件: tests.py 项目: tosuch/ralph
    def setUp(self):
        self.top_venture = Venture(name="top_venture")
        self.top_venture.save()

        self.child_venture = Venture(name="child_venture", parent=self.top_venture)
        self.child_venture.save()

        self.role = VentureRole(name="role", venture=self.child_venture)
        self.role.save()
        self.child_role = VentureRole(name="child_role", venture=self.child_venture, parent=self.role)
        self.child_role.save()
        dm = self.add_model("DC model sample", DeviceType.data_center.id)
        self.dc = Device.create(sn="sn1", model=dm)
        self.dc.name = "dc"
        self.dc.save()
        dm = self.add_model("Rack model sample", DeviceType.rack_server.id)
        self.rack = Device.create(venture=self.child_venture, sn="sn2", model=dm)
        self.rack.parent = self.dc
        self.rack.name = "rack"
        self.rack.save()
        dm = self.add_model("Blade model sample", DeviceType.blade_server.id)
        self.blade = Device.create(venture=self.child_venture, venturerole=self.child_role, sn="sn3", model=dm)
        self.blade.name = "blade"
        self.blade.parent = self.rack
        self.blade.save()
示例#7
0
 def test_validate_deploy_children(self):
     _validate_deploy_children('deadbeefcafe', 0)
     parent = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
     )
     _validate_deploy_children('deadbeefcafe', 0)
     device = Device.create(
         ethernets=[('', 'cafedeadbeef', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
         parent=parent,
     )
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('deadbeefcafe', 0)
     device.parent = None
     device.save()
     _validate_deploy_children('deadbeefcafe', 0)
     _validate_deploy_children('cafedeadbeef', 0)
     share = DiskShare(wwn='a' * 33, device=parent)
     share.save()
     mount = DiskShareMount(share=share, device=device, server=device)
     mount.save()
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('deadbeefcafe', 0)
     with self.assertRaises(forms.ValidationError):
         _validate_deploy_children('cafedeadbeef', 0)
 def test_validate_hostname(self):
     _validate_hostname('whoosh', '11:22:33:aa:bb:cc', [], 0)
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('whoosh', '22:33:11:aa:bb:dd', ['whoosh'], 0)
     device = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
     )
     deployment = Deployment(
         hostname='whoosh',
         ip='127.0.0.1',
         mac='deadbeefcafe',
         device=device,
         preboot=None,
         venture=None,
         venture_role=None,
     )
     deployment.save()
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('whoosh', 'aa:bb:cc:11:22:33', [], 0)
     device = Device.create(
         ethernets=[('', 'aaccbb113322', 0)],
         model_name='unknown',
         model_type=DeviceType.unknown
     )
     device.name = 'some_name_1'
     device.save()
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     domain = Domain.objects.create(name='domain1')
     record_A = Record.objects.create(
         domain=domain,
         name='some_name_1',
         content='127.0.0.1',
         type='A'
     )
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113344', [], 0)
     device.ipaddress_set.create(address='127.0.0.1')
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     device.ipaddress_set.all().delete()
     record_A.delete()
     Record.objects.create(
         domain=domain,
         name='1.0.0.127.in-addr.arpa',
         content='some_name_1',
         type='PTR'
     )
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     device.ipaddress_set.create(address='127.0.0.1')
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     deployment.hostname = 'some_name_1'
     deployment.save()
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
示例#9
0
文件: tests.py 项目: iwwwwwwi/ralph
    def setUp(self):
        engine = settings.ISSUETRACKERS['default']['ENGINE']
        if engine != '':
            raise ImproperlyConfigured(
                '''Expected ISSUETRACKERS['default']['ENGINE']='' got: %s''' %
                engine)
        # usual stuff
        self.top_venture = Venture(name='top_venture')
        self.top_venture.save()
        self.child_venture = Venture(name='child_venture',
                                     parent=self.top_venture)
        self.child_venture.save()
        self.role = VentureRole(name='role', venture=self.child_venture)
        self.role.save()
        self.child_role = VentureRole(
            name='child_role',
            venture=self.child_venture,
            parent=self.role,
        )
        self.child_role.save()
        to = VentureOwner(name='Bufallo Kudłaczek',
                          venture=self.child_venture,
                          type=OwnerType.technical.id)
        to.save()
        bo = VentureOwner(name='Bill Bąbelek',
                          venture=self.child_venture,
                          type=OwnerType.business.id)
        bo.save()

        dm = self.add_model('DC model sample', DeviceType.data_center.id)
        self.dc = Device.create(sn='sn1', model=dm)
        self.dc.name = 'dc'
        self.dc.save()
        dm = self.add_model('Rack model sample', DeviceType.rack_server.id)
        self.rack = Device.create(venture=self.child_venture,
                                  sn='sn2',
                                  model=dm)
        self.rack.parent = self.dc
        self.rack.name = 'rack'
        self.rack.save()
        dm = self.add_model('Blade model sample', DeviceType.blade_server.id)
        self.blade = Device.create(venture=self.child_venture,
                                   venturerole=self.child_role,
                                   sn='sn3',
                                   model=dm)
        self.blade.name = 'blade'
        self.blade.parent = self.rack
        self.blade.save()

        self.deployment = Deployment()
        self.deployment.hostname = 'test_host2'
        self.deployment.device = self.blade
        self.deployment.mac = '10:9a:df:6f:af:01'
        self.deployment.ip = '192.168.1.1'
        self.deployment.hostname = 'test'
        self.deployment.save()
示例#10
0
 def setUp(self):
     self.dev = Device.create(
         sn='device', model_type=DeviceType.virtual_server,
         model_name='device'
     )
     self.dev.save()
     self.dev2 = Device.create(
         sn='device2', model_type=DeviceType.virtual_server,
         model_name='device2'
     )
示例#11
0
 def setUp(self):
     self.device_model = DeviceModel(type=DeviceType.rack_server,
                                     name="ziew-X")
     self.device_model.save()
     self.device = Device(
         model=self.device_model,
         sn='123456789',
         name='ziew',
     )
     self.device.save()
示例#12
0
 def setUp(self):
     self.dev = Device.create(
         sn='device', model_type=DeviceType.virtual_server,
         model_name='device'
     )
     self.dev.save()
     self.dev2 = Device.create(
         sn='device2', model_type=DeviceType.virtual_server,
         model_name='device2'
     )
示例#13
0
文件: tests.py 项目: iwwwwwwi/ralph
    def setUp(self):
        engine = settings.ISSUETRACKERS['default']['ENGINE']
        if engine != '':
            raise ImproperlyConfigured('''Expected ISSUETRACKERS['default']['ENGINE']='' got: %s''' % engine)
        # usual stuff
        self.top_venture = Venture(name='top_venture')
        self.top_venture.save()
        self.child_venture = Venture(name='child_venture', parent=self.top_venture)
        self.child_venture.save()
        self.role = VentureRole(name='role', venture=self.child_venture)
        self.role.save()
        self.child_role = VentureRole(name='child_role',
                venture=self.child_venture,
                parent=self.role,
        )
        self.child_role.save()
        to = VentureOwner(name='Bufallo Kudłaczek', venture=self.child_venture, type=OwnerType.technical.id)
        to.save()
        bo = VentureOwner(name='Bill Bąbelek', venture=self.child_venture, type=OwnerType.business.id)
        bo.save()

        dm = self.add_model('DC model sample', DeviceType.data_center.id)
        self.dc = Device.create(
                sn='sn1',
                model=dm
        )
        self.dc.name = 'dc'
        self.dc.save()
        dm = self.add_model('Rack model sample', DeviceType.rack_server.id)
        self.rack = Device.create(
                venture=self.child_venture,
                sn='sn2',
                model=dm
        )
        self.rack.parent=self.dc
        self.rack.name = 'rack'
        self.rack.save()
        dm = self.add_model('Blade model sample', DeviceType.blade_server.id)
        self.blade = Device.create(
                venture=self.child_venture,
                venturerole=self.child_role,
                sn='sn3',
                model=dm
        )
        self.blade.name = 'blade'
        self.blade.parent=self.rack
        self.blade.save()

        self.deployment = Deployment()
        self.deployment.hostname = 'test_host2'
        self.deployment.device=self.blade
        self.deployment.mac = '10:9a:df:6f:af:01'
        self.deployment.ip='192.168.1.1'
        self.deployment.hostname='test'
        self.deployment.save()
示例#14
0
 def test_validate_hostname(self):
     _validate_hostname('whoosh', '11:22:33:aa:bb:cc', [], 0)
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('whoosh', '22:33:11:aa:bb:dd', ['whoosh'], 0)
     device = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='splat',
         model_type=DeviceType.unknown,
     )
     deployment = Deployment(
         hostname='whoosh',
         ip='127.0.0.1',
         mac='deadbeefcafe',
         device=device,
         preboot=None,
         venture=None,
         venture_role=None,
     )
     deployment.save()
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('whoosh', 'aa:bb:cc:11:22:33', [], 0)
     device = Device.create(ethernets=[('', 'aaccbb113322', 0)],
                            model_name='unknown',
                            model_type=DeviceType.unknown)
     device.name = 'some_name_1'
     device.save()
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     domain = Domain.objects.create(name='domain1')
     record_A = Record.objects.create(domain=domain,
                                      name='some_name_1',
                                      content='127.0.0.1',
                                      type='A')
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113344', [], 0)
     device.ipaddress_set.create(address='127.0.0.1')
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     device.ipaddress_set.all().delete()
     record_A.delete()
     Record.objects.create(domain=domain,
                           name='1.0.0.127.in-addr.arpa',
                           content='some_name_1',
                           type='PTR')
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     device.ipaddress_set.create(address='127.0.0.1')
     _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
     deployment.hostname = 'some_name_1'
     deployment.save()
     with self.assertRaises(forms.ValidationError):
         _validate_hostname('some_name_1', 'aaccbb113322', [], 0)
示例#15
0
def snmp_vmware(parent, ipaddr, **kwargs):
    ip = str(kwargs['ip'])
    community = str(kwargs['community'])
    oid = (1,3,6,1,4,1,6876,2,4,1,7)
    snmp_version = 1
    for mac in snmp_macs(ip, community, oid, attempts=2,
                         timeout=3, snmp_version=snmp_version):
        Device.create(
            parent=parent,
            management=ipaddr,
            ethernets=[Eth(mac=mac, label='Virtual MAC', speed=0)],
            model_name='VMware ESX virtual server',
            model_type=DeviceType.virtual_server,
        )
示例#16
0
 def setUp(self):
     self.top_venture = Venture(name='top_venture')
     self.top_venture.save()
     self.child_venture = Venture(
         name='child_venture',
         parent=self.top_venture,
     )
     self.child_venture.save()
     self.role = VentureRole(
         name='role',
         venture=self.child_venture,
     )
     self.role.save()
     self.child_role = VentureRole(
         name='child_role',
         venture=self.child_venture,
         parent=self.role,
     )
     self.child_role.save()
     dm = self.add_model('DC model sample', DeviceType.data_center.id)
     self.dc = Device.create(sn='sn1', model=dm)
     self.dc.name = 'dc'
     self.dc.save()
     dm = self.add_model('Rack model sample', DeviceType.rack_server.id)
     self.rack = Device.create(
         venture=self.child_venture,
         sn='sn2',
         model=dm,
     )
     self.rack.parent = self.dc
     self.rack.name = 'rack'
     self.rack.save()
     dm = self.add_model('Blade model sample', DeviceType.blade_server.id)
     self.blade = Device.create(
         venture=self.child_venture,
         venturerole=self.child_role,
         sn='sn3',
         model=dm,
     )
     self.blade.name = 'blade'
     self.blade.parent = self.rack
     self.blade.save()
     self.deployment = Deployment()
     self.deployment.hostname = 'test_host2'
     self.deployment.device = self.blade
     self.deployment.mac = '10:9a:df:6f:af:01'
     self.deployment.ip = '192.168.1.1'
     self.deployment.hostname = 'test'
     self.deployment.save()
示例#17
0
 def setUp(self):
     self.top_venture = Venture(name='top_venture')
     self.top_venture.save()
     self.child_venture = Venture(
         name='child_venture',
         parent=self.top_venture,
     )
     self.child_venture.save()
     self.role = VentureRole(
         name='role',
         venture=self.child_venture,
     )
     self.role.save()
     self.child_role = VentureRole(
         name='child_role',
         venture=self.child_venture,
         parent=self.role,
     )
     self.child_role.save()
     dm = self.add_model('DC model sample', DeviceType.data_center.id)
     self.dc = Device.create(sn='sn1', model=dm)
     self.dc.name = 'dc'
     self.dc.save()
     dm = self.add_model('Rack model sample', DeviceType.rack_server.id)
     self.rack = Device.create(
         venture=self.child_venture,
         sn='sn2',
         model=dm,
     )
     self.rack.parent = self.dc
     self.rack.name = 'rack'
     self.rack.save()
     dm = self.add_model('Blade model sample', DeviceType.blade_server.id)
     self.blade = Device.create(
         venture=self.child_venture,
         venturerole=self.child_role,
         sn='sn3',
         model=dm,
     )
     self.blade.name = 'blade'
     self.blade.parent = self.rack
     self.blade.save()
     self.deployment = Deployment()
     self.deployment.hostname = 'test_host2'
     self.deployment.device = self.blade
     self.deployment.mac = '10:9a:df:6f:af:01'
     self.deployment.ip = '192.168.1.1'
     self.deployment.hostname = 'test'
     self.deployment.save()
示例#18
0
文件: snmp.py 项目: szaydel/ralph
def _cisco_snmp_model(model_oid, sn_oid, **kwargs):
    ip = str(kwargs['ip'])
    version = kwargs.get('snmp_version')
    if version == '3':
        community = SNMP_V3_AUTH
    else:
        community = str(kwargs['community'])
    model = snmp_command(
        ip,
        community,
        model_oid,
        attempts=2,
        timeout=3,
        snmp_version=version,
    )
    sn = snmp_command(
        ip,
        community,
        sn_oid,
        attempts=2,
        timeout=3,
        snmp_version=version,
    )
    if not (model and sn):
        return False, "silent.", kwargs
    sn = unicode(sn[0][1])
    model = 'Cisco %s' % unicode(model[0][1])
    dev = Device.create(sn=sn, model_name=model, model_type=DeviceType.switch)
    ip_address = IPAddress.objects.get(address=str(ip))
    ip_address.device = dev
    ip_address.is_management = True
    ip_address.save()
    return True, sn, kwargs
示例#19
0
def _run_ssh_catalyst(ip):
    ssh = _connect_ssh(ip)
    try:
        raw = '\n'.join(ssh.cisco_command("show inventory"))
    finally:
        ssh.close()

    inventory = list(cisco_inventory(raw))

    serials = [inv['sn'] for inv in inventory]

    try:
        dev = Device.objects.get(sn__in=serials)
    except Device.DoesNotExist:
        dev_inv = inventory[0]
        dev = Device.create(sn=dev_inv['sn'],
                            model_name='Cisco %s' % dev_inv['pid'],
                            model_type=DeviceType.switch,
                            name=dev_inv['descr'][:255])
    dev.save(update_last_seen=True)

    for inv in inventory:
        cisco_component(dev, inv)

    ip_address, created = IPAddress.concurrent_get_or_create(address=str(ip))
    if created:
        ip_address.hostname = network.hostname(ip_address.address)
    ip_address.device = dev
    ip_address.is_management = True
    ip_address.save(update_last_seen=True)
    return dev.name
示例#20
0
def make_tenant(tenant):
    dev = Device.create(name='OpenStack',
                        model_name='OpenStack Tenant',
                        model_type=DeviceType.cloud_server,
                        sn='openstack-%s' % tenant)
    dev.save()
    return dev
示例#21
0
def _run_ssh_catalyst(ip):
    ssh = _connect_ssh(ip)
    try:
        mac = '\n'.join(ssh.cisco_command(
            "show version | include Base ethernet MAC Address"
        ))

        raw = '\n'.join(ssh.cisco_command("show inventory"))
    finally:
        ssh.close()

    mac = mac.strip()
    if mac.startswith("Base ethernet MAC Address") and ':' in mac:
        ethernets = [
            Eth(
                "Base ethernet MAC Address",
                mac.split(':', 1)[1].strip(),
                None,
            ),
        ]
    else:
        ethernets = None

    inventory = list(cisco_inventory(raw))

    serials = [inv['sn'] for inv in inventory]
    dev_inv = inventory[0]
    try:
        dev = Device.objects.get(sn__in=serials)
    except MultipleObjectsReturned:
        raise Error(
            "Stacked devices with serials %r should be merged.",
            serials,
        )
    except Device.DoesNotExist:
        sn = dev_inv['sn']
        model_name='Cisco %s' % dev_inv['pid']
    else:
        # This is a stacked device, use the base device for it
        sn = dev.sn
        model_name = dev.model.name
    dev = Device.create(
        ethernets=ethernets,
        sn=sn,
        model_name=model_name,
        model_type=DeviceType.switch,
        name=dev_inv['descr'][:255],
    )
    dev.save(update_last_seen=True)

    for inv in inventory:
        cisco_component(dev, inv)

    ip_address, created = IPAddress.concurrent_get_or_create(address=str(ip))
    if created:
        ip_address.hostname = network.hostname(ip_address.address)
    ip_address.device = dev
    ip_address.is_management = True
    ip_address.save(update_last_seen=True)
    return dev.name
示例#22
0
文件: ssh_xen.py 项目: iwwwwwwi/ralph
def run_ssh_xen(ipaddr, parent):
    ssh = _connect_ssh(ipaddr.address)
    try:
        vms = get_running_vms(ssh)
        macs = get_macs(ssh)
    finally:
        ssh.close()

    for dev in parent.child_set.exclude(
            sn__in=[vm_uuid for (vm_name, vm_uuid) in vms]):
        dev.deleted = True
        dev.save()
    for vm_name, vm_uuid in vms:
        ethernets = [
            Eth('vif %d' % i, mac, 0)
            for i, mac in enumerate(macs.get(vm_name, []))
        ]
        dev = Device.create(ethernets=ethernets,
                            parent=parent,
                            sn=vm_uuid,
                            model_type=DeviceType.virtual_server,
                            model_name='XEN Virtual Server',
                            priority=SAVE_PRIORITY)
        dev.name = vm_name
        dev.save(priority=SAVE_PRIORITY)
    return ', '.join(vm_name for (vm_name, vm_uuid) in vms)
示例#23
0
 def setUp(self):
     device = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='HAL 9000',
         model_type=DeviceType.unknown,
         remarks="I'm sorry, Dave.",
     )
     self.deployment = Deployment(
         hostname='discovery.one',
         ip='127.0.0.1',
         mac='deadbeefcafe',
         device=device,
         preboot=None,
         venture=None,
         venture_role=None,
     )
     self.deployment.save()
     self.ip = IPAddress(address='127.0.0.1', device=device)
     self.ip.save()
     IPAddress(address='127.0.0.2', device=device).save()
     share_model = ComponentModel(type=ComponentType.share, name="share")
     share_model.save()
     share = DiskShare(wwn='x'*33, device=device, model=share_model)
     share.save()
     DiskShareMount(share=share, device=device).save()
     OperatingSystem.create(os_name='GladOS', dev=device, family='',
                            priority=0)
     Software.create(dev=device, model_name='soft', path='/', family='',
                     priority=0)
示例#24
0
文件: util.py 项目: ReJeCtAll/ralph
def _create_device(data):
    ethernets = [Eth(
        'DEPLOYMENT MAC',
        MACAddressField.normalize(data['mac']),
        EthernetSpeed.unknown
    )]
    dev = Device.create(
        ethernets=ethernets, model_type=DeviceType.unknown,
        model_name='Unknown',
        verified=True,
    )
    dev.name = data['hostname']
    try:
        dev.parent = Device.objects.get(sn=data['rack_sn'])
    except Device.DoesNotExist:
        pass
    dev.save()
    IPAddress.objects.create(
        address=data['ip'],
        device=dev,
        hostname=data['hostname'],
    )
    if management_ip_unique(data['management_ip']):
        IPAddress.objects.create(
            address=data['management_ip'],
            device=dev,
            is_management=True
        )
    return dev
示例#25
0
 def setUp(self):
     # create data centers
     self.dc_temp1 = DataCenter.objects.create(name='temp1', )
     self.dc_temp2 = DataCenter.objects.create(name='temp2', )
     self.env_temp1 = Environment.objects.create(
         name='temp1',
         hosts_naming_template='h<100,199>.temp1|h<300,399>.temp1',
         data_center=self.dc_temp1,
     )
     self.env_temp2 = Environment.objects.create(
         name='temp2',
         hosts_naming_template='h<200,299>.temp2',
         data_center=self.dc_temp2,
     )
     # create domains
     self.domain_temp1 = Domain.objects.create(name='temp1')
     self.domain_temp2 = Domain.objects.create(name='temp2')
     # create temp deployment
     dev = Device.create(ethernets=[
         Eth('SomeEthLabel', 'aa11cc2266bb', EthernetSpeed.unknown)
     ],
                         model_type=DeviceType.unknown,
                         model_name='Unknown')
     IPAddress.objects.create(address='127.0.1.4', device=dev)
     Deployment.objects.create(device=dev,
                               mac='aa11cc2266bb',
                               ip='127.0.1.2',
                               hostname='h202.temp2')
     # create temp networks
     terminator = NetworkTerminator.objects.create(name='T100')
     net1 = Network.objects.create(
         name='net1',
         address='127.0.1.0/24',
         data_center=self.dc_temp1,
         reserved=1,
         gateway='127.0.0.254',
         environment=self.env_temp1,
     )
     net1.terminators.add(terminator)
     net1.save()
     net2 = Network.objects.create(
         name='net2',
         address='127.0.0.0/24',
         data_center=self.dc_temp1,
         gateway='127.0.0.254',
         environment=self.env_temp1,
     )
     net2.terminators.add(terminator)
     net2.save()
     net3 = Network.objects.create(
         name='net3',
         address='192.168.0.1/28',
         data_center=self.dc_temp1,
         gateway='127.0.0.254',
         environment=self.env_temp1,
     )
     net3.terminators.add(terminator)
     net3.reserved = 1
     net3.reserved_top_margin = 15
     net3.save()
示例#26
0
def run_idrac(ip):
    idrac = IDRAC(ip)
    base_info = idrac.get_base_info()
    model_name = "{} {}".format(
        base_info['manufacturer'].replace(" Inc.", ""),
        base_info['model']
    )
    ethernets = _save_ethernets(idrac.get_ethernets())
    ip_address, _ = IPAddress.concurrent_get_or_create(address=ip)
    ip_address.is_management = True
    ip_address.save()
    dev = Device.create(
        ethernets=ethernets,
        model_name=model_name,
        sn=base_info['sn'],
        model_type=DeviceType.rack_server,
    )
    dev.management = ip_address
    dev.save(priority=SAVE_PRIORITY)
    ip_address.device = dev
    ip_address.save()
    _save_cpu(dev, idrac.get_cpu())
    _save_memory(dev, idrac.get_memory())
    _save_storage(dev, idrac.get_storage())
    _save_fc_cards(dev, idrac.get_fc_cards())
    return model_name
示例#27
0
文件: discovery.py 项目: 4i60r/ralph
 def generate_data(self, data):
     model = RackServerModelFactory()
     return {
         'device_1': Device.get_or_create_by_mac(
             '02:42:ac:11:ff:ff',
             parent=data['deprecated_dc']['a'],
             dc=data['deprecated_dc']['a'].name,
             rack=data['deprecated_racks']['a'].name,
             service=data['services']['backup_systems'],
             device_environment=data['envs']['prod'],
             model=model,
         )[0],
         'device_2': DeviceFactory(
             parent=data['deprecated_dc']['b'],
             dc=data['deprecated_dc']['b'].name,
             rack=data['deprecated_racks']['b'].name,
             service=data['services']['databases'],
             device_environment=data['envs']['prod'],
             model=model,
         ),
         'device_3': DeviceFactory(
             parent=data['deprecated_dc']['b'],
             dc=data['deprecated_dc']['b'].name,
             rack=data['deprecated_racks']['b'].name,
             service=data['services']['load_balancing'],
             device_environment=data['envs']['prod'],
             model=DeviceModelFactory(
                 name='F5',
                 type=DeviceType.load_balancer
             ),
         ),
     }
示例#28
0
 def setUp(self):
     device = Device.create(
         ethernets=[('', 'deadbeefcafe', 0)],
         model_name='HAL 9000',
         model_type=DeviceType.unknown,
         remarks="I'm sorry, Dave.",
     )
     self.deployment = Deployment(
         hostname='discovery.one',
         ip='127.0.0.1',
         mac='deadbeefcafe',
         device=device,
         preboot=None,
         venture=None,
         venture_role=None,
     )
     self.deployment.save()
     self.ip = IPAddress(address='127.0.0.1', device=device)
     self.ip.save()
     IPAddress(address='127.0.0.2', device=device).save()
     share_model = ComponentModel(type=ComponentType.share, name="share")
     share_model.save()
     share = DiskShare(wwn='x' * 33, device=device, model=share_model)
     share.save()
     DiskShareMount(share=share, device=device).save()
     OperatingSystem.create(os_name='GladOS',
                            dev=device,
                            family='',
                            priority=0)
     Software.create(dev=device,
                     model_name='soft',
                     path='/',
                     family='',
                     priority=0)
示例#29
0
文件: lshw.py 项目: Makdaam/ralph
def handle_lshw(data, is_virtual=False, sn=None, priority=0):
    lshw = parse_lshw(as_string=data)
    prod_name = lshw['product']
    manufacturer = lshw['vendor'].replace(', Inc.', '')
    if prod_name.endswith(' ()'):
        prod_name = prod_name[:-3]
    if manufacturer and manufacturer in prod_name:
        model_name = prod_name
    else:
        model_name = "{} {}".format(manufacturer, prod_name)
    if is_virtual:
        model_type = DeviceType.virtual_server
    elif DeviceType.blade_server.matches(model_name):
        model_type = DeviceType.blade_server
    else:
        model_type = DeviceType.rack_server
    ethernets = list(handle_lshw_ethernets(lshw))
    if not ethernets:
        raise EthernetsError("Machine has no MAC addresses.")
    dev = Device.create(sn=sn, model_name=model_name, model_type=model_type,
        ethernets=ethernets, priority=priority)
    handle_lshw_memory(dev, lshw['bus']['memory'], is_virtual=is_virtual)
    handle_lshw_processors(dev, lshw['bus']['processor'], is_virtual=is_virtual)
    handle_lshw_storage(dev, lshw, is_virtual=is_virtual)
    handle_lshw_fibre_cards(dev, lshw, is_virtual=is_virtual)
    return dev
示例#30
0
文件: ssh_xen.py 项目: pb-it/ralph
def run_ssh_xen(ipaddr, parent):
    ssh = _connect_ssh(ipaddr.address)
    try:
        command = ("""ovsdb-tool query /etc/openvswitch/conf.db """
            """'["Open_vSwitch", {"""
            """ "op": "select","""
            """ "table": "Interface","""
            """ "where": [],"""
            """ "columns": ["external_ids"]"""
            """}]'""")
        # ovsdb-tool query /etc/openvswitch/conf.db '["Open_vSwitch", { "op": "select",  "table": "Interface", "where": [], "columns": ["external_ids"]}]'
        stdin, stdout, stderr = ssh.exec_command(command)
        data = json.loads(stdout.read())
        vms = {}
        for row in data[0]['rows']:
            try:
                ids = dict(row['external_ids'][1])
                vm_id = ids['xs-vm-uuid']
                mac = ids['attached-mac']
            except KeyError:
                continue
            vms[vm_id] = Eth(label='Virtual MAC', mac=mac, speed=0)
    finally:
        ssh.close()

    names = []
    for vm_id, ethernet in vms.iteritems():
        dev = Device.create(ethernets=[ethernet], parent=parent,
                model_type=DeviceType.virtual_server,
                model_name='XEN Virtual Server')
        names.append(dev.name or ethernet.mac)

    return ', '.join(names)
示例#31
0
 def generate_data(self, data):
     model = RackServerModelFactory()
     return {
         'device_1':
         Device.get_or_create_by_mac(
             '02:42:ac:11:ff:ff',
             parent=data['deprecated_dc']['a'],
             dc=data['deprecated_dc']['a'].name,
             rack=data['deprecated_racks']['a'].name,
             service=data['services']['backup_systems'],
             device_environment=data['envs']['prod'],
             model=model,
         )[0],
         'device_2':
         DeviceFactory(
             parent=data['deprecated_dc']['b'],
             dc=data['deprecated_dc']['b'].name,
             rack=data['deprecated_racks']['b'].name,
             service=data['services']['databases'],
             device_environment=data['envs']['prod'],
             model=model,
         ),
         'device_3':
         DeviceFactory(
             parent=data['deprecated_dc']['b'],
             dc=data['deprecated_dc']['b'].name,
             rack=data['deprecated_racks']['b'].name,
             service=data['services']['load_balancing'],
             device_environment=data['envs']['prod'],
             model=DeviceModelFactory(name='F5',
                                      type=DeviceType.load_balancer),
         ),
     }
示例#32
0
def _create_device(data):
    ethernets = [
        Eth('DEPLOYMENT MAC', MACAddressField.normalize(data['mac']),
            EthernetSpeed.unknown)
    ]
    dev = Device.create(
        ethernets=ethernets,
        model_type=DeviceType.unknown,
        model_name='Unknown',
        verified=True,
    )
    dev.name = data['hostname']
    try:
        dev.parent = Device.objects.get(sn=data['rack_sn'])
    except Device.DoesNotExist:
        pass
    dev.save()
    IPAddress.objects.create(
        address=data['ip'],
        device=dev,
        hostname=data['hostname'],
    )
    if management_ip_unique(data['management_ip']):
        IPAddress.objects.create(address=data['management_ip'],
                                 device=dev,
                                 is_management=True)
    return dev
示例#33
0
def _run_ssh_catalyst(ip):
    ssh = _connect_ssh(ip)
    try:
        raw = "\n".join(ssh.cisco_command("show inventory"))
    finally:
        ssh.close()

    inventory = list(cisco_inventory(raw))

    serials = [inv["sn"] for inv in inventory]

    try:
        dev = Device.objects.get(sn__in=serials)
    except Device.DoesNotExist:
        dev_inv = inventory[0]
        dev = Device.create(
            sn=dev_inv["sn"],
            model_name="Cisco %s" % dev_inv["pid"],
            model_type=DeviceType.switch,
            name=dev_inv["descr"][:255],
        )
    dev.save(update_last_seen=True)

    for inv in inventory:
        cisco_component(dev, inv)

    ip_address, created = IPAddress.concurrent_get_or_create(address=str(ip))
    if created:
        ip_address.hostname = network.hostname(ip_address.address)
    ip_address.device = dev
    ip_address.is_management = True
    ip_address.save(update_last_seen=True)
    return dev.name
示例#34
0
    def test_device_create_blacklist(self):
        ethernets = [("1", "DEADBEEFCAFE", 0), ("2", "DEAD2CEFCAFE", 0)]
        dev = Device.create(ethernets, sn="None", model_name="xxx", model_type=DeviceType.unknown)

        self.assertEqual(dev.sn, None)
        macs = [e.mac for e in dev.ethernet_set.all()]
        self.assertEqual(macs, ["DEADBEEFCAFE"])
示例#35
0
 def setUp(self):
     self.client = login_as_su()
     self.device = Device.create(
         sn=DEVICE['sn'],
         barcode=DEVICE['barcode'],
         remarks=DEVICE['remarks'],
         model_name=DEVICE['model_name'],
         model_type=DeviceType.unknown,
         rack=DEVICE['rack'],
         position=DEVICE['position'],
         dc=DATACENTER,
     )
     self.software1 = Software.create(
         dev=self.device,
         path='apache2',
         model_name='apache2 2.4.3',
         label='apache',
         family='http servers',
         version='2.4.3',
         priority=69,
     )
     self.software2 = Software.create(
         dev=self.device,
         path='gcc',
         model_name='gcc 4.7.2',
         label='gcc',
         family='compilers',
         version='4.7.2',
         priority=69,
     )
示例#36
0
def handle_lshw(data, is_virtual=False, sn=None, priority=0):
    lshw = parse_lshw(as_string=data)
    prod_name = lshw['product']
    manufacturer = lshw['vendor'].replace(', Inc.', '')
    if prod_name.endswith(' ()'):
        prod_name = prod_name[:-3]
    if manufacturer and manufacturer in prod_name:
        model_name = prod_name
    else:
        model_name = "{} {}".format(manufacturer, prod_name)
    if is_virtual:
        model_type = DeviceType.virtual_server
    elif DeviceType.blade_server.matches(model_name):
        model_type = DeviceType.blade_server
    else:
        model_type = DeviceType.rack_server
    ethernets = list(handle_lshw_ethernets(lshw))
    if not ethernets:
        raise EthernetsError("Machine has no MAC addresses.")
    dev = Device.create(sn=sn,
                        model_name=model_name,
                        model_type=model_type,
                        ethernets=ethernets,
                        priority=priority)
    handle_lshw_memory(dev, lshw['bus']['memory'], is_virtual=is_virtual)
    handle_lshw_processors(dev,
                           lshw['bus']['processor'],
                           is_virtual=is_virtual)
    handle_lshw_storage(dev, lshw, is_virtual=is_virtual)
    handle_lshw_fibre_cards(dev, lshw, is_virtual=is_virtual)
    return dev
示例#37
0
文件: snmp.py 项目: szaydel/ralph
def _snmp_modular(ip, community, parent):
    oid = (1, 3, 6, 1, 4, 1, 343, 2, 19, 1, 2, 10, 12, 0) # Max blades
    message = snmp_command(ip, community, oid, attempts=1, timeout=0.5)
    max_blades = int(message[0][1])
    blades_macs = {}
    for blade_no in range(1, max_blades + 1):
        oid = (1, 3, 6, 1, 4, 1, 343, 2, 19, 1, 2, 10, 202, 3, 1, 1, blade_no)
        blades_macs[blade_no] =  set(snmp_macs(ip, community, oid,
                                                       attempts=1, timeout=0.5))
    for i, macs in blades_macs.iteritems():
        unique_macs = macs
        for j, other_macs in blades_macs.iteritems():
            if i == j:
                continue
            unique_macs -= other_macs
        ethernets = [Eth('Intel Modular MAC', mac, speed=None) for mac in
            unique_macs]
        if ethernets:
            dev = Device.create(
                    name='Intel Modular Blade',
                    model_name='Intel Modular Blade',
                    model_type=DeviceType.blade_server,
                    ethernets=ethernets,
                    management=parent.management,
                    chassis_position=i,
                    position = str(i),
                    parent=parent,
                )
            dev.save(update_last_seen=True, priority=SAVE_PRIORITY)
示例#38
0
 def setUp(self):
     self.client = login_as_su()
     self.device = Device.create(
         sn=DEVICE['sn'],
         barcode=DEVICE['barcode'],
         remarks=DEVICE['remarks'],
         model_name=DEVICE['model_name'],
         model_type=DeviceType.unknown,
         rack=DEVICE['rack'],
         position=DEVICE['position'],
         dc=DATACENTER,
     )
     self.software1 = Software.create(
         dev=self.device,
         path='apache2',
         model_name='apache2 2.4.3',
         label='apache',
         family='http servers',
         version='2.4.3',
         priority=69,
     )
     self.software2 = Software.create(
         dev=self.device,
         path='gcc',
         model_name='gcc 4.7.2',
         label='gcc',
         family='compilers',
         version='4.7.2',
         priority=69,
     )
示例#39
0
文件: snmp.py 项目: szaydel/ralph
def _cisco_snmp_model(model_oid, sn_oid, **kwargs):
    ip = str(kwargs['ip'])
    version = kwargs.get('snmp_version')
    if version == '3':
        community = SNMP_V3_AUTH
    else:
        community = str(kwargs['community'])
    model = snmp_command(
        ip,
        community,
        model_oid,
        attempts=2,
        timeout=3,
        snmp_version=version,
    )
    sn = snmp_command(
        ip,
        community,
        sn_oid,
        attempts=2,
        timeout=3,
        snmp_version=version,
    )
    if not (model and sn):
        return False, "silent.", kwargs
    sn = unicode(sn[0][1])
    model = 'Cisco %s' % unicode(model[0][1])
    dev = Device.create(sn=sn, model_name=model, model_type=DeviceType.switch)
    ip_address = IPAddress.objects.get(address=str(ip))
    ip_address.device = dev
    ip_address.is_management = True
    ip_address.save()
    return True, sn, kwargs
示例#40
0
def make_device(ilo, ip):
    if ilo.model.startswith('HP ProLiant BL'):
        t = DeviceType.blade_server
    else:
        t = DeviceType.rack_server
    ethernets = [Eth(label, mac, speed=None) for label, mac in ilo.ethernets]
    dev = Device.create(
        ethernets=ethernets,
        model_name=ilo.model,
        model_type=t,
        sn=ilo.sn,
        name=ilo.name,
        mgmt_firmware=ilo.firmware,
    )
    dev.save(update_last_seen=True, priority=SAVE_PRIORITY)

    ipaddr, created = IPAddress.concurrent_get_or_create(address=ip)
    ipaddr.device = dev
    ipaddr.is_management = True
    ipaddr.save()

    if dev.parent and dev.parent.management:
        dev.management = dev.parent.management
    else:
        dev.management = ipaddr
    dev.save(priority=SAVE_PRIORITY)

    return dev
示例#41
0
文件: snmp.py 项目: iwwwwwwi/ralph
def _snmp_modular(ip, community, parent):
    oid = (1, 3, 6, 1, 4, 1, 343, 2, 19, 1, 2, 10, 12, 0) # Max blades
    message = snmp_command(ip, community, oid, attempts=1, timeout=0.5)
    max_blades = int(message[0][1])
    blades_macs = {}
    for blade_no in range(1, max_blades + 1):
        oid = (1, 3, 6, 1, 4, 1, 343, 2, 19, 1, 2, 10, 202, 3, 1, 1, blade_no)
        blades_macs[blade_no] =  set(snmp_macs(ip, community, oid,
                                                       attempts=1, timeout=0.5))
    for i, macs in blades_macs.iteritems():
        unique_macs = macs
        for j, other_macs in blades_macs.iteritems():
            if i == j:
                continue
            unique_macs -= other_macs
        ethernets = [Eth('Intel Modular MAC', mac, speed=None) for mac in
            unique_macs]
        if ethernets:
            dev = Device.create(
                    name='Intel Modular Blade',
                    model_name='Intel Modular Blade',
                    model_type=DeviceType.blade_server,
                    ethernets=ethernets,
                    management=parent.management,
                    chassis_position=i,
                    position = str(i),
                    parent=parent,
                )
            dev.save(update_last_seen=True)
示例#42
0
def run_http_ibm_system_x(ip):
    session_id = get_session_id(ip)
    management_url = "http://%s/wsman" % ip
    model_name = get_model_name(management_url, session_id)
    sn = get_sn(management_url, session_id)
    macs = get_mac_addresses(management_url, session_id)
    ethernets = [Eth(label=label, mac=mac, speed=0)
                 for (label, mac) in macs]
    ipaddr, ip_created = IPAddress.concurrent_get_or_create(address=ip)
    ipaddr.is_management = True
    ipaddr.save()
    dev = Device.create(
        ethernets=ethernets,
        model_name=model_name,
        sn=sn,
        model_type=DeviceType.rack_server,
    )
    dev.management = ipaddr
    dev.save(priority=SAVE_PRIORITY)
    ipaddr.device = dev
    ipaddr.save()
    detected_memory = get_memory(management_url, session_id)
    detected_memory_indexes = [x.get('index') for x in detected_memory]
    for m in dev.memory_set.exclude(index__in=detected_memory_indexes):
        m.delete()
    for m in detected_memory:
        index = m['index']
        mem, _ = Memory.concurrent_get_or_create(index=index, device=dev)
        mem.label = m['label']
        mem.size = m['size']
        mem.save(priority=SAVE_PRIORITY)
        mem.model, c = ComponentModel.concurrent_get_or_create(
            name='RAM %s %dMiB' % (mem.label, mem.size), size=mem.size,
            type=ComponentType.memory.id,
            family=mem.label, cores=0
        )
        mem.save(priority=SAVE_PRIORITY)
    detected_processors = get_processors(management_url, session_id)
    detected_processors_keys = [x.get('index') for x in detected_processors]
    for cpu in dev.processor_set.exclude(index__in=detected_processors_keys):
        cpu.delete()
    # add new
    for p in detected_processors:
        processor_model, _ = ComponentModel.concurrent_get_or_create(
            name=p.get('label'),
            speed=p.get('speed'),
            type=ComponentType.processor.id,
            family=p.get('family'),
            cores=p.get('cores')
        )
        processor, _ = Processor.concurrent_get_or_create(
            device=dev,
            index=p.get('index'),
        )
        processor.label = p.get('label')
        processor.model = processor_model
        processor.speed = p.get('speed')
        processor.save()
    return model_name
示例#43
0
def run_http_ibm_system_x(ip):
    session_id = get_session_id(ip)
    management_url = "http://%s/wsman" % ip
    model_name = get_model_name(management_url, session_id)
    sn = get_sn(management_url, session_id)
    macs = get_mac_addresses(management_url, session_id)
    ethernets = [Eth(label=label, mac=mac, speed=0)
                 for (label, mac) in macs]
    ipaddr, ip_created = IPAddress.concurrent_get_or_create(address=ip)
    ipaddr.is_management = True
    ipaddr.save()
    dev = Device.create(
        ethernets=ethernets,
        model_name=model_name,
        sn=sn,
        model_type=DeviceType.rack_server,
    )
    dev.management = ipaddr
    dev.save(priority=SAVE_PRIORITY)
    ipaddr.device = dev
    ipaddr.save()
    detected_memory = get_memory(management_url, session_id)
    detected_memory_indexes = [x.get('index') for x in detected_memory]
    for m in dev.memory_set.exclude(index__in=detected_memory_indexes):
        m.delete()
    for m in detected_memory:
        index = m['index']
        mem, _ = Memory.concurrent_get_or_create(index=index, device=dev)
        mem.label = m['label']
        mem.size = m['size']
        mem.model, c = ComponentModel.create(
            ComponentType.memory,
            size=mem.size,
            priority=SAVE_PRIORITY,
        )
        mem.save(priority=SAVE_PRIORITY)
    detected_processors = get_processors(management_url, session_id)
    detected_processors_keys = [x.get('index') for x in detected_processors]
    for cpu in dev.processor_set.exclude(index__in=detected_processors_keys):
        cpu.delete()
    # add new
    for p in detected_processors:
        processor_model, _ = ComponentModel.create(
            ComponentType.processor,
            speed=p.get('speed'),
            family=p.get('family'),
            cores=p.get('cores'),
            name=p.get('label'),
            priority=SAVE_PRIORITY,
        )
        processor, _ = Processor.concurrent_get_or_create(
            device=dev,
            index=p.get('index'),
        )
        processor.label = p.get('label')
        processor.model = processor_model
        processor.speed = p.get('speed')
        processor.save(priority=SAVE_PRIORITY)
    return model_name
示例#44
0
def run_http(ip):
    macs = _get_macs(ip)
    ethernets = [Eth(label=label, mac=mac, speed=0) for (label, mac) in macs.iteritems()]
    ipaddr = IPAddress.objects.get(address=ip)
    dev = Device.create(ethernets=ethernets, model_name="Unknown Supermicro", model_type=DeviceType.unknown)
    ipaddr.device = dev
    ipaddr.save()
    return ", ".join(macs.values())
示例#45
0
def save_device_data(data, remote_ip):
    device = data['device']
    ethernets = [
        Eth(e.get('label'), MACAddressField.normalize(e.get('mac')),
            str_to_ethspeed(e.get('speed'))) for e in data['ethernets']
        if MACAddressField.normalize(e.get('mac')) not in MAC_PREFIX_BLACKLIST
    ]
    sn = device.get('sn')
    vendor = device.get('vendor', '')
    if not ethernets and not sn:
        raise NoRequiredDataError('No MAC addresses and no device SN.')
    ip_addresses = [
        e['ipaddress'] for e in data['ethernets'] if e.get('ipaddress')
    ]
    if not ip_addresses:
        raise NoRequiredIPAddressError(
            "Couldn't find any IP address for this device.")
    try:
        dev = Device.create(sn=sn,
                            ethernets=ethernets,
                            model_name='%s %s %s' % (
                                device.get('caption'),
                                vendor,
                                device.get('version'),
                            ),
                            model_type=DeviceType.unknown,
                            priority=SAVE_PRIORITY)
    except ValueError as e:
        DiscoveryWarning(
            message="Failed to create device: " + str(e),
            plugin=__name__,
            ip=str(remote_ip),
        ).save()
        return None
    dev.save(priority=SAVE_PRIORITY)
    os = data['operating_system']
    o = OperatingSystem.create(dev,
                               os_name=os.get('label'),
                               family='Windows',
                               priority=SAVE_PRIORITY)
    o.memory = int(os['memory'])
    o.storage = int(os['storage'])
    o.cores_count = int(os['corescount'])
    o.save(priority=SAVE_PRIORITY)
    for ip in ip_addresses:
        ip_address, _ = IPAddress.concurrent_get_or_create(address=str(ip))
        ip_address.device = dev
        ip_address.is_management = False
        ip_address.save()
    vendor = vendor.lower()
    is_virtual = any(virtual in vendor for virtual in CPU_VIRTUAL_LIST)
    save_processors(data['processors'], dev, is_virtual)
    save_memory(data['memory'], dev)
    save_storage(data['storage'], dev)
    save_shares(data['shares'], dev, ip_address)
    save_fibre_channel(data['fcs'], dev)
    save_software(data.get('software', []), dev)
    return dev
示例#46
0
def save_device_data(data, remote_ip):
    device = data['device']
    ethernets = [
        Eth(e.get('label'), MACAddressField.normalize(e.get('mac')),
            str_to_ethspeed(e.get('speed')))
        for e in data['ethernets']
        if MACAddressField.normalize(e.get('mac')) not in MAC_PREFIX_BLACKLIST]
    sn = device.get('sn')
    vendor = device.get('vendor', '')
    if not ethernets and not sn:
        raise NoRequiredDataError('No MAC addresses and no device SN.')
    ip_addresses = [
        e['ipaddress'] for e in data['ethernets'] if e.get('ipaddress')
    ]
    if not ip_addresses:
        raise NoRequiredIPAddressError(
            "Couldn't find any IP address for this device."
        )
    try:
        dev = Device.create(
            sn=sn,
            ethernets=ethernets,
            model_name='%s %s %s' % (
                device.get('caption'),
                vendor,
                device.get('version'),
            ),
            model_type=DeviceType.unknown, priority=SAVE_PRIORITY
        )
    except ValueError as e:
        DiscoveryWarning(
            message="Failed to create device: " + str(e),
            plugin=__name__,
            ip=str(remote_ip),
        ).save()
        return None
    dev.save(priority=SAVE_PRIORITY)
    os = data['operating_system']
    o = OperatingSystem.create(dev, os_name=os.get('label'),
                               family='Windows', priority=SAVE_PRIORITY)
    o.memory = int(os['memory'])
    o.storage = int(os['storage'])
    o.cores_count = int(os['corescount'])
    o.save(priority=SAVE_PRIORITY)
    for ip in ip_addresses:
        ip_address, _ = IPAddress.concurrent_get_or_create(address=str(ip))
        ip_address.device = dev
        ip_address.is_management = False
        ip_address.save()
    vendor = vendor.lower()
    is_virtual = any(virtual in vendor for virtual in CPU_VIRTUAL_LIST)
    save_processors(data['processors'], dev, is_virtual)
    save_memory(data['memory'], dev)
    save_storage(data['storage'], dev)
    save_shares(data['shares'], dev, ip_address)
    save_fibre_channel(data['fcs'], dev)
    save_software(data.get('software', []), dev)
    return dev
示例#47
0
 def setUp(self):
     # create data centers
     self.dc_temp1 = DataCenter.objects.create(
         name='temp1',
         hosts_naming_template='h<100,199>.temp1|h<300,399>.temp1'
     )
     self.dc_temp2 = DataCenter.objects.create(
         name='temp2',
         hosts_naming_template='h<200,299>.temp2'
     )
     # create domains
     self.domain_temp1 = Domain.objects.create(name='temp1')
     self.domain_temp2 = Domain.objects.create(name='temp2')
     # create temp deployment
     dev = Device.create(
         ethernets=[Eth(
             'SomeEthLabel', 'aa11cc2266bb', EthernetSpeed.unknown
         )],
         model_type=DeviceType.unknown,
         model_name='Unknown'
     )
     IPAddress.objects.create(
         address='127.0.1.4',
         device=dev
     )
     Deployment.objects.create(
         device=dev,
         mac='aa11cc2266bb',
         ip='127.0.1.2',
         hostname='h202.temp2'
     )
     # create temp networks
     terminator = NetworkTerminator.objects.create(name='T100')
     net1 = Network.objects.create(
         name='net1',
         address='127.0.1.0/24',
         data_center=self.dc_temp1,
         reserved=1
     )
     net1.terminators.add(terminator)
     net1.save()
     net2 = Network.objects.create(
         name='net2',
         address='127.0.0.0/24',
         data_center=self.dc_temp1
     )
     net2.terminators.add(terminator)
     net2.save()
     net3 = Network.objects.create(
         name='net3',
         address='192.168.0.1/28',
         data_center=self.dc_temp1
     )
     net3.terminators.add(terminator)
     net3.reserved = 1
     net3.reserved_top_margin = 15
     net3.save()
示例#48
0
def snmp_vmware(parent, ipaddr, **kwargs):
    ip = str(kwargs['ip'])
    community = str(kwargs['community'])
    oid = (1, 3, 6, 1, 4, 1, 6876, 2, 4, 1, 7)
    snmp_version = 1
    for mac in snmp_macs(ip,
                         community,
                         oid,
                         attempts=2,
                         timeout=3,
                         snmp_version=snmp_version):
        Device.create(
            parent=parent,
            management=ipaddr,
            ethernets=[Eth(mac=mac, label='Virtual MAC', speed=0)],
            model_name='VMware ESX virtual server',
            model_type=DeviceType.virtual_server,
        )
示例#49
0
 def setUp(self):
     self.device_model = DeviceModel(type=DeviceType.rack_server, name="ziew-X")
     self.device_model.save()
     self.device = Device(
         model=self.device_model,
         sn='123456789',
         name='ziew',
     )
     self.device.save()
示例#50
0
 def test_deployment_entry(self):
     dc = DataCenter(name="dc1", next_server="ziew")
     dc.save()
     net = Network(name="net", address="127.0.0.0/24", data_center=dc)
     net.save()
     entry = DHCPEntry(ip="127.0.0.1", mac="deadbeefcafe")
     entry.save()
     device = Device(sn="ziew")
     device.save()
     deployment = Deployment(ip="127.0.0.1", mac="deadbeefcafe", device=device)
     deployment.save()
     config = generate_dhcp_config(dc=dc)
     # remove first line with the date and last line
     config = "\n".join(config.splitlines()[1:-1])
     self.assertEqual(
         config,
         "host 127.0.0.1 { fixed-address 127.0.0.1; " "hardware ethernet DE:AD:BE:EF:CA:FE; next-server ziew; }",
     )
示例#51
0
def make_tenant(tenant):
    dev = Device.create(
            name='OpenStack',
            model_name = 'OpenStack Tenant',
            model_type = DeviceType.cloud_server,
            sn='openstack-%s' % tenant['tenant_id']
        )
    dev.save()
    return dev
示例#52
0
文件: hp_oa.py 项目: iwwwwwwi/ralph
def make_encl(data, raw):
    encl_name = data['INFRA2']['PN'].strip()
    encl_sn = data['INFRA2']['ENCL_SN'].strip()
    if not encl_name.startswith('HP'):
        encl_name = 'HP ' + encl_name
    encl = Device.create(sn=encl_sn, name=encl_name, raw=raw,
            model_type=DeviceType.blade_system, model_name=encl_name,
            priority=SAVE_PRIORITY)
    encl.save(update_last_seen=True, priority=SAVE_PRIORITY)
    return encl
示例#53
0
    def form_valid(self, form):
        self.set_rack()
        macs = [('', mac, 0) for mac in form.cleaned_data['macs'].split()]
        try:
            dc = self.rack.dc
        except AttributeError:
            dc = None
        try:
            rack = self.rack.rack
        except AttributeError:
            rack = None
        if self.rack == '':
            self.rack = None
        wed = form.cleaned_data['warranty_expiration_date']
        sed = form.cleaned_data['support_expiration_date']
        if form.cleaned_data['support_kind'] == '':
            form.cleaned_data['support_kind'] = None
        if form.cleaned_data['position'] == '':
            form.cleaned_data['position'] = None

        dev = Device.create(
            ethernets=macs,
            barcode=form.cleaned_data['barcode'],
            remarks=form.cleaned_data['remarks'],
            sn=form.cleaned_data['sn'],
            model=form.cleaned_data['model'],
            venture=form.cleaned_data['venture'],
            purchase_date=form.cleaned_data['purchase_date'],
            priority=1,
            position=form.cleaned_data['position'],
            chassis_position=form.cleaned_data['chassis_position'],
            margin_kind=form.cleaned_data['margin_kind'],
            deprecation_kind=form.cleaned_data['deprecation_kind'],
            price=form.cleaned_data['price'],
            warranty_expiration_date=wed,
            support_expiration_date=sed,
            support_kind=form.cleaned_data['support_kind'],
            venture_role=form.cleaned_data['venture_role'],
            parent=self.rack,
            dc=dc,
            rack=rack,
            user=self.request.user,
        )
        dev.name = form.cleaned_data['name']
        dev.save(priority=1, user=self.request.user)
        if all((
                'ralph_assets' in settings.INSTALLED_APPS,
                'asset' in form.cleaned_data.keys(),
        )):
            from ralph_assets.api_ralph import assign_asset
            asset = form.cleaned_data['asset']
            if asset:
                assign_asset(dev.id, asset.id)
        messages.success(self.request, _('Device created.'))
        return HttpResponseRedirect(self.request.path + '../info/%d' % dev.id)
示例#54
0
def _save_device(ip, name, model_name, sn, macs):
    ethernets = [Eth(mac=mac, label='MAC', speed=0) for mac in macs]
    dev = Device.create(sn=sn, model_name=model_name, ethernets=ethernets,
                        model_type=DeviceType.storage, name=name)
    ipaddr, ip_created = IPAddress.concurrent_get_or_create(address=ip)
    ipaddr.device = dev
    ipaddr.is_management = True
    ipaddr.save()
    dev.management = ipaddr
    dev.save()
    return dev
示例#55
0
 def test_rack_server(self):
     dev = Device.create(sn='device', model_type=DeviceType.rack_server,
                         model_name='device')
     dmg = DeviceModelGroup(name='DeviceModelGroup')
     dmg.price = 1337
     dmg.save()
     dev.model.group = dmg
     dev.model.save()
     pricing.device_update_cached(dev)
     dev = Device.objects.get(id=dev.id)
     self.assertEquals(dev.cached_price, 1337)
示例#56
0
    def test_device_create_blacklist(self):
        ethernets = [
            ('1', 'DEADBEEFCAFE', 0),
            ('2', 'DEAD2CEFCAFE', 0),
        ]
        dev = Device.create(ethernets, sn='None',
                            model_name='xxx', model_type=DeviceType.unknown)

        self.assertEqual(dev.sn, None)
        macs = [e.mac for e in dev.ethernet_set.all()]
        self.assertEqual(macs, ['DEADBEEFCAFE'])
示例#57
0
 def _create_cluster_master(self):
     self.master_dev = Device.create(
         sn='sn_master_abc_1',
         model_name='SomeDeviceModelName',
         model_type=DeviceType.unknown,
     )
     IPAddress.objects.create(
         hostname='master.dc',
         address='127.0.1.88',
         device=self.master_dev,
     )