示例#1
0
    def test_consolidate_query_filter(self):
        session_factory = self.replay_flight_data('test_emr_query_ids')

        ctx = Bag(session_factory=session_factory,
                  log_dir='',
                  options=Config.empty())

        query = {
            'query': [{
                'tag:foo': 'val1'
            }, {
                'tag:foo': 'val2'
            }, {
                'tag:bar': 'val3'
            }]
        }
        mgr = emr.EMRCluster(ctx, query)
        self.assertEqual(mgr.consolidate_query_filter(),
                         [{
                             'Values': ['val1', 'val2'],
                             'Name': 'tag:foo'
                         }, {
                             'Values': ['val3'],
                             'Name': 'tag:bar'
                         }])
示例#2
0
    def get_s3_output(self):
        output = S3Output(
            ExecutionContext(
                None, Bag(name="xyz"),
                Config.empty(output_dir="s3://cloud-custodian/policies")))
        self.addCleanup(shutil.rmtree, output.root_dir)

        return output
示例#3
0
    def test_get_emr_by_ids(self):
        session_factory = self.replay_flight_data('test_emr_query_ids')

        ctx = Bag(session_factory=session_factory,
                  log_dir='',
                  options=Config.empty())

        mgr = emr.EMRCluster(ctx, {})
        resources = mgr.get_resources(["j-1EJMJNTXC63JW"])
        self.assertEqual(resources[0]['Id'], "j-1EJMJNTXC63JW")
示例#4
0
 def test_event_filter(self):
     b = Bag(data={'mode': []})
     event = event_data('event-instance-state.json')
     f = {'type': 'event', 'key': 'detail.state', 'value': 'pending'}
     ef = filters.factory(f, b)
     self.assertTrue(ef.process([instance()], event))
     # event is None
     self.assertEqual(ef.process('resources'), 'resources')
     # event is not None, but is not "true" either
     self.assertEqual(ef.process('resources', []), [])
示例#5
0
    def test_resource_permissions(self):
        self.capture_logging('c7n.cache')
        missing = []
        cfg = Config.empty()
        for k, v in manager.resources.items():

            p = Bag({'name': 'permcheck', 'resource': k})
            ctx = self.get_context(config=cfg, policy=p)

            mgr = v(ctx, p)
            perms = mgr.get_permissions()
            if not perms:
                missing.append(k)

            for n, a in v.action_registry.items():
                p['actions'] = [n]
                perms = a({}, mgr).get_permissions()
                found = bool(perms)
                if not isinstance(perms, (list, tuple, set)):
                    found = False

                if not found:
                    missing.append("%s.actions.%s" % (
                        k, n))

            for n, f in v.filter_registry.items():
                if n in ('and', 'or', 'not'):
                    continue
                p['filters'] = [n]
                perms = f({}, mgr).get_permissions()
                if not isinstance(perms, (tuple, list, set)):
                    missing.append("%s.filters.%s" % (
                        k, n))

                # in memory filters
                if n in ('event', 'value', 'tag-count',
                         'marked-for-op', 'offhour', 'onhour', 'age',
                         'state-age', 'egress', 'ingress',
                         'capacity-delta', 'is-ssl', 'global-grants',
                         'missing-policy-statement', 'missing-statement',
                         'healthcheck-protocol-mismatch', 'image-age',
                         'has-statement',
                         'instance-age', 'ephemeral', 'instance-uptime'):
                    continue
                if not perms:
                    missing.append("%s.filters.%s" % (
                        k, n))
        if missing:
            self.fail("Missing permissions %d on \n\t%s" % (
                len(missing),
                "\n\t".join(sorted(missing))))
示例#6
0
    def test_consolidate_query_filter(self):
        session_factory = self.replay_flight_data('test_emr_query_ids')

        ctx = Bag(session_factory=session_factory,
                  log_dir='',
                  options=Config.empty())

        query = {
            'query': [{
                'tag:foo': 'val1'
            }, {
                'tag:foo': 'val2'
            }, {
                'tag:bar': 'val3'
            }]
        }
        mgr = emr.EMRCluster(ctx, query)
        self.assertEqual(
            mgr.consolidate_query_filter(),
            [
                {
                    'Values': ['val1', 'val2'],
                    'Name': 'tag:foo'
                },
                {
                    'Values': ['val3'],
                    'Name': 'tag:bar'
                },
                # default query
                {
                    'Values': ['WAITING', 'RUNNING', 'BOOTSTRAPPING'],
                    'Name': 'ClusterStates',
                },
            ])

        query = {
            'query': [
                {
                    'tag:foo': 'val1'
                },
                {
                    'tag:foo': 'val2'
                },
                {
                    'tag:bar': 'val3'
                },
                {
                    'ClusterStates': 'terminated'
                },
            ]
        }
        mgr = emr.EMRCluster(ctx, query)
        self.assertEqual(
            mgr.consolidate_query_filter(),
            [
                {
                    'Values': ['val1', 'val2'],
                    'Name': 'tag:foo'
                },
                {
                    'Values': ['val3'],
                    'Name': 'tag:bar'
                },
                # verify default is overridden
                {
                    'Values': ['terminated'],
                    'Name': 'ClusterStates',
                },
            ])
示例#7
0
 def get_values_from(self, data, content):
     mgr = Bag({'session_factory': None, '_cache': None})
     values = ValuesFrom(data, mgr)
     values.resolver = FakeResolver(content)
     return values
示例#8
0
 def test_event_no_mode(self):
     b = Bag(data={'resource': 'something'})
     f = {'type': 'event', 'key': 'detail.state', 'value': 'pending'}
     self.assertRaises(base_filters.FilterValidationError, filters.factory,
                       f, b)
示例#9
0
 def get_manager(self, data, config=None, session_factory=None):
     ctx = ExecutionContext(session_factory, Bag({'name': 'test-policy'}),
                            config or Config.empty())
     return EC2(ctx, data)