def cli(env, identifier, scale_up, scale_by, amount): """Scales an Autoscale group. Bypasses a scale group's cooldown period.""" autoscale = AutoScaleManager(env.client) # Scale By, and go down, need to use negative amount if not scale_up and scale_by: amount = amount * -1 result = [] if scale_by: click.secho("Scaling group {} by {}".format(identifier, amount), fg='green') result = autoscale.scale(identifier, amount) else: click.secho("Scaling group {} to {}".format(identifier, amount), fg='green') result = autoscale.scale_to(identifier, amount) try: # Check if the first guest has a cancellation date, assume we are removing guests if it is. cancel_date = result[0]['virtualGuest']['billingItem']['cancellationDate'] or False except (IndexError, KeyError, TypeError): cancel_date = False if cancel_date: member_table = formatting.Table(['Id', 'Hostname', 'Created'], title="Cancelled Guests") else: member_table = formatting.Table(['Id', 'Hostname', 'Created'], title="Added Guests") for guest in result: real_guest = guest.get('virtualGuest') member_table.add_row([ guest.get('id'), real_guest.get('hostname'), utils.clean_time(real_guest.get('createDate')) ]) env.fout(member_table)
class AutoScaleTests(testing.TestCase): def set_up(self): self.autoscale = AutoScaleManager(self.client) def test_autoscale_list(self): self.autoscale.list() self.assert_called_with('SoftLayer_Account', 'getScaleGroups') def test_autoscale_list_with_mask(self): self.autoscale.list(mask='mask[status,virtualGuestMemberCount]') self.assert_called_with('SoftLayer_Account', 'getScaleGroups') def test_autoscale_details(self): self.autoscale.details(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getObject', identifier=11111) def test_autoscale_details_with_mask(self): self.autoscale.details( 11111, mask= 'mask[virtualGuestMembers[id,virtualGuest[hostname,domain,provisionDate]], ' 'terminationPolicy,virtualGuestMemberCount]') self.assert_called_with('SoftLayer_Scale_Group', 'getObject', identifier=11111) def test_autoscale_policy(self): self.autoscale.get_policy(11111) self.assert_called_with('SoftLayer_Scale_Policy', 'getObject', identifier=11111) def test_autoscale_policy_with_mask(self): self.autoscale.get_policy( 11111, mask='mask[cooldown, createDate, id, name, actions, triggers[type]]' ) self.assert_called_with('SoftLayer_Scale_Policy', 'getObject', identifier=11111) def test_autoscale_scale(self): self.autoscale.scale(11111, 3) self.assert_called_with('SoftLayer_Scale_Group', 'scale', identifier=11111) def test_autoscale_scaleTo(self): self.autoscale.scale_to(11111, 3) self.assert_called_with('SoftLayer_Scale_Group', 'scaleTo', identifier=11111) def test_autoscale_getLogs(self): self.autoscale.get_logs(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getLogs', identifier=11111) def test_autoscale_get_virtual_guests(self): self.autoscale.get_virtual_guests(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getVirtualGuestMembers', identifier=11111, mask=None) def test_autoscale_get_virtual_guests_mask(self): test_mask = "mask[id]" self.autoscale.get_virtual_guests(11111, mask=test_mask) self.assert_called_with('SoftLayer_Scale_Group', 'getVirtualGuestMembers', identifier=11111, mask=test_mask) def test_edit_object(self): template = {'name': 'test'} self.autoscale.edit(12345, template) self.assert_called_with('SoftLayer_Scale_Group', 'editObject', args=(template, ), identifier=12345)
class AutoScaleTests(testing.TestCase): def set_up(self): self.autoscale = AutoScaleManager(self.client) def test_autoscale_list(self): self.autoscale.list() self.assert_called_with('SoftLayer_Account', 'getScaleGroups') def test_autoscale_list_with_mask(self): self.autoscale.list(mask='mask[status,virtualGuestMemberCount]') self.assert_called_with('SoftLayer_Account', 'getScaleGroups') def test_autoscale_details(self): self.autoscale.details(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getObject', identifier=11111) def test_autoscale_details_with_mask(self): self.autoscale.details( 11111, mask= 'mask[virtualGuestMembers[id,virtualGuest[hostname,domain,provisionDate]], ' 'terminationPolicy,virtualGuestMemberCount]') self.assert_called_with('SoftLayer_Scale_Group', 'getObject', identifier=11111) def test_autoscale_policy(self): self.autoscale.get_policy(11111) self.assert_called_with('SoftLayer_Scale_Policy', 'getObject', identifier=11111) def test_autoscale_policy_with_mask(self): self.autoscale.get_policy( 11111, mask='mask[cooldown, createDate, id, name, actions, triggers[type]]' ) self.assert_called_with('SoftLayer_Scale_Policy', 'getObject', identifier=11111) def test_autoscale_scale(self): self.autoscale.scale(11111, 3) self.assert_called_with('SoftLayer_Scale_Group', 'scale', identifier=11111) def test_autoscale_scaleTo(self): self.autoscale.scale_to(11111, 3) self.assert_called_with('SoftLayer_Scale_Group', 'scaleTo', identifier=11111) def test_autoscale_getLogs(self): self.autoscale.get_logs(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getLogs', identifier=11111) def test_autoscale_get_virtual_guests(self): self.autoscale.get_virtual_guests(11111) self.assert_called_with('SoftLayer_Scale_Group', 'getVirtualGuestMembers', identifier=11111, mask=None) def test_autoscale_get_virtual_guests_mask(self): test_mask = "mask[id]" self.autoscale.get_virtual_guests(11111, mask=test_mask) self.assert_called_with('SoftLayer_Scale_Group', 'getVirtualGuestMembers', identifier=11111, mask=test_mask) def test_edit_object(self): template = {'name': 'test'} self.autoscale.edit(12345, template) self.assert_called_with('SoftLayer_Scale_Group', 'editObject', args=(template, ), identifier=12345) def test_create_object(self): template = { 'name': 'test', 'cooldown': 3600, 'maximumMemberCount': 5, 'minimumMemberCount': 1, 'regionalGroupId': 4568, 'suspendedFlag': False, 'balancedTerminationFlag': False, 'virtualGuestMemberTemplate': { 'domain': 'test.com', 'hostname': 'testvs', 'operatingSystemReferenceCode': 'CENTOS_7_64', 'maxMemory': 2048, 'datacenter': { 'id': 265592 }, 'startCpus': 2, 'blockDevices': [{ 'diskImage': { 'capacity': '100' }, 'device': 0 }], 'hourlyBillingFlag': True, 'networkComponents': [{ 'maxSpeed': 100 }], 'localDiskFlag': True, 'typeId': 1, 'userData': [{ 'value': 'the userData' }] }, 'virtualGuestMemberCount': 0, 'terminationPolicyId': '2', } self.autoscale.create(template) self.assert_called_with('SoftLayer_Scale_Group', 'createObject', args=(template, )) def test_delete_object(self): self.autoscale.delete(12345) self.assert_called_with('SoftLayer_Scale_Group', 'forceDeleteObject')