예제 #1
0
 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}})
예제 #2
0
 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'}]}])
예제 #3
0
 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'}]}])
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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}})
예제 #7
0
 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}
예제 #8
0
 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}
예제 #9
0
 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}
예제 #10
0
 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}
예제 #11
0
 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
예제 #12
0
 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},
         },
     )
예제 #13
0
 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
예제 #14
0
 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'
예제 #15
0
 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"}
                 ],
             }
         ],
     )
예제 #16
0
 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
예제 #17
0
 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
예제 #18
0
 def resolve_resources(self, event):
     return [utils.camelResource(
         self.cfg_event['configurationItem']['configuration'])]
예제 #19
0
 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)
예제 #20
0
 def resolve_resources(self, event):
     return [utils.camelResource(
         self.cfg_event['configurationItem']['configuration'])]
예제 #21
0
 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)
예제 #22
0
 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]