예제 #1
0
    def Run(self, args):
        service = tags.TagValuesService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagValues/') == 0:
            tag_value = args.RESOURCE_NAME
        else:
            tag_value = tag_utils.GetTagValueFromNamespacedName(
                args.RESOURCE_NAME).name

        get_iam_policy_req = (
            messages.CloudresourcemanagerTagValuesGetIamPolicyRequest(
                resource=tag_value))
        policy = service.GetIamPolicy(get_iam_policy_req)
        condition = iam_util.ValidateAndExtractConditionMutexRole(args)
        iam_util.AddBindingToIamPolicyWithCondition(messages.Binding,
                                                    messages.Expr, policy,
                                                    args.member, args.role,
                                                    condition)

        set_iam_policy_request = messages.SetIamPolicyRequest(policy=policy)
        request = messages.CloudresourcemanagerTagValuesSetIamPolicyRequest(
            resource=tag_value, setIamPolicyRequest=set_iam_policy_request)
        result = service.SetIamPolicy(request)
        iam_util.LogSetIamPolicy(tag_value, 'TagValue')
        return result
예제 #2
0
    def Run(self, args):
        messages = tags.TagMessages()

        if args.tag_value.find("tagValues/") == 0:
            tag_value = args.tag_value
        else:
            tag_value = tag_utils.GetTagValueFromNamespacedName(
                args.tag_value).name

        binding_name = "/".join(
            ["tagBindings",
             quote(args.parent, safe=""), tag_value])
        del_req = messages.CloudresourcemanagerTagBindingsDeleteRequest(
            name=binding_name)

        location = args.location if args.IsSpecified("location") else None
        with endpoints.CrmEndpointOverrides(location):
            service = tags.TagBindingsService()
            op = service.Delete(del_req)

            if args.async_ or op.done:
                return op
            else:
                return operations.WaitForOperation(
                    op,
                    "Waiting for TagBinding for resource [{}] and tag value [{}] to be "
                    "deleted with [{}]".format(args.parent, args.tag_value,
                                               op.name),
                    service=service)
예제 #3
0
    def Run(self, args):
        messages = tags.TagMessages()

        if args.tag_value.find("tagValues/") == 0:
            tag_value = args.tag_value
        else:
            tag_value = tag_utils.GetTagValueFromNamespacedName(
                args.tag_value).name

        tag_binding = messages.TagBinding(parent=args.parent,
                                          tagValue=tag_value)

        create_req = messages.CloudresourcemanagerTagBindingsCreateRequest(
            tagBinding=tag_binding)

        location = args.location if args.IsSpecified("location") else None
        with endpoints.CrmEndpointOverrides(location):
            service = tags.TagBindingsService()
            op = service.Create(create_req)

            if args.async_ or op.done:
                return op
            else:
                return operations.WaitForOperation(
                    op,
                    "Waiting for TagBinding for parent [{}] and tag value [{}] to be "
                    "created with [{}]".format(args.parent, args.tag_value,
                                               op.name),
                    service=service)
예제 #4
0
  def Run(self, args):
    service = tags.TagKeysService()
    messages = tags.TagMessages()

    tag_parent = args.parent

    list_request = messages.CloudresourcemanagerTagKeysListRequest(
        parent=tag_parent)
    response = service.List(list_request)
    return response.tagKeys
예제 #5
0
    def Run(self, args):
        service = tags.TagKeysService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagKeys/') == 0:
            tag_key = args.RESOURCE_NAME
        else:
            tag_key = tag_utils.GetTagKeyFromNamespacedName(
                args.RESOURCE_NAME).name

        get_request = messages.CloudresourcemanagerTagKeysGetRequest(
            name=tag_key)
        return service.Get(get_request)
예제 #6
0
    def Run(self, args):
        service = tags.TagValuesService()
        messages = tags.TagMessages()

        if args.parent.find("tagKeys/") == 0:
            tag_key = args.parent
        else:
            tag_key = tag_utils.GetTagKeyFromNamespacedName(args.parent).name

        list_request = messages.CloudresourcemanagerTagValuesListRequest(
            parent=tag_key)
        response = service.List(list_request)
        return response.tagValues
예제 #7
0
    def Run(self, args):
        service = tags.TagValuesService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagValues/') == 0:
            tag_value = args.RESOURCE_NAME
        else:
            tag_value = tag_utils.GetTagValueFromNamespacedName(
                args.RESOURCE_NAME).name

        request = messages.CloudresourcemanagerTagValuesGetIamPolicyRequest(
            resource=tag_value)
        return service.GetIamPolicy(request)
