# Copyright 2023 Canonical Ltd.
# Licensed under the Apache V2, see LICENCE file for details.
# TODO: Tags should be a proper class, so that we can distinguish whether
# something is already a tag or not. For example, 'user-foo' is a valid
# username, but is ambiguous with the already-tagged username 'foo'.
def _prefix(prefix, s):
if s and not s.startswith(prefix):
return '{}{}'.format(prefix, s)
return s
[docs]def untag(prefix, s):
if s and s.startswith(prefix):
return s[len(prefix):]
return s
[docs]def cloud(cloud_name):
return _prefix('cloud-', cloud_name)
[docs]def controller(controller_uuid):
return _prefix('controller-', controller_uuid)
[docs]def credential(cloud, user, credential_name):
credential_string = '{}_{}_{}'.format(cloud, user, credential_name)
return _prefix('cloudcred-', credential_string)
[docs]def model(model_uuid):
return _prefix('model-', model_uuid)
[docs]def machine(machine_id):
return _prefix('machine-', machine_id)
[docs]def user(username):
return _prefix('user-', username)
[docs]def application(app_name):
return _prefix('application-', app_name)
[docs]def storage(app_name):
return _prefix('storage-', app_name)
[docs]def unit(unit_name):
return _prefix('unit-', unit_name.replace('/', '-'))
[docs]def action(action_uuid):
return _prefix('action-', action_uuid)
[docs]def space(space_name):
return _prefix('space-', space_name)