Skip to content

Commit 793e375

Browse files
#1230 added tag cleanup command
1 parent b4cff42 commit 793e375

File tree

6 files changed

+60
-24
lines changed

6 files changed

+60
-24
lines changed

SoftLayer/CLI/core.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ def cli(env,
158158

159159
logger.setLevel(DEBUG_LOGGING_MAP.get(verbose, logging.DEBUG))
160160
env.vars['_timings'] = SoftLayer.DebugTransport(env.client.transport)
161+
env.vars['verbose'] = verbose
161162
env.client.transport = env.vars['_timings']
162163

163164

SoftLayer/CLI/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@
291291
('subnet:lookup', 'SoftLayer.CLI.subnet.lookup:cli'),
292292

293293
('tags', 'SoftLayer.CLI.tags'),
294+
('tags:cleanup', 'SoftLayer.CLI.tags.cleanup:cli'),
294295
('tags:list', 'SoftLayer.CLI.tags.list:cli'),
295296
('tags:set', 'SoftLayer.CLI.tags.set:cli'),
296297
('tags:details', 'SoftLayer.CLI.tags.details:cli'),

SoftLayer/CLI/tags/cleanup.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""Removes unused Tags"""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
6+
from SoftLayer.CLI import environment
7+
from SoftLayer.CLI import formatting
8+
from SoftLayer.exceptions import SoftLayerAPIError
9+
from SoftLayer.managers.tags import TagManager
10+
from SoftLayer import utils
11+
12+
from pprint import pprint as pp
13+
# pylint: disable=unnecessary-lambda
14+
15+
16+
@click.command()
17+
@click.option('--dry-run', '-d', is_flag=True, default=False,
18+
help="Don't delete, just show what will be deleted.")
19+
@environment.pass_env
20+
def cli(env, dry_run):
21+
"""Removes all empty tags."""
22+
23+
tag_manager = TagManager(env.client)
24+
empty_tags = tag_manager.get_unattached_tags()
25+
26+
for tag in empty_tags:
27+
if dry_run:
28+
click.secho("(Dry Run) Removing {}".format(tag.get('name')), fg='yellow')
29+
else:
30+
result = tag_manager.delete_tag(tag.get('name'))
31+
color = 'green' if result else 'red'
32+
click.secho("Removing {}".format(tag.get('name')), fg=color)
33+

SoftLayer/CLI/tags/list.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,11 @@ def simple_table(tag_manager):
6666

6767
def get_resource_name(tag_manager, resource_id, tag_type):
6868
"""Returns a string to identify a resource"""
69+
name = None
6970
try:
7071
resource = tag_manager.reference_lookup(resource_id, tag_type)
71-
if tag_type == 'NETWORK_VLAN_FIREWALL':
72-
resource_row = resource.get('primaryIpAddress')
73-
else:
74-
resource_row = resource.get('fullyQualifiedDomainName')
72+
name = tag_manager.get_resource_name(resource, tag_type)
7573
except SoftLayerAPIError as exception:
76-
resource_row = "{}".format(exception.reason)
77-
return resource_row
74+
name = "{}".format(exception.reason)
75+
return name
7876

SoftLayer/CLI/tags/taggable.py

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,6 @@ def cli(env):
2323
for resource in resources:
2424
table.add_row([
2525
resource['resource']['id'],
26-
get_resource_name(resource['resource'], tag_type['keyName'])
26+
tag_manager.get_resource_name(resource['resource'], tag_type['keyName'])
2727
])
2828
env.fout(table)
29-
30-
31-
def get_resource_name(resource, tag_type):
32-
"""Returns a string that names a resource"""
33-
if tag_type == 'NETWORK_VLAN_FIREWALL':
34-
return resource.get('primaryIpAddress')
35-
elif tag_type == 'NETWORK_VLAN':
36-
return "{} ({})".format(resource.get('vlanNumber'), resource.get('name'))
37-
elif tag_type == 'IMAGE_TEMPLATE' or tag_type == 'APPLICATION_DELIVERY_CONTROLLER':
38-
return resource.get('name')
39-
elif tag_type == 'TICKET':
40-
return resource.get('subjet')
41-
elif tag_type == 'NETWORK_SUBNET':
42-
return resource.get('networkIdentifier')
43-
else:
44-
return resource.get('fullyQualifiedDomainName')

SoftLayer/managers/tags.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ def reference_lookup(self, resource_table_id, tag_type):
9999
service = self.type_to_service(tag_type)
100100
if service is None:
101101
raise SoftLayerAPIError(404, "Unable to lookup {} types".format(tag_type))
102-
# return {}
103102
return self.client.call(service, 'getObject', id=resource_table_id)
104103

105104
def delete_tag(self, name):
@@ -182,6 +181,26 @@ def type_to_service(tag_type):
182181
service = re.sub(r'(^[a-z]|\_[a-z])', lambda x: x.group().upper(), tag_type)
183182
return service
184183

184+
@staticmethod
185+
def get_resource_name(resource, tag_type):
186+
"""Returns a string that names a resource
187+
188+
:param dict resource: A SoftLayer datatype for the given tag_type
189+
:param string tag_type: Key name for the tag_type
190+
"""
191+
if tag_type == 'NETWORK_VLAN_FIREWALL':
192+
return resource.get('primaryIpAddress')
193+
elif tag_type == 'NETWORK_VLAN':
194+
return "{} ({})".format(resource.get('vlanNumber'), resource.get('name'))
195+
elif tag_type == 'IMAGE_TEMPLATE' or tag_type == 'APPLICATION_DELIVERY_CONTROLLER':
196+
return resource.get('name')
197+
elif tag_type == 'TICKET':
198+
return resource.get('subjet')
199+
elif tag_type == 'NETWORK_SUBNET':
200+
return resource.get('networkIdentifier')
201+
else:
202+
return resource.get('fullyQualifiedDomainName')
203+
185204
# @staticmethod
186205
# def type_to_datatype(tag_type):
187206
# """Returns the SoftLayer datatye for the given tag_type"""

0 commit comments

Comments
 (0)