예제 #1
0
    def update_resource_tags(tag_action, resource, tags):
        client = tag_action.session.client(
            'azure.mgmt.resource.ResourceManagementClient')

        # resource group type
        if is_resource_group(resource):
            params_patch = ResourceGroupPatchable(tags=tags)
            client.resource_groups.update(
                resource['name'],
                params_patch,
            )
        # other Azure resources
        else:
            # deserialize the original object
            az_resource = GenericResource.deserialize(resource)

            if not tag_action.manager.tag_operation_enabled(az_resource.type):
                raise NotImplementedError(
                    'Cannot tag resource with type {0}'.format(
                        az_resource.type))
            api_version = tag_action.session.resource_api_version(
                resource['id'])

            # create a PATCH object with only updates to tags
            tags_patch = GenericResource(tags=tags)

            client.resources.update_by_id(resource['id'], api_version,
                                          tags_patch)
예제 #2
0
    def _process_resource_set(self, resources, event=None):
        client = self.manager.get_client(
            'azure.mgmt.resource.locks.ManagementLockClient')
        result = []
        for resource in resources:
            if is_resource_group(resource):
                locks = [
                    r.serialize(True) for r in client.management_locks.
                    list_at_resource_group_level(resource['name'])
                ]
            else:
                locks = [
                    r.serialize(True)
                    for r in client.management_locks.list_at_resource_level(
                        resource['resourceGroup'],
                        ResourceIdParser.get_namespace(resource['id']),
                        ResourceIdParser.get_resource_name(
                            resource.get('c7n:parent-id')) or '',
                        ResourceIdParser.get_resource_type(resource['id']),
                        resource['name'])
                ]

            if StringUtils.equal('Absent', self.lock_type) and not locks:
                result.append(resource)
            else:
                for lock in locks:
                    if StringUtils.equal('Any', self.lock_type) or \
                            StringUtils.equal(lock['properties']['level'], self.lock_type):
                        result.append(resource)
                        break

        return result
예제 #3
0
 def _process_resource(self, resource):
     if is_resource_group(resource):
         self.client.resource_groups.delete(resource['name'])
     else:
         self.client.resources.delete_by_id(
             resource['id'],
             self.session.resource_api_version(resource['id']))
예제 #4
0
    def _process_resource(self, resource):
        lock_name = self._get_lock_name(resource)
        lock_notes = self._get_lock_notes(resource)

        if is_resource_group(resource):
            self.client.management_locks.create_or_update_at_resource_group_level(
                resource['name'], lock_name,
                ManagementLockObject(level=self.lock_type, notes=lock_notes))
        else:
            self.client.management_locks.create_or_update_by_scope(
                resource['id'], lock_name,
                ManagementLockObject(level=self.lock_type, notes=lock_notes))
예제 #5
0
 def _process_resource(self, resource):
     if is_resource_group(resource):
         self.client.management_locks.create_or_update_at_resource_group_level(
             resource['name'],
             'lock_' + resource['name'] + '_' + self.lock_type,
             ManagementLockObject(level=self.lock_type))
     else:
         self.client.management_locks.create_or_update_at_resource_level(
             resource['resourceGroup'],
             ResourceIdParser.get_namespace(resource['id']),
             ResourceIdParser.get_resource_name(
                 resource.get('c7n:parent-id')) or '',
             ResourceIdParser.get_resource_type(resource['id']),
             resource['name'],
             'custodian_lock_' + resource['name'] + '_' + self.lock_type,
             ManagementLockObject(level=self.lock_type))
예제 #6
0
    def _process_resource(self, resource):
        lock_name = self._get_lock_name(resource)
        lock_notes = self._get_lock_notes(resource)

        if is_resource_group(resource):
            self.client.management_locks.create_or_update_at_resource_group_level(
                resource['name'], lock_name,
                ManagementLockObject(level=self.lock_type, notes=lock_notes))
        else:
            self.client.management_locks.create_or_update_at_resource_level(
                resource['resourceGroup'],
                ResourceIdParser.get_namespace(resource['id']),
                ResourceIdParser.get_resource_name(
                    resource.get('c7n:parent-id')) or '',
                ResourceIdParser.get_resource_type(resource['id']),
                resource['name'], lock_name,
                ManagementLockObject(level=self.lock_type, notes=lock_notes))
예제 #7
0
 def test_is_resource_group(self):
     self.assertTrue(is_resource_group({'type': 'resourceGroups'}))
     self.assertFalse(is_resource_group({'type': 'virtualMachines'}))