Ejemplo n.º 1
0
    def resource_api_version(self, resource_id):
        """ latest non-preview api version for resource """

        namespace = ResourceIdParser.get_namespace(resource_id)
        resource_type = ResourceIdParser.get_resource_type(resource_id)

        cache_id = namespace + resource_type

        if cache_id in self._provider_cache:
            return self._provider_cache[cache_id]

        resource_client = self.client(
            'azure.mgmt.resource.ResourceManagementClient')
        provider = resource_client.providers.get(namespace)

        # The api version may be directly provided
        if not provider.resource_types and resource_client.providers.api_version:
            return resource_client.providers.api_version

        rt = next((t for t in provider.resource_types
                   if StringUtils.equal(t.resource_type, resource_type)), None)

        if rt and rt.api_versions:
            versions = [
                v for v in rt.api_versions if 'preview' not in v.lower()
            ]
            api_version = versions[0] if versions else rt.api_versions[0]
            self._provider_cache[cache_id] = api_version
            return api_version
Ejemplo n.º 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 resource.get('resourceGroup') is None:
                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
Ejemplo n.º 3
0
 def tearDown(self):
     if self.resources:
         self.assertEqual(len(self.resources), 1)
         resource = self.resources[0]
         if resource.get('resourceGroup') is None:
             self.client.management_locks.delete_at_resource_group_level(
                 resource['name'], resource['lock'])
         else:
             self.client.management_locks.delete_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'], resource['lock'])
Ejemplo n.º 4
0
 def _process_resource(self, resource):
     if resource.get('resourceGroup') is None:
         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))
Ejemplo n.º 5
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))
Ejemplo n.º 6
0
    def resource_api_version(self, resource_id):
        """ latest non-preview api version for resource """

        namespace = ResourceIdParser.get_namespace(resource_id)
        resource_type = ResourceIdParser.get_resource_type(resource_id)

        if resource_type in self._provider_cache:
            return self._provider_cache[resource_type]

        resource_client = self.client('azure.mgmt.resource.ResourceManagementClient')
        provider = resource_client.providers.get(namespace)

        rt = next((t for t in provider.resource_types if t.resource_type == str(resource_type).split('/')[-1]), None)
        if rt and rt.api_versions:
            versions = [v for v in rt.api_versions if 'preview' not in v.lower()]
            api_version = versions[0] if versions else rt.api_versions[0]
            self._provider_cache[resource_type] = api_version
            return api_version
Ejemplo n.º 7
0
    def resource_api_version(self, resource_id):
        """ latest non-preview api version for resource """

        namespace = ResourceIdParser.get_namespace(resource_id)
        resource_type = ResourceIdParser.get_resource_type(resource_id)

        if resource_type in self._provider_cache:
            return self._provider_cache[resource_type]

        resource_client = self.client('azure.mgmt.resource.ResourceManagementClient')
        provider = resource_client.providers.get(namespace)

        rt = next((t for t in provider.resource_types
            if t.resource_type == str(resource_type).split('/')[-1]), None)
        if rt and rt.api_versions:
            versions = [v for v in rt.api_versions if 'preview' not in v.lower()]
            api_version = versions[0] if versions else rt.api_versions[0]
            self._provider_cache[resource_type] = api_version
            return api_version
Ejemplo n.º 8
0
    def resource_api_version(self, resource_id):
        """ latest non-preview api version for resource """

        namespace = ResourceIdParser.get_namespace(resource_id)
        resource_type = ResourceIdParser.get_resource_type(resource_id)

        cache_id = namespace + resource_type

        if cache_id in self._provider_cache:
            return self._provider_cache[cache_id]

        resource_client = self.client('azure.mgmt.resource.ResourceManagementClient')
        provider = resource_client.providers.get(namespace)

        rt = next((t for t in provider.resource_types
            if StringUtils.equal(t.resource_type, resource_type)), None)

        if rt and rt.api_versions:
            versions = [v for v in rt.api_versions if 'preview' not in v.lower()]
            api_version = versions[0] if versions else rt.api_versions[0]
            self._provider_cache[cache_id] = api_version
            return api_version
Ejemplo n.º 9
0
 def test_get_resource_type(self):
     self.assertEqual(ResourceIdParser.get_resource_type(RESOURCE_ID), "virtualMachines")
Ejemplo n.º 10
0
    def test_get_resource_type(self):

        self.assertEqual(ResourceIdParser.get_resource_type(RESOURCE_ID), "virtualMachines")
        self.assertEqual(ResourceIdParser.get_resource_type(RESOURCE_ID_CHILD), "servers/databases")
Ejemplo n.º 11
0
 def test_get_resource_type(self):
     self.assertEqual(ResourceIdParser.get_resource_type(RESOURCE_ID), "virtualMachines")