def test_terminate_spot_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ['i-987654321fedcba', 'i-392024ac3252ecb']
    spot_ids = ['sir-abcdef01', 'sir-fedcba10']
    client.describe_instances.return_value = {
        'Reservations': [{
            'Instances': [
                {
                    'InstanceId': instance_ids[0],
                    'InstanceLifecycle': 'spot',
                    'SpotInstanceRequestId': spot_ids[0]
                },
                {
                    'InstanceId': instance_ids[1],
                    'InstanceLifecycle': 'spot',
                    'SpotInstanceRequestId': spot_ids[1]
                },
            ]
        }]
    }
    terminate_instances(instance_ids)
    client.cancel_spot_instance_requests.assert_called_with(
        SpotInstanceRequestIds=spot_ids)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
Beispiel #2
0
def test_terminate_instances_by_filters(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ['i-987654321fedcba', 'i-392024ac3252ecb']
    client.describe_instances.return_value = {
        'Reservations': [{'Instances': [
            {'InstanceId': instance_ids[0], 'InstanceLifecycle': 'normal'},
            {'InstanceId': instance_ids[1], 'InstanceLifecycle': 'normal'},
        ]}]}

    filters = [
        {'Name': 'instance-state-name', 'Values': ['running']},
        {'Name': 'tag-value', 'Values': ['chaos-cluster']},
        {'Name': 'tag-key', 'Values': ['kubernetes.io/cluster/chaos-cluster']},
        {'Name': 'tag-value', 'Values': ['owned']},
        {'Name': 'tag-key',
         'Values': ['eksctl.cluster.k8s.io/v1alpha1/cluster-name']},
    ]
    terminate_instances(filters=filters, az='us-west-2')

    called_filters = deepcopy(filters)
    called_filters.append(
        {'Name': 'availability-zone', 'Values': ['us-west-2']})
    client.describe_instances.assert_called_with(Filters=called_filters)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
Beispiel #3
0
def test_terminate_spot_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ["i-987654321fedcba", "i-392024ac3252ecb"]
    spot_ids = ["sir-abcdef01", "sir-fedcba10"]
    client.describe_instances.return_value = {
        "Reservations": [{
            "Instances": [
                {
                    "InstanceId": instance_ids[0],
                    "InstanceLifecycle": "spot",
                    "SpotInstanceRequestId": spot_ids[0],
                },
                {
                    "InstanceId": instance_ids[1],
                    "InstanceLifecycle": "spot",
                    "SpotInstanceRequestId": spot_ids[1],
                },
            ]
        }]
    }
    terminate_instances(instance_ids)
    client.cancel_spot_instance_requests.assert_called_with(
        SpotInstanceRequestIds=spot_ids)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
Beispiel #4
0
def test_terminate_normal_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ['i-987654321fedcba', 'i-392024ac3252ecb']
    client.describe_instances.return_value = {
        'Reservations': [{'Instances': [
            {'InstanceId': instance_ids[0], 'InstanceLifecycle': 'normal'},
            {'InstanceId': instance_ids[1], 'InstanceLifecycle': 'normal'},
        ]}]}
    terminate_instances(instance_ids)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
Beispiel #5
0
def test_terminate_instances_az_no_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    az = 'us-west-2'
    filters = [{'Name': 'availability-zone', 'Values': ['us-west-2']}]
    client.describe_instances.return_value = {
        'Reservations': [{'Instances': []}]}

    with pytest.raises(FailedActivity) as x:
        terminate_instances(az=az)
    assert "No instances found matching filters: %s" % filters in str(x.value)
def test_terminate_instances_az_no_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    az = 'us-west-2'
    client.describe_instances.return_value = {
        'Reservations': [{
            'Instances': []
        }]
    }

    with pytest.raises(FailedActivity) as x:
        terminate_instances(az=az)
    assert 'No instances found matching filters: %s' % az
Beispiel #7
0
def test_terminate_instances_by_filters(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ["i-987654321fedcba", "i-392024ac3252ecb"]
    client.describe_instances.return_value = {
        "Reservations": [{
            "Instances": [
                {
                    "InstanceId": instance_ids[0],
                    "InstanceLifecycle": "normal"
                },
                {
                    "InstanceId": instance_ids[1],
                    "InstanceLifecycle": "normal"
                },
            ]
        }]
    }

    filters = [
        {
            "Name": "instance-state-name",
            "Values": ["running"]
        },
        {
            "Name": "tag-value",
            "Values": ["chaos-cluster"]
        },
        {
            "Name": "tag-key",
            "Values": ["kubernetes.io/cluster/chaos-cluster"]
        },
        {
            "Name": "tag-value",
            "Values": ["owned"]
        },
        {
            "Name": "tag-key",
            "Values": ["eksctl.cluster.k8s.io/v1alpha1/cluster-name"]
        },
    ]
    terminate_instances(filters=filters, az="us-west-2")

    called_filters = deepcopy(filters)
    called_filters.append({
        "Name": "availability-zone",
        "Values": ["us-west-2"]
    })
    client.describe_instances.assert_called_with(Filters=called_filters)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
Beispiel #8
0
def test_terminate_instances_az_no_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    az = "us-west-2"
    filters = [{"Name": "availability-zone", "Values": ["us-west-2"]}]
    client.describe_instances.return_value = {
        "Reservations": [{
            "Instances": []
        }]
    }

    with pytest.raises(FailedActivity) as x:
        terminate_instances(az=az)
    assert "No instances found matching filters: %s" % filters in str(x.value)
Beispiel #9
0
def test_terminate_normal_instances(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    instance_ids = ["i-987654321fedcba", "i-392024ac3252ecb"]
    client.describe_instances.return_value = {
        "Reservations": [{
            "Instances": [
                {
                    "InstanceId": instance_ids[0],
                    "InstanceLifecycle": "normal"
                },
                {
                    "InstanceId": instance_ids[1],
                    "InstanceLifecycle": "normal"
                },
            ]
        }]
    }
    terminate_instances(instance_ids)
    client.terminate_instances.assert_called_with(InstanceIds=instance_ids)
def test_terminate_instances_no_values():
    with pytest.raises(FailedActivity) as x:
        terminate_instances()
    assert 'To terminate instances, you must specify the instance-id, an ' \
           'Availability Zone, or provide a set of filters' in str(x.value)