def on_get(self, req, resp, tenant_id): client = req.env['sl_client'] cci = CCIManager(client) params = get_list_params(req) sl_instances = cci.list_instances(**params) if not isinstance(sl_instances, list): sl_instances = [sl_instances] results = [] for instance in sl_instances: results.append({ 'id': instance['id'], 'links': [ { 'href': self.app.get_endpoint_url( 'compute', req, 'v2_server', server_id=id), 'rel': 'self', } ], 'name': instance['hostname'], }) resp.status = 200 resp.body = {'servers': results}
def on_get(self, req, resp, tenant_id): client = req.env['sl_client'] cci = CCIManager(client) params = get_list_params(req) sl_instances = cci.list_instances(**params) if not isinstance(sl_instances, list): sl_instances = [sl_instances] results = [] for instance in sl_instances: results.append({ 'id': instance['id'], 'links': [{ 'href': self.app.get_endpoint_url('compute', req, 'v2_server', server_id=id), 'rel': 'self', }], 'name': instance['hostname'], }) resp.status = 200 resp.body = {'servers': results}
class SoftLayer(object): def __init__(self, config, client=None): self.config = config if client is None: client = Client(auth=self.config['auth'], endpoint_url=self.config['endpoint_url']) self.client = client self.ssh = SshKeyManager(client) self.instances = CCIManager(client) @classmethod def get_config(cls): provider_conf = client_conf.get_client_settings() if 'SL_SSH_KEY' in os.environ: provider_conf['ssh_key'] = os.environ['SL_SSH_KEY'] if not ('auth' in provider_conf and 'endpoint_url' in provider_conf): raise ConfigError("Missing digital ocean api credentials") return provider_conf def get_ssh_keys(self): keys = map(SSHKey, self.ssh.list_keys()) if 'ssh_key' in self.config: keys = [k for k in keys if k.name == self.config['ssh_key']] log.debug("Using SoftLayer ssh keys: %s" % ", ".join(k.name for k in keys)) return keys def get_instances(self): return map(Instance, self.instances.list_instances()) def get_instance(self, instance_id): return Instance(self.instances.get_instance(instance_id)) def launch_instance(self, params): return Instance(self.instances.create_instance(**params)) def terminate_instance(self, instance_id): self.instances.cancel_instance(instance_id) def wait_on(self, instance): # Wait up to 5 minutes, in 30 sec increments result = self._wait_on_instance(instance, 30, 10) if not result: raise ProviderError("Could not provision instance before timeout") return result def _wait_on_instance(self, instance, limit, delay=10): # Redo cci.wait to give user feedback in verbose mode. for count, new_instance in enumerate(itertools.repeat(instance.id)): instance = self.get_instance(new_instance) if not instance.get('activeTransaction', {}).get('id') and \ instance.get('provisionDate'): return True if count >= limit: return False if count and count % 3 == 0: log.debug("Waiting for instance:%s ip:%s waited:%ds" % (instance.name, instance.ip_address, count * delay)) time.sleep(delay)
def global_search(search): client = get_client() match_string = '<span class="text-primary">%s</span>' % search term = re.compile(search, re.IGNORECASE) results = [] if 'vm' in app.config['installed_blueprints']: cci = CCIManager(client) # if hostname_regex.match(term): for vm in cci.list_instances(): if term.match(vm['hostname']) or \ term.match(vm.get('primaryIpAddress', '')): text = '%s (%s)' % (vm['fullyQualifiedDomainName'], vm.get('primaryIpAddress', 'No Public IP')) text = term.sub(match_string, text) results.append({ 'label': '<strong>VM:</strong> ' + text, 'value': url_for('vm_module.view', vm_id=vm['id']) }) if 'servers' in app.config['installed_blueprints']: hw = HardwareManager(client) for svr in hw.list_hardware(): if term.match(svr['hostname']) or \ term.match(svr.get('primaryIpAddress', '')): text = '%s (%s)' % (svr['fullyQualifiedDomainName'], svr.get('primaryIpAddress', 'No Public IP')) text = term.sub(match_string, text) results.append({ 'label': '<strong>Server:</strong> ' + text, 'value': url_for('server_module.view', server_id=svr['id']) }) if 'sshkeys' in app.config['installed_blueprints']: ssh = SshKeyManager(client) for key in ssh.list_keys(): if term.match(key['label']) or term.match(key['fingerprint']): text = '%s (%s)' % (key['label'], key['fingerprint']) text = term.sub(match_string, text) results.append({ 'label': '<strong>SSH Key:</strong> ' + text, 'value': url_for('ssh_module.view', key_id=key['id']) }) return results
class CCITests(unittest.TestCase): """ Small class to verify the rename of CCIManager to VSManager didn't break any existing code. """ def setUp(self): self.client = FixtureClient() self.cci = CCIManager(self.client) def test_list_instances(self): mcall = call(mask=ANY, filter={}) service = self.client['Account'] list_expected_ids = [100, 104] hourly_expected_ids = [104] monthly_expected_ids = [100] results = self.cci.list_instances(hourly=True, monthly=True) service.getVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], list_expected_ids) result = self.cci.list_instances(hourly=False, monthly=False) service.getVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], list_expected_ids) results = self.cci.list_instances(hourly=False, monthly=True) service.getMonthlyVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], monthly_expected_ids) results = self.cci.list_instances(hourly=True, monthly=False) service.getHourlyVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], hourly_expected_ids)
def global_search(search): client = get_client() match_string = '<span class="text-primary">%s</span>' % search term = re.compile(search, re.IGNORECASE) results = [] if 'vm' in app.config['installed_blueprints']: cci = CCIManager(client) # if hostname_regex.match(term): for vm in cci.list_instances(): if term.match(vm['hostname']) or \ term.match(vm.get('primaryIpAddress', '')): text = '%s (%s)' % (vm['fullyQualifiedDomainName'], vm.get('primaryIpAddress', 'No Public IP')) text = term.sub(match_string, text) results.append({'label': '<strong>VM:</strong> ' + text, 'value': url_for('vm_module.view', vm_id=vm['id'])}) if 'servers' in app.config['installed_blueprints']: hw = HardwareManager(client) for svr in hw.list_hardware(): if term.match(svr['hostname']) or \ term.match(svr.get('primaryIpAddress', '')): text = '%s (%s)' % (svr['fullyQualifiedDomainName'], svr.get('primaryIpAddress', 'No Public IP')) text = term.sub(match_string, text) results.append({'label': '<strong>Server:</strong> ' + text, 'value': url_for('server_module.view', server_id=svr['id'])}) if 'sshkeys' in app.config['installed_blueprints']: ssh = SshKeyManager(client) for key in ssh.list_keys(): if term.match(key['label']) or term.match(key['fingerprint']): text = '%s (%s)' % (key['label'], key['fingerprint']) text = term.sub(match_string, text) results.append({'label': '<strong>SSH Key:</strong> ' + text, 'value': url_for('ssh_module.view', key_id=key['id'])}) return results
def on_get(self, req, resp, tenant_id=None): client = req.env['sl_client'] cci = CCIManager(client) params = get_list_params(req) sl_instances = cci.list_instances(**params) if not isinstance(sl_instances, list): sl_instances = [sl_instances] results = [] for instance in sl_instances: results.append(get_server_details_dict(self.app, req, instance)) resp.status = 200 resp.body = {'servers': results}
def execute(self, args): cci = CCIManager(self.client) tags = None if args.get('--tags'): tags = [tag.strip() for tag in args.get('--tags').split(',')] guests = cci.list_instances( hourly=args.get('--hourly'), monthly=args.get('--monthly'), hostname=args.get('--hostname'), domain=args.get('--domain'), cpus=args.get('--cpu'), memory=args.get('--memory'), datacenter=args.get('--datacenter'), nic_speed=args.get('--network'), tags=tags) t = Table([ 'id', 'datacenter', 'host', 'cores', 'memory', 'primary_ip', 'backend_ip', 'active_transaction', ]) t.sortby = args.get('--sortby') or 'host' for guest in guests: guest = NestedDict(guest) t.add_row([ guest['id'], guest['datacenter']['name'] or blank(), guest['fullyQualifiedDomainName'], guest['maxCpu'], mb_to_gb(guest['maxMemory']), guest['primaryIpAddress'] or blank(), guest['primaryBackendIpAddress'] or blank(), active_txn(guest), ]) return t
def on_get(self, req, resp, tenant_id, target_id): client = req.env['sl_client'] cci = CCIManager(client) start_time = datetime.datetime.now() + datetime.timedelta(hours=-1) usage = { 'server_usages': [], 'start': start_time.isoformat(), 'stop': datetime.datetime.now().isoformat(), 'tenant_id': target_id, 'total_hours': 0.0, 'total_local_gb_usage': 0.0, 'total_memory_mb_usage': 0.0, 'total_vcpus_usage': 0.0, } params = { 'mask': get_virtual_guest_mask(), } for instance in cci.list_instances(**params): server_dict = { 'ended_at': None, 'flavor': 'custom', 'hours': 0.0, 'instance_id': instance['id'], 'local_gb': 1, 'memory_mb': instance['maxMemory'], 'name': instance['hostname'], 'started_at': instance.get('provisionDate'), 'state': instance['status']['keyName'].lower(), 'tenant_id': target_id, 'uptime': 3600, 'vcpus': instance['maxCpu'], } usage['total_vcpus_usage'] += instance['maxCpu'] usage['total_memory_mb_usage'] += instance['maxMemory'] usage['server_usages'].append(server_dict) resp.body = {'tenant_usage': usage}
def on_get(self, req, resp, tenant_id): client = req.env["sl_client"] cci = CCIManager(client) params = get_list_params(req) sl_instances = cci.list_instances(**params) if not isinstance(sl_instances, list): sl_instances = [sl_instances] results = [] for instance in sl_instances: results.append( { "id": instance["id"], "links": [ {"href": self.app.get_endpoint_url("compute", req, "v2_server", server_id=id), "rel": "self"} ], "name": instance["hostname"], } ) resp.status = 200 resp.body = {"servers": results}
class SoftLayer(object): def __init__(self, config, client=None): self.config = config if client is None: client = Client( auth=self.config['auth'], endpoint_url=self.config['endpoint_url']) self.client = client self.ssh = SshKeyManager(client) self.instances = CCIManager(client) @classmethod def get_config(cls): provider_conf = client_conf.get_client_settings() if 'SL_SSH_KEY' in os.environ: provider_conf['ssh_key'] = os.environ['SL_SSH_KEY'] if not ('auth' in provider_conf and 'endpoint_url' in provider_conf): raise ConfigError("Missing digital ocean api credentials") return provider_conf def get_ssh_keys(self): keys = map(SSHKey, self.ssh.list_keys()) if 'ssh_key' in self.config: keys = [k for k in keys if k.name == self.config['ssh_key']] log.debug( "Using SoftLayer ssh keys: %s" % ", ".join(k.name for k in keys)) return keys def get_instances(self): return map(Instance, self.instances.list_instances()) def get_instance(self, instance_id): return Instance(self.instances.get_instance(instance_id)) def launch_instance(self, params): return Instance(self.instances.create_instance(**params)) def terminate_instance(self, instance_id): self.instances.cancel_instance(instance_id) def wait_on(self, instance): # Wait up to 5 minutes, in 30 sec increments result = self._wait_on_instance(instance, 30, 10) if not result: raise ProviderError("Could not provision instance before timeout") return result def _wait_on_instance(self, instance, limit, delay=10): # Redo cci.wait to give user feedback in verbose mode. for count, new_instance in enumerate(itertools.repeat(instance.id)): instance = self.get_instance(new_instance) if not instance.get('activeTransaction', {}).get('id') and \ instance.get('provisionDate'): return True if count >= limit: return False if count and count % 3 == 0: log.debug("Waiting for instance:%s ip:%s waited:%ds" % ( instance.name, instance.ip_address, count*delay)) time.sleep(delay)
class CCITests(unittest.TestCase): def setUp(self): self.client = FixtureClient() self.cci = CCIManager(self.client) def test_list_instances(self): mcall = call(mask=ANY, filter={}) service = self.client['Account'] list_expected_ids = [100, 104] hourly_expected_ids = [104] monthly_expected_ids = [100] results = self.cci.list_instances(hourly=True, monthly=True) service.getVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], list_expected_ids) result = self.cci.list_instances(hourly=False, monthly=False) service.getVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], list_expected_ids) results = self.cci.list_instances(hourly=False, monthly=True) service.getMonthlyVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], monthly_expected_ids) results = self.cci.list_instances(hourly=True, monthly=False) service.getHourlyVirtualGuests.assert_has_calls(mcall) for result in results: self.assertIn(result['id'], hourly_expected_ids) def test_list_instances_with_filters(self): self.cci.list_instances( hourly=True, monthly=True, tags=['tag1', 'tag2'], cpus=2, memory=1024, hostname='hostname', domain='example.com', local_disk=True, datacenter='dal05', nic_speed=100, public_ip='1.2.3.4', private_ip='4.3.2.1', ) service = self.client['Account'] service.getVirtualGuests.assert_has_calls(call( filter={ 'virtualGuests': { 'datacenter': { 'name': {'operation': '_= dal05'}}, 'domain': {'operation': '_= example.com'}, 'tagReferences': { 'tag': {'name': { 'operation': 'in', 'options': [{ 'name': 'data', 'value': ['tag1', 'tag2']}]}}}, 'maxCpu': {'operation': 2}, 'localDiskFlag': {'operation': True}, 'maxMemory': {'operation': 1024}, 'hostname': {'operation': '_= hostname'}, 'networkComponents': {'maxSpeed': {'operation': 100}}, 'primaryIpAddress': {'operation': '_= 1.2.3.4'}, 'primaryBackendIpAddress': {'operation': '_= 4.3.2.1'} }}, mask=ANY, )) def test_resolve_ids_ip(self): service = self.client['Account'] _id = self.cci._get_ids_from_ip('172.16.240.2') self.assertEqual(_id, [100, 104]) _id = self.cci._get_ids_from_ip('nope') self.assertEqual(_id, []) # Now simulate a private IP test service.getVirtualGuests.side_effect = [[], [{'id': 99}]] _id = self.cci._get_ids_from_ip('10.0.1.87') self.assertEqual(_id, [99]) def test_resolve_ids_hostname(self): _id = self.cci._get_ids_from_hostname('cci-test1') self.assertEqual(_id, [100, 104]) def test_get_instance(self): result = self.cci.get_instance(100) self.client['Virtual_Guest'].getObject.assert_called_once_with( id=100, mask=ANY) self.assertEqual(Virtual_Guest.getObject, result) def test_get_create_options(self): results = self.cci.get_create_options() self.assertEqual(Virtual_Guest.getCreateObjectOptions, results) def test_cancel_instance(self): self.cci.cancel_instance(1) self.client['Virtual_Guest'].deleteObject.assert_called_once_with(id=1) def test_reload_instance(self): post_uri = 'http://test.sftlyr.ws/test.sh' self.cci.reload_instance(1, post_uri=post_uri, ssh_keys=[1701]) service = self.client['Virtual_Guest'] f = service.reloadOperatingSystem f.assert_called_once_with('FORCE', {'customProvisionScriptUri': post_uri, 'sshKeyIds': [1701]}, id=1) @patch('SoftLayer.managers.cci.CCIManager._generate_create_dict') def test_create_verify(self, create_dict): create_dict.return_value = {'test': 1, 'verify': 1} self.cci.verify_create_instance(test=1, verify=1) create_dict.assert_called_once_with(test=1, verify=1) f = self.client['Virtual_Guest'].generateOrderTemplate f.assert_called_once_with({'test': 1, 'verify': 1}) @patch('SoftLayer.managers.cci.CCIManager._generate_create_dict') def test_create_instance(self, create_dict): create_dict.return_value = {'test': 1, 'verify': 1} self.cci.create_instance(test=1, verify=1) create_dict.assert_called_once_with(test=1, verify=1) self.client['Virtual_Guest'].createObject.assert_called_once_with( {'test': 1, 'verify': 1}) def test_generate_os_and_image(self): self.assertRaises( ValueError, self.cci._generate_create_dict, cpus=1, memory=1, hostname='test', domain='example.com', os_code=1, image_id=1, ) def test_generate_missing(self): self.assertRaises(ValueError, self.cci._generate_create_dict) self.assertRaises(ValueError, self.cci._generate_create_dict, cpus=1) def test_generate_basic(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, } self.assertEqual(data, assert_data) def test_generate_monthly(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", hourly=False, ) assert_data = { 'hourlyBillingFlag': False, 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", } self.assertEqual(data, assert_data) def test_generate_image_id(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', image_id="45", ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'blockDeviceTemplateGroup': {"globalIdentifier": "45"}, 'hourlyBillingFlag': True, } self.assertEqual(data, assert_data) def test_generate_dedicated(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", dedicated=True, ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'dedicatedAccountHostOnlyFlag': True, } self.assertEqual(data, assert_data) def test_generate_datacenter(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", datacenter="sng01", ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'datacenter': {"name": 'sng01'}, } self.assertEqual(data, assert_data) def test_generate_public_vlan(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", public_vlan=1, ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'primaryNetworkComponent': {"networkVlan": {"id": 1}}, } self.assertEqual(data, assert_data) def test_generate_private_vlan(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", private_vlan=1, ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'primaryBackendNetworkComponent': {"networkVlan": {"id": 1}}, } self.assertEqual(data, assert_data) def test_generate_userdata(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", userdata="ICANHAZCCI", ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'userData': [{'value': "ICANHAZCCI"}], } self.assertEqual(data, assert_data) def test_generate_network(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", nic_speed=9001, ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'networkComponents': [{'maxSpeed': 9001}], } self.assertEqual(data, assert_data) def test_generate_private_network_only(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", nic_speed=9001, private=True ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'privateNetworkOnlyFlag': True, 'hourlyBillingFlag': True, 'networkComponents': [{'maxSpeed': 9001}], } self.assertEqual(data, assert_data) def test_generate_post_uri(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", post_uri='https://example.com/boostrap.sh', ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'postInstallScriptUri': 'https://example.com/boostrap.sh', } self.assertEqual(data, assert_data) def test_generate_sshkey(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", ssh_keys=[543], ) assert_data = { 'startCpus': 1, 'maxMemory': 1, 'hostname': 'test', 'domain': 'example.com', 'localDiskFlag': True, 'operatingSystemReferenceCode': "STRING", 'hourlyBillingFlag': True, 'sshKeys': [{'id': 543}], } self.assertEqual(data, assert_data) def test_generate_no_disks(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING" ) self.assertEqual(data.get('blockDevices'), None) def test_generate_single_disk(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", disks=[50] ) assert_data = { 'blockDevices': [ {"device": "0", "diskImage": {"capacity": 50}}] } self.assertTrue(data.get('blockDevices')) self.assertEqual(data['blockDevices'], assert_data['blockDevices']) def test_generate_multi_disk(self): data = self.cci._generate_create_dict( cpus=1, memory=1, hostname='test', domain='example.com', os_code="STRING", disks=[50, 70, 100] ) assert_data = { 'blockDevices': [ {"device": "0", "diskImage": {"capacity": 50}}, {"device": "2", "diskImage": {"capacity": 70}}, {"device": "3", "diskImage": {"capacity": 100}}] } self.assertTrue(data.get('blockDevices')) self.assertEqual(data['blockDevices'], assert_data['blockDevices']) def test_change_port_speed_public(self): cci_id = 1 speed = 100 self.cci.change_port_speed(cci_id, True, speed) service = self.client['Virtual_Guest'] f = service.setPublicNetworkInterfaceSpeed f.assert_called_once_with(speed, id=cci_id) def test_change_port_speed_private(self): cci_id = 2 speed = 10 self.cci.change_port_speed(cci_id, False, speed) service = self.client['Virtual_Guest'] f = service.setPrivateNetworkInterfaceSpeed f.assert_called_once_with(speed, id=cci_id) def test_edit(self): # Test editing user data service = self.client['Virtual_Guest'] self.cci.edit(100, userdata='my data') service.setUserMetadata.assert_called_once_with(['my data'], id=100) # Now test a blank edit self.assertTrue(self.cci.edit, 100) # Finally, test a full edit args = { 'hostname': 'new-host', 'domain': 'new.sftlyr.ws', 'notes': 'random notes', } self.cci.edit(100, **args) service.editObject.assert_called_once_with(args, id=100)
from django.core.management.base import BaseCommand, CommandError from slsync.models import Inst class Command(BaseCommand): #empty the staging table for import Inst.objects.all().delete() from SoftLayer import Client, CCIManager from SoftLayer.CLI.helpers import (NestedDict) import os sl_api_user = os.environ['SL_API_USER'] sl_api_key = os.environ['SL_API_KEY'] client = Client(username=sl_api_user, api_key=sl_api_key) cci = CCIManager(client) guests = cci.list_instances() for guest in guests: guest = NestedDict(guest) a = Inst(inst_id=guest['id'], pub_ip=guest['primaryIpAddress'], pri_ip=guest['primaryBackendIpAddress'], fulldomainname=guest['fullyQualifiedDomainName']) a.save()
from django.core.management.base import BaseCommand, CommandError from slsync.models import Inst class Command(BaseCommand): #empty the staging table for import Inst.objects.all().delete() from SoftLayer import Client, CCIManager from SoftLayer.CLI.helpers import (NestedDict) import os sl_api_user=os.environ['SL_API_USER'] sl_api_key=os.environ['SL_API_KEY'] client = Client(username=sl_api_user, api_key=sl_api_key) cci = CCIManager(client) guests = cci.list_instances() for guest in guests: guest = NestedDict(guest) a = Inst(inst_id=guest['id'], pub_ip=guest['primaryIpAddress'], pri_ip=guest['primaryBackendIpAddress'],fulldomainname=guest['fullyQualifiedDomainName']) a.save()