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)
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 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()
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)
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()
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
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)
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()
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' )
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()
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)
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, )
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()
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)
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
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
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
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
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)
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()
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)
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
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"])
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)
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)
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, )
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
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
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
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
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)
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
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
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
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())
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
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
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
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, )
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()
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
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)
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)
def setUp(self): engine = settings.ISSUETRACKERS["default"]["ENGINE"] if engine != "": raise ImproperlyConfigured("""Expected ISSUETRACKERS['default']['ENGINE']='' got: %r""" % 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 = CIOwner(first_name="Bufallo", last_name="Kudłaczek") to.save() bo = CIOwner(first_name="Bill", last_name="Bąbelek") bo.save() ct = ContentType.objects.get_for_model(self.top_venture) CIImporter().import_all_ci([ct]) CIOwnership(owner=to, ci=CI.get_by_content_object(self.child_venture), type=CIOwnershipType.technical.id).save() CIOwnership(owner=bo, ci=CI.get_by_content_object(self.child_venture), type=CIOwnershipType.business.id).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()
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'])
def _dev(model_type, pairs, parent, raw): if 'Mach type/model' in pairs: model_name = '%s (%s)' % (pairs['Mach type/model'], pairs['Part no.']) elif 'Part no.' in pairs: model_name = pairs['Part no.'] else: raise DeviceError('No model/part no.') if not model_name.startswith('IBM'): model_name = 'IBM ' + model_name sn = pairs.get('Mach serial number') if sn in SERIAL_BLACKLIST: sn = None if not sn: sn = pairs['FRU serial no.'] if sn in SERIAL_BLACKLIST: sn = None mac = pairs.get('MAC Address 1', None) if mac: ethernets = [Eth('MAC Address 1', mac, None)] else: ethernets = [] name = pairs.get('Name') or pairs.get('Product Name') or model_name dev = Device.create(ethernets=ethernets, model_name=model_name, model_type=model_type, sn=sn, raw=raw, name=name, parent=parent, priority=SAVE_PRIORITY) firmware = (pairs.get('AMM firmware') or pairs.get('FW/BIOS') or pairs.get('Main Application 2')) if firmware: dev.hard_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev']) else: firmware = pairs.get('Power Module Cooling Device firmware rev.') if firmware: dev.hard_firmware = 'rev %s' % firmware firmware = (pairs.get('Boot ROM') or pairs.get('Main Application 1') or pairs.get('Blade Sys Mgmt Processor')) if firmware: dev.boot_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev']) firmware = (pairs.get('Blade Sys Mgmt Processor')) if firmware: dev.mgmt_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev']) firmware = (pairs.get('Diagnostics')) if firmware: dev.diag_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev']) dev.save(update_last_seen=True, priority=SAVE_PRIORITY) return dev
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)
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, )
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
def run_ssh_asa(ip): ssh = _connect_ssh(ip) try: lines = ssh.asa_command( "show version | grep (^Hardware|Boot microcode|^Serial|address is)" ) raw_inventory = '\n'.join(ssh.asa_command("show inventory")) finally: ssh.close() pairs = parse.pairs(lines=[line.strip() for line in lines]) sn = pairs.get('Serial Number', None) model, ram, cpu = pairs['Hardware'].split(',') boot_firmware = pairs['Boot microcode'] ethernets = [] for i in xrange(99): try: junk, label, mac = pairs['%d' % i].split(':') except KeyError: break mac = mac.split(',', 1)[0] mac = mac.replace('address is', '') mac = mac.replace('.', '').upper().strip() label = label.strip() ethernets.append(Eth(label, mac, speed=None)) dev = Device.create(ethernets=ethernets, sn=sn, model_name=model, model_type=DeviceType.firewall, boot_firmware=boot_firmware) dev.save(update_last_seen=True) inventory = list(cisco_inventory(raw_inventory)) for inv in inventory: cisco_component(dev, inv) ipaddr, created = IPAddress.concurrent_get_or_create(address=ip) ipaddr.device = dev ipaddr.is_management = True ipaddr.save() for label, mac, speed in ethernets: eth, created = Ethernet.concurrent_get_or_create( mac=mac, defaults={'device': dev}, ) eth.label = label eth.device = dev eth.save() return model