예제 #8
0
    def Run(self, args):
        service = tags.TagKeysService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagKeys/') == 0:
            tag_key = args.RESOURCE_NAME
        else:
            tag_key = tag_utils.GetTagKeyFromNamespacedName(
                args.RESOURCE_NAME).name

        policy = iam_util.ParsePolicyFile(args.POLICY_FILE, messages.Policy)
        policy.version = iam_util.MAX_LIBRARY_IAM_SUPPORTED_VERSION

        set_iam_policy_request = messages.SetIamPolicyRequest(policy=policy)

        request = messages.CloudresourcemanagerTagKeysSetIamPolicyRequest(
            resource=tag_key, setIamPolicyRequest=set_iam_policy_request)
        result = service.SetIamPolicy(request)
        iam_util.LogSetIamPolicy(tag_key, 'TagKey')
        return result
예제 #9
0
    def Run(self, args):
        service = tags.TagKeysService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagKeys/') == 0:
            tag_key = args.RESOURCE_NAME
        else:
            tag_key = tag_utils.GetTagKeyFromNamespacedName(
                args.RESOURCE_NAME).name

        delete_request = messages.CloudresourcemanagerTagKeysDeleteRequest(
            name=tag_key)

        op = service.Delete(delete_request)

        if args.async_:
            return op

        return operations.WaitForOperation(
            op,
            'Waiting for TagKey [{}] to be deleted'.format(tag_key),
            service=service)
예제 #10
0
    def Run(self, args):
        service = tags.TagKeysService()
        messages = tags.TagMessages()

        short_name = args.short_name
        tag_parent = args.parent
        description = args.description

        tag_key = messages.TagKey(shortName=short_name,
                                  parent=tag_parent,
                                  description=description)
        create_req = messages.CloudresourcemanagerTagKeysCreateRequest(
            tagKey=tag_key)
        op = service.Create(create_req)

        if args.async_:
            return op

        return operations.WaitForOperation(
            op,
            "Waiting for TagKey [{}] to be created".format(short_name),
            service=service)
예제 #11
0
    def Run(self, args):
        service = tags.TagKeysService()
        messages = tags.TagMessages()

        if args.RESOURCE_NAME.find('tagKeys/') == 0:
            tag_key = args.RESOURCE_NAME
        else:
            tag_key = tag_utils.GetTagKeyFromNamespacedName(
                args.RESOURCE_NAME).name

        get_iam_policy_req = (
            messages.CloudresourcemanagerTagKeysGetIamPolicyRequest(
                resource=tag_key))
        policy = service.GetIamPolicy(get_iam_policy_req)
        condition = iam_util.ValidateAndExtractConditionMutexRole(args)
        iam_util.RemoveBindingFromIamPolicyWithCondition(
            policy, args.member, args.role, condition, args.all)

        set_iam_policy_request = messages.SetIamPolicyRequest(policy=policy)
        request = messages.CloudresourcemanagerTagKeysSetIamPolicyRequest(
            resource=tag_key, setIamPolicyRequest=set_iam_policy_request)
        result = service.SetIamPolicy(request)
        iam_util.LogSetIamPolicy(tag_key, 'TagKey')
        return result
예제 #12
0
  def Run(self, args):
    service = tags.TagValuesService()
    messages = tags.TagMessages()

    if args.RESOURCE_NAME.find('tagValues/') == 0:
      tag_value = tag_utils.GetResourceFromNamespacedName(
          args.RESOURCE_NAME, 'tagValues')
    else:
      tag_value = tag_utils.GetTagValueFromNamespacedName(
          args.RESOURCE_NAME)

    tag_value.description = args.description

    update_request = messages.CloudresourcemanagerTagValuesPatchRequest(
        name=tag_value.name, tagValue=tag_value, updateMask='description')
    op = service.Patch(update_request)

    if args.async_:
      return op

    return operations.WaitForOperation(
        op,
        'Waiting for TagValue [{}] to be updated'.format(tag_value.name),
        service=service)
예제 #13
0
"""Utilities for defining Tag resource manager arguments on a parser."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from apitools.base.py.exceptions import HttpForbiddenError
from googlecloudsdk.api_lib.resource_manager import tags
from googlecloudsdk.api_lib.resource_manager.exceptions import ResourceManagerError


class InvalidInputError(ResourceManagerError):
  """Exception for invalid input."""

GetResourceFns = {
    'tagKeys': tags.TagMessages().CloudresourcemanagerTagKeysGetRequest,
    'tagValues': tags.TagMessages().CloudresourcemanagerTagValuesGetRequest
}

ListResourceFns = {
    'tagKeys': tags.TagMessages().CloudresourcemanagerTagKeysListRequest,
    'tagValues': tags.TagMessages().CloudresourcemanagerTagValuesListRequest
}

ServiceFns = {
    'tagKeys': tags.TagKeysService,
    'tagValues': tags.TagValuesService,
    'tagBindings': tags.TagBindingsService
}