示例#1
0
    def test_ec2_mark_zero(self):
        localtz = zoneinfo.gettz("America/New_York")
        dt = datetime.now(localtz)
        dt = dt.replace(year=2017, month=11, day=24, hour=7, minute=00)
        session_factory = self.replay_flight_data("test_ec2_mark_zero")
        session = session_factory(region="us-east-1")
        ec2 = session.client("ec2")
        resource = ec2.describe_instances(InstanceIds=["i-04d3e0630bd342566"])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "maid_status"]
        self.assertEqual(len(tags), 0)

        policy = self.load_policy(
            {
                "name": "ec2-mark-zero-days",
                "resource": "ec2",
                "filters": [{"tag:CreatorName": "joshuaroot"}],
                "actions": [{"type": "mark-for-op", "days": 0, "op": "terminate"}],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertEqual(len(resources), 1)
        self.assertEqual(resources[0]["InstanceId"], "i-04d3e0630bd342566")

        resource = ec2.describe_instances(InstanceIds=["i-04d3e0630bd342566"])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "maid_status"]
        result = datetime.strptime(
            tags[0].strip().split("@", 1)[-1], "%Y/%m/%d"
        ).replace(
            tzinfo=localtz
        )
        self.assertEqual(result.date(), dt.date())
示例#2
0
    def test_ec2_mark_zero(self):
        localtz = zoneinfo.gettz("America/New_York")
        dt = datetime.now(localtz)
        dt = dt.replace(year=2017, month=11, day=24, hour=7, minute=00)
        session_factory = self.replay_flight_data("test_ec2_mark_zero")
        session = session_factory(region="us-east-1")
        ec2 = session.client("ec2")
        resource = ec2.describe_instances(InstanceIds=["i-04d3e0630bd342566"])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "maid_status"]
        self.assertEqual(len(tags), 0)

        policy = self.load_policy(
            {
                "name": "ec2-mark-zero-days",
                "resource": "ec2",
                "filters": [{"tag:CreatorName": "joshuaroot"}],
                "actions": [{"type": "mark-for-op", "days": 0, "op": "terminate"}],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertEqual(len(resources), 1)
        self.assertEqual(resources[0]["InstanceId"], "i-04d3e0630bd342566")

        resource = ec2.describe_instances(InstanceIds=["i-04d3e0630bd342566"])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "maid_status"]
        result = datetime.strptime(
            tags[0].strip().split("@", 1)[-1], "%Y/%m/%d"
        ).replace(
            tzinfo=localtz
        )
        self.assertEqual(result.date(), dt.date())
示例#3
0
    def test_ec2_set_instance_profile_assocation(self):
        session_factory = self.replay_flight_data(
            'test_ec2_set_instance_profile_association')
        policy = self.load_policy({
            'name': 'ec2-test-set-instance-profile-association',
            'resource': 'ec2',
            'filters': [
                {'tag:Name': 'MissingInstanceProfile'},
                {'IamInstanceProfile': 'absent'}],
            'actions': [
                {'type': 'set-instance-profile',
                 'name': 'ec2-default'}]},
            session_factory=session_factory)
        resources = policy.run()
        self.assertGreaterEqual(len(resources), 1)
        ec2 = session_factory().client('ec2')
        resources = ec2.describe_instances(
            InstanceIds=[r['InstanceId'] for r in resources]
        )

        for r in resources['Reservations']:
            for i in r['Instances']:
                self.assertIn('IamInstanceProfile', i)
                self.assertIn('Arn', i['IamInstanceProfile'])
                self.assertIn(':instance-profile/ec2-default', i['IamInstanceProfile']['Arn'])
示例#4
0
    def test_ec2_set_instance_profile_assocation(self):
        session_factory = self.replay_flight_data(
            "test_ec2_set_instance_profile_association"
        )
        policy = self.load_policy(
            {
                "name": "ec2-test-set-instance-profile-association",
                "resource": "ec2",
                "filters": [
                    {"tag:Name": "MissingInstanceProfile"},
                    {"IamInstanceProfile": "absent"},
                ],
                "actions": [{"type": "set-instance-profile", "name": "ec2-default"}],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertGreaterEqual(len(resources), 1)
        ec2 = session_factory().client("ec2")
        resources = ec2.describe_instances(
            InstanceIds=[r["InstanceId"] for r in resources]
        )

        for r in resources["Reservations"]:
            for i in r["Instances"]:
                self.assertIn("IamInstanceProfile", i)
                self.assertIn("Arn", i["IamInstanceProfile"])
                self.assertIn(
                    ":instance-profile/ec2-default", i["IamInstanceProfile"]["Arn"]
                )
示例#5
0
    def test_ec2_set_instance_profile_assocation(self):
        session_factory = self.replay_flight_data(
            'test_ec2_set_instance_profile_association')
        policy = self.load_policy(
            {
                'name':
                'ec2-test-set-instance-profile-association',
                'resource':
                'ec2',
                'filters': [{
                    'tag:Name': 'MissingInstanceProfile'
                }, {
                    'IamInstanceProfile': 'absent'
                }],
                'actions': [{
                    'type': 'set-instance-profile',
                    'name': 'ec2-default'
                }]
            },
            session_factory=session_factory)
        resources = policy.run()
        self.assertGreaterEqual(len(resources), 1)
        ec2 = session_factory().client('ec2')
        resources = ec2.describe_instances(
            InstanceIds=[r['InstanceId'] for r in resources])

        for r in resources['Reservations']:
            for i in r['Instances']:
                self.assertIn('IamInstanceProfile', i)
                self.assertIn('Arn', i['IamInstanceProfile'])
                self.assertIn(':instance-profile/ec2-default',
                              i['IamInstanceProfile']['Arn'])
示例#6
0
    def test_ec2_mark_hours(self):
        localtz = zoneinfo.gettz('America/New_York')
        dt = datetime.now(localtz)
        dt = dt.replace(year=2018, month=2, day=20, hour=18, minute=00,
                        second=0, microsecond=0)
        session_factory = self.replay_flight_data('test_ec2_mark_hours')
        session = session_factory(region='us-east-1')
        ec2 = session.client('ec2')

        policy = self.load_policy({
            'name': 'ec2-mark-5-hours',
            'resource': 'ec2',
            'filters': [
                {'tag:hourly-mark': 'absent'},
                {'tag:CreatorName': 'joshuaroot'}],
            'actions': [{
                'type': 'mark-for-op',
                'tag': 'hourly-mark',
                'hours': 3,
                'op': 'stop'}]
        }, session_factory=session_factory)
        resources = policy.run()
        self.assertEqual(len(resources), 1)

        resource = ec2.describe_instances(
            InstanceIds=[resources[0]['InstanceId']])[
            'Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'hourly-mark']
        result = datetime.strptime(
            tags[0].strip().split('@', 1)[-1], '%Y/%m/%d %H%M %Z').replace(
            tzinfo=localtz)
        self.assertEqual(result, dt)
示例#7
0
    def test_ec2_mark_hours(self):
        localtz = zoneinfo.gettz('America/New_York')
        dt = datetime.now(localtz)
        dt = dt.replace(year=2018, month=2, day=20, hour=18, minute=00)
        session_factory = self.replay_flight_data('test_ec2_mark_hours')
        session = session_factory(region='us-east-1')
        ec2 = session.client('ec2')

        policy = self.load_policy({
            'name': 'ec2-mark-5-hours',
            'resource': 'ec2',
            'filters': [
                {'tag:hourly-mark': 'absent'},
                {'tag:CreatorName': 'joshuaroot'}],
            'actions': [{
                'type': 'mark-for-op',
                'tag': 'hourly-mark',
                'hours': 3,
                'op': 'stop'}]
        }, session_factory=session_factory)
        resources = policy.run()
        self.assertEqual(len(resources), 1)

        resource = ec2.describe_instances(
            InstanceIds=[resources[0]['InstanceId']])[
            'Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'hourly-mark']
        result = datetime.strptime(
            tags[0].strip().split('@', 1)[-1], '%Y/%m/%d %H%M %Z').replace(
            tzinfo=localtz)
        self.assertEqual(result.date(), dt.date())
示例#8
0
    def test_ec2_mark_zero(self):
        localtz = zoneinfo.gettz('America/New_York')
        dt = datetime.now(localtz)
        dt = dt.replace(year=2017, month=11, day=24, hour=7, minute=00)
        session_factory = self.replay_flight_data('test_ec2_mark_zero')
        session = session_factory(region='us-east-1')
        ec2 = session.client('ec2')
        resource = ec2.describe_instances(InstanceIds=['i-04d3e0630bd342566']
                                          )['Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'maid_status'
        ]
        self.assertEqual(len(tags), 0)

        policy = self.load_policy(
            {
                'name': 'ec2-mark-zero-days',
                'resource': 'ec2',
                'filters': [{
                    'tag:CreatorName': 'joshuaroot'
                }],
                'actions': [{
                    'type': 'mark-for-op',
                    'days': 0,
                    'op': 'terminate'
                }]
            },
            session_factory=session_factory)
        resources = policy.run()
        self.assertEqual(len(resources), 1)
        self.assertEqual(resources[0]['InstanceId'], 'i-04d3e0630bd342566')

        resource = ec2.describe_instances(InstanceIds=['i-04d3e0630bd342566']
                                          )['Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'maid_status'
        ]
        result = datetime.strptime(tags[0].strip().split('@', 1)[-1],
                                   '%Y/%m/%d').replace(tzinfo=localtz)
        self.assertEqual(result.date(), dt.date())
示例#9
0
    def test_ec2_mark_zero(self):
        localtz = zoneinfo.gettz('America/New_York')
        dt = datetime.now(localtz)
        dt = dt.replace(year=2017, month=11, day=24, hour=7, minute=00)
        session_factory = self.replay_flight_data('test_ec2_mark_zero')
        session = session_factory(region='us-east-1')
        ec2 = session.client('ec2')
        resource = ec2.describe_instances(
            InstanceIds=['i-04d3e0630bd342566'])[
            'Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'maid_status']
        self.assertEqual(len(tags), 0)

        policy = self.load_policy({
            'name': 'ec2-mark-zero-days',
            'resource': 'ec2',
            'filters': [{'tag:CreatorName': 'joshuaroot'}],
            'actions': [{
                'type': 'mark-for-op',
                'days': 0,
                'op': 'terminate'}]
        }, session_factory=session_factory)
        resources = policy.run()
        self.assertEqual(len(resources), 1)
        self.assertEqual(resources[0]['InstanceId'], 'i-04d3e0630bd342566')

        resource = ec2.describe_instances(
            InstanceIds=['i-04d3e0630bd342566'])[
            'Reservations'][0]['Instances'][0]
        tags = [
            t['Value'] for t in resource['Tags'] if t['Key'] == 'maid_status']
        result = datetime.strptime(
            tags[0].strip().split('@', 1)[-1], '%Y/%m/%d').replace(
            tzinfo=localtz)
        self.assertEqual(result.date(), dt.date())
示例#10
0
    def test_ec2_mark_hours(self):
        localtz = zoneinfo.gettz("America/New_York")
        dt = datetime.now(localtz)
        dt = dt.replace(
            year=2018, month=2, day=20, hour=18, minute=00, second=0, microsecond=0
        )
        session_factory = self.replay_flight_data("test_ec2_mark_hours")
        session = session_factory(region="us-east-1")
        ec2 = session.client("ec2")

        policy = self.load_policy(
            {
                "name": "ec2-mark-5-hours",
                "resource": "ec2",
                "filters": [
                    {"tag:hourly-mark": "absent"}, {"tag:CreatorName": "joshuaroot"}
                ],
                "actions": [
                    {
                        "type": "mark-for-op",
                        "tag": "hourly-mark",
                        "hours": 3,
                        "op": "stop",
                    }
                ],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertEqual(len(resources), 1)

        resource = ec2.describe_instances(InstanceIds=[resources[0]["InstanceId"]])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "hourly-mark"]
        result = datetime.strptime(
            tags[0].strip().split("@", 1)[-1], "%Y/%m/%d %H%M %Z"
        ).replace(
            tzinfo=localtz
        )
        self.assertEqual(result, dt)
示例#11
0
    def test_ec2_mark_hours(self):
        localtz = zoneinfo.gettz("America/New_York")
        dt = datetime.now(localtz)
        dt = dt.replace(
            year=2018, month=2, day=20, hour=18, minute=00, second=0, microsecond=0
        )
        session_factory = self.replay_flight_data("test_ec2_mark_hours")
        session = session_factory(region="us-east-1")
        ec2 = session.client("ec2")

        policy = self.load_policy(
            {
                "name": "ec2-mark-5-hours",
                "resource": "ec2",
                "filters": [
                    {"tag:hourly-mark": "absent"}, {"tag:CreatorName": "joshuaroot"}
                ],
                "actions": [
                    {
                        "type": "mark-for-op",
                        "tag": "hourly-mark",
                        "hours": 3,
                        "op": "stop",
                    }
                ],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertEqual(len(resources), 1)

        resource = ec2.describe_instances(InstanceIds=[resources[0]["InstanceId"]])[
            "Reservations"
        ][
            0
        ][
            "Instances"
        ][
            0
        ]
        tags = [t["Value"] for t in resource["Tags"] if t["Key"] == "hourly-mark"]
        result = datetime.strptime(
            tags[0].strip().split("@", 1)[-1], "%Y/%m/%d %H%M %Z"
        ).replace(
            tzinfo=localtz
        )
        self.assertEqual(result, dt)
示例#12
0
    def test_ec2_set_instance_profile_assocation(self):
        session_factory = self.replay_flight_data(
            "test_ec2_set_instance_profile_association")
        policy = self.load_policy(
            {
                "name":
                "ec2-test-set-instance-profile-association",
                "resource":
                "ec2",
                "filters": [
                    {
                        "tag:Name": "MissingInstanceProfile"
                    },
                    {
                        "IamInstanceProfile": "absent"
                    },
                ],
                "actions": [{
                    "type": "set-instance-profile",
                    "name": "ec2-default"
                }],
            },
            session_factory=session_factory,
        )
        resources = policy.run()
        self.assertGreaterEqual(len(resources), 1)
        ec2 = session_factory().client("ec2")
        resources = ec2.describe_instances(
            InstanceIds=[r["InstanceId"] for r in resources])

        for r in resources["Reservations"]:
            for i in r["Instances"]:
                self.assertIn("IamInstanceProfile", i)
                self.assertIn("Arn", i["IamInstanceProfile"])
                self.assertIn(":instance-profile/ec2-default",
                              i["IamInstanceProfile"]["Arn"])