Skip to content

Commit

Permalink
Azure. Example of related resource filter
Browse files Browse the repository at this point in the history
  • Loading branch information
anastasiia-zolochevska committed Apr 23, 2018
1 parent dd13ac5 commit 7e92227
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
25 changes: 24 additions & 1 deletion tools/c7n_azure/c7n_azure/query.py
Expand Up @@ -27,6 +27,14 @@ class ResourceQuery(object):
def __init__(self, session_factory):
self.session_factory = session_factory

@staticmethod
def resolve(resource_type):
if not isinstance(resource_type, type):
raise ValueError(resource_type)
else:
m = resource_type
return m

def filter(self, resource_manager, **params):
m = resource_manager.resource_type
enum_op, list_op = m.enum_spec
Expand Down Expand Up @@ -92,6 +100,10 @@ def get_client(self, service=None):
def get_cache_key(self, query):
return {'source_type': self.source_type, 'query': query}

@classmethod
def get_model(cls):
return ResourceQuery.resolve(cls.resource_type)

@property
def source_type(self):
return self.data.get('source', 'describe-azure')
Expand All @@ -107,4 +119,15 @@ def augment(self, resources):
for resource in resources:
if 'id' in resource:
resource['resourceGroup'] = resource['id'].split('/')[4]
return resources
return resources

def get_resources(self, resource_ids):
result = []
for resource_id in resource_ids:
resource_group = resource_id.split('/')[4]
name = resource_id.split('/')[8]
# Most of Azure resources can by queried by resource group and name.
# For those resources, which take different parameters for function get, method should be overwritten
r = self.get_client().public_ip_addresses.get(resource_group, name)
result.append(r.serialize(True))
return result
22 changes: 21 additions & 1 deletion tools/c7n_azure/c7n_azure/resources/load_balancer.py
Expand Up @@ -14,7 +14,8 @@

from c7n_azure.query import QueryResourceManager
from c7n_azure.provider import resources

from c7n.filters.core import ValueFilter, type_schema
from c7n.filters.related import RelatedResourceFilter

@resources.register('loadbalancer')
class LoadBalancer(QueryResourceManager):
Expand All @@ -24,9 +25,28 @@ class resource_type(object):
client = 'NetworkManagementClient'
enum_spec = ('load_balancers', 'list_all')
id = 'id'
type = 'loadbalancer'
name = 'name'
default_report_fields = (
'name',
'location',
'resourceGroup'
)

@LoadBalancer.filter_registry.register('frontendip')
class FrontEndIp(RelatedResourceFilter):
# policies:
# - name: test - loadbalancer
# resource: azure.loadbalancer
# filters:
# - type: frontendip
# key: properties.publicIPAddressVersion
# op: eq
# value_type: normalize
# value: "ipv4"

schema = type_schema('frontendip', rinherit=ValueFilter.schema)

RelatedResource = "c7n_azure.resources.public_ip.PublicIPAddress"
RelatedIdsExpression = "properties.frontendIPConfigurations[0].properties.publicIPAddress.id"

1 change: 1 addition & 0 deletions tools/c7n_azure/c7n_azure/resources/public_ip.py
Expand Up @@ -24,6 +24,7 @@ class resource_type(object):
client = 'NetworkManagementClient'
enum_spec = ('public_ip_addresses', 'list_all')
id = 'id'
type = 'publicip'
name = 'name'
default_report_fields = (
'name',
Expand Down

0 comments on commit 7e92227

Please sign in to comment.