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
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
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'])
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))
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))
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
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
def test_get_resource_type(self): self.assertEqual(ResourceIdParser.get_resource_type(RESOURCE_ID), "virtualMachines")
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")