Skip to content

Commit 58b27c6

Browse files
#627 added autoscale tag, to allow users to tag all guests in a group at once
1 parent 7980088 commit 58b27c6

File tree

9 files changed

+113
-2
lines changed

9 files changed

+113
-2
lines changed

SoftLayer/CLI/autoscale/detail.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,6 @@ def cli(env, identifier):
8787
for guest in guests:
8888
real_guest = guest.get('virtualGuest')
8989
member_table.add_row([
90-
guest.get('id'), real_guest.get('hostname'), utils.clean_time(real_guest.get('provisionDate'))
90+
real_guest.get('id'), real_guest.get('hostname'), utils.clean_time(real_guest.get('provisionDate'))
9191
])
9292
env.fout(member_table)

SoftLayer/CLI/autoscale/edit.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""Edits an Autoscale group."""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
6+
from SoftLayer.CLI import environment
7+
from SoftLayer.managers.autoscale import AutoScaleManager
8+
9+
10+
@click.command()
11+
@click.argument('identifier')
12+
# Suspend / Unsuspend
13+
# Name
14+
# Min/Max
15+
# template->userData
16+
# 'hostname', 'domain', 'startCpus', 'maxMemory', 'localDiskFlag'
17+
# 'blockDeviceTemplateGroup.globalIdentifier
18+
# blockDevices.diskImage.capacity
19+
# sshKeys.id
20+
# postInstallScriptUri
21+
@environment.pass_env
22+
def cli(env, identifier):
23+
"""Edits an Autoscale group."""
24+
25+
autoscale = AutoScaleManager(env.client)
26+
groups = autoscale.details(identifier)
27+
click.echo(groups)

SoftLayer/CLI/autoscale/tag.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""Tags all guests in an autoscale group."""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
6+
from SoftLayer.CLI import environment
7+
from SoftLayer.managers.autoscale import AutoScaleManager
8+
from SoftLayer.managers.vs import VSManager
9+
10+
11+
@click.command()
12+
@click.argument('identifier')
13+
@click.option('--tags', '-g', help="Tags to set for each guest in this group. Existing tags are overwritten. "
14+
"An empty string will remove all tags")
15+
@environment.pass_env
16+
def cli(env, identifier, tags):
17+
"""Tags all guests in an autoscale group.
18+
19+
--tags "Use, quotes, if you, want whitespace"
20+
21+
--tags Otherwise,Just,commas
22+
"""
23+
24+
autoscale = AutoScaleManager(env.client)
25+
vsmanager = VSManager(env.client)
26+
mask = "mask[id,virtualGuestId,virtualGuest[tagReferences,id,hostname]]"
27+
guests = autoscale.get_virtual_guests(identifier, mask=mask)
28+
click.echo("New Tags: {}".format(tags))
29+
for guest in guests:
30+
real_guest = guest.get('virtualGuest')
31+
click.echo("Setting tags for {}".format(real_guest.get('hostname')))
32+
vsmanager.set_tags(tags, real_guest.get('id'),)
33+
click.echo("Done")
34+
# pp(guests)

SoftLayer/CLI/routes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,8 @@
308308
('autoscale:detail', 'SoftLayer.CLI.autoscale.detail:cli'),
309309
('autoscale:scale', 'SoftLayer.CLI.autoscale.scale:cli'),
310310
('autoscale:logs', 'SoftLayer.CLI.autoscale.logs:cli'),
311+
('autoscale:tag', 'SoftLayer.CLI.autoscale.tag:cli'),
312+
('autoscale:edit', 'SoftLayer.CLI.autoscale.edit:cli')
311313
]
312314

313315
ALL_ALIASES = {

SoftLayer/fixtures/SoftLayer_Scale_Group.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@
198198
]
199199
}
200200

201+
getVirtualGuestMembers = getObject['virtualGuestMembers']
202+
201203
scale = [
202204
{
203205
"accountId": 31111,

SoftLayer/managers/autoscale.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def details(self, identifier, mask=None):
3636
https://sldn.softlayer.com/reference/services/SoftLayer_Scale_Group/getObject/
3737
"""
3838
if not mask:
39-
mask = """mask[virtualGuestMembers[id,virtualGuest[hostname,domain,provisionDate]], terminationPolicy,
39+
mask = """mask[virtualGuestMembers[id,virtualGuest[id,hostname,domain,provisionDate]], terminationPolicy,
4040
virtualGuestMemberCount, virtualGuestMemberTemplate[sshKeys],
4141
policies[id,name,createDate,cooldown,actions,triggers,scaleActions],
4242
networkVlans[networkVlanId,networkVlan[networkSpace,primaryRouter[hostname]]],
@@ -93,3 +93,13 @@ def get_logs(self, identifier, mask=None, object_filter=None):
9393
"""
9494
return self.client.call('SoftLayer_Scale_Group', 'getLogs', id=identifier, mask=mask, filter=object_filter,
9595
iter=True)
96+
97+
def get_virtual_guests(self, identifier, mask=None):
98+
"""Calls `SoftLayer_Scale_Group::getVirtualGuestMembers()`_
99+
100+
:param identifier: SoftLayer_Scale_Group Id
101+
:param mask: optional SoftLayer_Scale_Member objectMask
102+
.. _SoftLayer_Scale_Group::getVirtualGuestMembers():
103+
https://sldn.softlayer.com/reference/services/SoftLayer_Scale_Group/getVirtualGuestMembers/
104+
"""
105+
return self.client.call('SoftLayer_Scale_Group', 'getVirtualGuestMembers', id=identifier, mask=mask, iter=True)

docs/cli/autoscale.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ For making changes to the triggers or the autoscale group itself, see the `Autos
2626
:prog: autoscale logs
2727
:show-nested:
2828

29+
.. click:: SoftLayer.CLI.autoscale.tag:cli
30+
:prog: autoscale tag
31+
:show-nested:
32+
33+
.. click:: SoftLayer.CLI.autoscale.edit:cli
34+
:prog: autoscale edit
35+
:show-nested:
2936

3037

3138
.. _Autoscale Portal: https://cloud.ibm.com/classic/autoscale

tests/CLI/modules/autoscale_tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,11 @@ def test_autoscale_list(self):
4444
def test_autoscale_detail(self):
4545
result = self.run_command(['autoscale', 'detail', '12222222'])
4646
self.assert_no_fail(result)
47+
48+
def test_autoscale_tag(self):
49+
result = self.run_command(['autoscale', 'tag', '12345'])
50+
self.assert_no_fail(result)
51+
52+
def test_autoscale_edit(self):
53+
result = self.run_command(['autoscale', 'edit', '12345'])
54+
self.assert_no_fail(result)

tests/managers/autoscale_tests.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,24 @@ def test_autoscale_getLogs(self):
9393
'getLogs',
9494
identifier=11111
9595
)
96+
97+
def test_autoscale_get_virtual_guests(self):
98+
self.autoscale.get_virtual_guests(11111)
99+
100+
self.assert_called_with(
101+
'SoftLayer_Scale_Group',
102+
'getVirtualGuestMembers',
103+
identifier=11111,
104+
mask=None
105+
)
106+
107+
def test_autoscale_get_virtual_guests_mask(self):
108+
test_mask = "mask[id]"
109+
self.autoscale.get_virtual_guests(11111, mask=test_mask)
110+
111+
self.assert_called_with(
112+
'SoftLayer_Scale_Group',
113+
'getVirtualGuestMembers',
114+
identifier=11111,
115+
mask=test_mask
116+
)

0 commit comments

Comments
 (0)