def testCamelCase(self): d = {'zebraMoon': [{'instanceId': 123}, 'moon'], 'color': {'yellow': 1, 'green': 2}} self.assertEqual( utils.camelResource(d), {'ZebraMoon': [{'InstanceId': 123}, 'moon'], 'Color': {'Yellow': 1, 'Green': 2}})
def test_camel_nested(self): nest ={'description': 'default VPC security group', 'groupId': 'sg-6c7fa917', 'groupName': 'default', 'ipPermissions': [{'ipProtocol': '-1', 'ipRanges': ['108.56.181.242/32'], 'ipv4Ranges': [{'cidrIp': '108.56.181.242/32'}], 'ipv6Ranges': [], 'prefixListIds': [], 'userIdGroupPairs': [{'groupId': 'sg-6c7fa917', 'userId': '644160558196'}]}], 'ipPermissionsEgress': [{'ipProtocol': '-1', 'ipRanges': ['0.0.0.0/0'], 'ipv4Ranges': [{'cidrIp': '0.0.0.0/0'}], 'ipv6Ranges': [], 'prefixListIds': [], 'userIdGroupPairs': []}], 'ownerId': '644160558196', 'tags': [{'key': 'Name', 'value': ''}, {'key': 'c7n-test-tag', 'value': 'c7n-test-val'}], 'vpcId': 'vpc-d2d616b5'} self.assertEqual( utils.camelResource(nest)['IpPermissions'], [{u'IpProtocol': u'-1', u'IpRanges': [u'108.56.181.242/32'], u'Ipv4Ranges': [{u'CidrIp': u'108.56.181.242/32'}], u'Ipv6Ranges': [], u'PrefixListIds': [], u'UserIdGroupPairs': [{u'GroupId': u'sg-6c7fa917', u'UserId': u'644160558196'}]}])
def test_camel_nested(self): nest ={'description': 'default VPC security group', 'groupId': 'sg-6c7fa917', 'groupName': 'default', 'ipPermissions': [{'ipProtocol': '-1', 'ipRanges': ['108.56.181.242/32'], 'ipv4Ranges': [{'cidrIp': '108.56.181.242/32'}], 'ipv6Ranges': [], 'prefixListIds': [], 'userIdGroupPairs': [{'groupId': 'sg-6c7fa917', 'userId': '644160558196'}]}], 'ipPermissionsEgress': [{'ipProtocol': '-1', 'ipRanges': ['0.0.0.0/0'], 'ipv4Ranges': [{'cidrIp': '0.0.0.0/0'}], 'ipv6Ranges': [], 'prefixListIds': [], 'userIdGroupPairs': []}], 'ownerId': '644160558196', 'tags': [{'key': 'Name', 'value': ''}, {'key': 'c7n-test-tag', 'value': 'c7n-test-val'}], 'vpcId': 'vpc-d2d616b5'} self.assertEqual( utils.camelResource(nest)['IpPermissions'], [{u'IpProtocol': u'-1', u'IpRanges': [u'108.56.181.242/32'], u'Ipv4Ranges': [{u'CidrIp': u'108.56.181.242/32'}], u'Ipv6Ranges': [], u'PrefixListIds': [], u'UserIdGroupPairs': [{u'GroupId': u'sg-6c7fa917', u'UserId': u'644160558196'}]}])
def load_resource(self, item): item_config = self._load_item_config(item) resource = camelResource(item_config, implicitDate=True, implicitTitle=self.titleCase) self._load_resource_tags(resource, item) return resource
def load_resource(self, item): if isinstance(item['configuration'], str): item_config = json.loads(item['configuration']) else: item_config = item['configuration'] resource = camelResource(item_config, implicitDate=True) # normalized tag loading across the many variants of config's inconsistencies. if ((item.get('tags') or item['supplementaryConfiguration'].get('Tags')) and 'Tags' not in resource): if item.get('tags'): resource['Tags'] = [{ u'Key': k, u'Value': v } for k, v in item['tags'].items()] else: # config has a bit more variation on tags (serialized json, list, dict, etc) stags = item['supplementaryConfiguration']['Tags'] if isinstance(stags, str): stags = json.loads(stags) if isinstance(stags, list): resource['Tags'] = [{ u'Key': t['key'], u'Value': t['value'] } for t in stags] elif isinstance(stags, dict): resource['Tags'] = [{ u'Key': k, u'Value': v } for k, v in stags.items()] return resource
def testCamelCase(self): d = {'zebraMoon': [{'instanceId': 123}, 'moon'], 'color': {'yellow': 1, 'green': 2}} self.assertEqual( utils.camelResource(d), {'ZebraMoon': [{'InstanceId': 123}, 'moon'], 'Color': {'Yellow': 1, 'Green': 2}})
def load_resource(self, config, rid): resources_histories = config.get_resource_config_history( resourceType='AWS::EC2::Volume', resourceId=rid, limit=2)['configurationItems'] for r in resources_histories: if r['configurationItemStatus'] != u'ResourceDeleted': return camelResource(json.loads(r['configuration'])) return {"VolumeId": rid}
def load_resource(self, rid): config = local_session(self.manager.session_factory).client('config') resources_histories = config.get_resource_config_history( resourceType='AWS::EC2::Volume', resourceId=rid, limit=2)['configurationItems'] for r in resources_histories: if r['configurationItemStatus'] != u'ResourceDeleted': return camelResource(json.loads(r['configuration'])) return {"VolumeId": rid}
def load_resource(self, config, rid): resources_histories = config.get_resource_config_history( resourceType='AWS::EC2::Volume', resourceId=rid, limit=2)['configurationItems'] for r in resources_histories: if r['configurationItemStatus'] != u'ResourceDeleted': return camelResource(json.loads(r['configuration'])) return {"VolumeId": rid}
def load_resource(self, rid): config = local_session(self.manager.session_factory).client('config') resources_histories = config.get_resource_config_history( resourceType='AWS::EC2::Volume', resourceId=rid, limit=2)['configurationItems'] for r in resources_histories: if r['configurationItemStatus'] != u'ResourceDeleted': return camelResource(json.loads(r['configuration'])) return {"VolumeId": rid}
def get_resources(self, ids, cache=True): client = local_session(self.manager.session_factory).client('config') results = [] m = self.manager.get_model() for i in ids: results.append( camelResource( json.loads( client.get_resource_config_history( resourceId=i, resourceType=m.config_type, limit=1) ['configurationItems'][0]['configuration']))) return results
def test_camel_case(self): d = { "zebraMoon": [{"instanceId": 123}, "moon"], "color": {"yellow": 1, "green": 2}, } self.assertEqual( utils.camelResource(d), { "ZebraMoon": [{"InstanceId": 123}, "moon"], "Color": {"Yellow": 1, "Green": 2}, }, )
def get_resources(self, ids, cache=True): client = local_session(self.manager.session_factory).client('config') results = [] m = self.manager.get_model() for i in ids: results.append( camelResource( json.loads( client.get_resource_config_history( resourceId=i, resourceType=m.config_type, limit=1)[ 'configurationItems'][0]['configuration']))) return results
def test_camel_case_implicit(self): d = { 'ownerId': 'abc', 'modifyDateIso': '2021-01-05T13:43:26.749906', 'createTimeMillis': '1609854135165', 'createTime': '1609854135' } r = utils.camelResource(d, implicitTitle=False, implicitDate=True) assert set(r) == { 'ownerId', 'modifyDateIso', 'createTimeMillis', 'createTime' } r.pop('ownerId') for k in r: assert r[k].strftime('%Y/%m/%d') == '2021/01/05'
def test_camel_nested(self): nest = { "description": "default VPC security group", "groupId": "sg-6c7fa917", "groupName": "default", "ipPermissions": [ { "ipProtocol": "-1", "ipRanges": ["108.56.181.242/32"], "ipv4Ranges": [{"cidrIp": "108.56.181.242/32"}], "ipv6Ranges": [], "prefixListIds": [], "userIdGroupPairs": [ {"groupId": "sg-6c7fa917", "userId": "644160558196"} ], } ], "ipPermissionsEgress": [ { "ipProtocol": "-1", "ipRanges": ["0.0.0.0/0"], "ipv4Ranges": [{"cidrIp": "0.0.0.0/0"}], "ipv6Ranges": [], "prefixListIds": [], "userIdGroupPairs": [], } ], "ownerId": "644160558196", "tags": [ {"key": "Name", "value": ""}, {"key": "c7n-test-tag", "value": "c7n-test-val"}, ], "vpcId": "vpc-d2d616b5", } self.assertEqual( utils.camelResource(nest)["IpPermissions"], [ { u"IpProtocol": u"-1", u"IpRanges": [u"108.56.181.242/32"], u"Ipv4Ranges": [{u"CidrIp": u"108.56.181.242/32"}], u"Ipv6Ranges": [], u"PrefixListIds": [], u"UserIdGroupPairs": [ {u"GroupId": u"sg-6c7fa917", u"UserId": u"644160558196"} ], } ], )
def transform_revision(self, revision): # config does some odd transforms, walk them back resource = camelResource(json.loads(revision['configuration'])) for rset in ('IpPermissions', 'IpPermissionsEgress'): for p in resource.get(rset, ()): if p.get('FromPort', '') is None: p.pop('FromPort') if p.get('ToPort', '') is None: p.pop('ToPort') if 'Ipv6Ranges' not in p: p[u'Ipv6Ranges'] = [] for attribute, element_key in (('IpRanges', u'CidrIp'), ): if attribute not in p: continue p[attribute] = [{element_key: v} for v in p[attribute]] return resource
def transform_revision(self, revision): # config does some odd transforms, walk them back resource = camelResource(json.loads(revision['configuration'])) for rset in ('IpPermissions', 'IpPermissionsEgress'): for p in resource.get(rset, ()): if p.get('FromPort', '') is None: p.pop('FromPort') if p.get('ToPort', '') is None: p.pop('ToPort') if 'Ipv6Ranges' not in p: p[u'Ipv6Ranges'] = [] for attribute, element_key in ( ('IpRanges', u'CidrIp'),): if attribute not in p: continue p[attribute] = [{element_key: v} for v in p[attribute]] return resource
def resolve_resources(self, event): return [utils.camelResource( self.cfg_event['configurationItem']['configuration'])]
def load_resource(self, item): if isinstance(item['configuration'], six.string_types): item_config = json.loads(item['configuration']) else: item_config = item['configuration'] return camelResource(item_config)
def resolve_resources(self, event): return [utils.camelResource( self.cfg_event['configurationItem']['configuration'])]
def load_resource(self, item): if isinstance(item['configuration'], six.string_types): item_config = json.loads(item['configuration']) else: item_config = item['configuration'] return camelResource(item_config)
def transform_revision(self, revision): """make config revision look like describe output.""" config = self.manager.get_source('config') return config.augment( [camelResource(json.loads(revision['configuration']))])[0]