moto/tests/test_autoscaling/test_launch_configurations.py

272 lines
9.6 KiB
Python
Raw Normal View History

from __future__ import unicode_literals
2013-07-27 20:24:38 +00:00
import boto
2017-05-11 01:58:42 +00:00
import boto3
2013-07-27 20:24:38 +00:00
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
from botocore.exceptions import ClientError
2013-07-27 20:24:38 +00:00
import pytest
2013-08-03 21:21:25 +00:00
import sure # noqa
2013-07-27 20:24:38 +00:00
2017-02-16 03:35:45 +00:00
from moto import mock_autoscaling_deprecated
2017-05-11 01:58:42 +00:00
from moto import mock_autoscaling
from moto.core import ACCOUNT_ID
from tests.helpers import requires_boto_gte
from tests import EXAMPLE_AMI_ID
2013-07-27 20:24:38 +00:00
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
2013-07-27 20:24:38 +00:00
def test_create_launch_configuration():
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester",
image_id="ami-abcd1234",
instance_type="t1.micro",
key_name="the_keys",
2013-07-27 20:24:38 +00:00
security_groups=["default", "default2"],
2014-08-26 17:25:50 +00:00
user_data=b"This is some user_data",
2013-07-27 20:24:38 +00:00
instance_monitoring=True,
2019-12-17 02:25:20 +00:00
instance_profile_name="arn:aws:iam::{}:instance-profile/testing".format(
ACCOUNT_ID
),
spot_price=0.1,
)
2013-07-27 20:24:38 +00:00
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
2019-10-31 15:44:26 +00:00
launch_config.name.should.equal("tester")
launch_config.image_id.should.equal("ami-abcd1234")
launch_config.instance_type.should.equal("t1.micro")
launch_config.key_name.should.equal("the_keys")
set(launch_config.security_groups).should.equal(set(["default", "default2"]))
2014-08-26 17:25:50 +00:00
launch_config.user_data.should.equal(b"This is some user_data")
2019-10-31 15:44:26 +00:00
launch_config.instance_monitoring.enabled.should.equal("true")
2017-02-24 02:37:43 +00:00
launch_config.instance_profile_name.should.equal(
"arn:aws:iam::{}:instance-profile/testing".format(ACCOUNT_ID)
2019-10-31 15:44:26 +00:00
)
2013-07-27 20:24:38 +00:00
launch_config.spot_price.should.equal(0.1)
@requires_boto_gte("2.27.0")
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
def test_create_launch_configuration_with_block_device_mappings():
block_device_mapping = BlockDeviceMapping()
ephemeral_drive = BlockDeviceType()
2019-10-31 15:44:26 +00:00
ephemeral_drive.ephemeral_name = "ephemeral0"
block_device_mapping["/dev/xvdb"] = ephemeral_drive
snapshot_drive = BlockDeviceType()
snapshot_drive.snapshot_id = "snap-1234abcd"
snapshot_drive.volume_type = "standard"
2019-10-31 15:44:26 +00:00
block_device_mapping["/dev/xvdp"] = snapshot_drive
ebs_drive = BlockDeviceType()
ebs_drive.volume_type = "io1"
ebs_drive.size = 100
ebs_drive.iops = 1000
ebs_drive.delete_on_termination = False
2019-10-31 15:44:26 +00:00
block_device_mapping["/dev/xvdh"] = ebs_drive
conn = boto.connect_autoscale(use_block_device_types=True)
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester",
image_id="ami-abcd1234",
instance_type="m1.small",
key_name="the_keys",
security_groups=["default", "default2"],
2014-08-26 17:25:50 +00:00
user_data=b"This is some user_data",
instance_monitoring=True,
2019-12-17 02:25:20 +00:00
instance_profile_name="arn:aws:iam::{}:instance-profile/testing".format(
ACCOUNT_ID
),
spot_price=0.1,
2019-10-31 15:44:26 +00:00
block_device_mappings=[block_device_mapping],
)
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
2019-10-31 15:44:26 +00:00
launch_config.name.should.equal("tester")
launch_config.image_id.should.equal("ami-abcd1234")
launch_config.instance_type.should.equal("m1.small")
launch_config.key_name.should.equal("the_keys")
set(launch_config.security_groups).should.equal(set(["default", "default2"]))
2014-08-26 17:25:50 +00:00
launch_config.user_data.should.equal(b"This is some user_data")
2019-10-31 15:44:26 +00:00
launch_config.instance_monitoring.enabled.should.equal("true")
2017-02-24 02:37:43 +00:00
launch_config.instance_profile_name.should.equal(
"arn:aws:iam::{}:instance-profile/testing".format(ACCOUNT_ID)
2019-10-31 15:44:26 +00:00
)
launch_config.spot_price.should.equal(0.1)
len(launch_config.block_device_mappings).should.equal(3)
returned_mapping = launch_config.block_device_mappings
2017-02-24 02:37:43 +00:00
set(returned_mapping.keys()).should.equal(
2019-10-31 15:44:26 +00:00
set(["/dev/xvdb", "/dev/xvdp", "/dev/xvdh"])
)
2019-10-31 15:44:26 +00:00
returned_mapping["/dev/xvdh"].iops.should.equal(1000)
returned_mapping["/dev/xvdh"].size.should.equal(100)
returned_mapping["/dev/xvdh"].volume_type.should.equal("io1")
returned_mapping["/dev/xvdh"].delete_on_termination.should.be.false
2019-10-31 15:44:26 +00:00
returned_mapping["/dev/xvdp"].snapshot_id.should.equal("snap-1234abcd")
returned_mapping["/dev/xvdp"].volume_type.should.equal("standard")
2019-10-31 15:44:26 +00:00
returned_mapping["/dev/xvdb"].ephemeral_name.should.equal("ephemeral0")
@requires_boto_gte("2.12")
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
def test_create_launch_configuration_for_2_12():
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester", image_id="ami-abcd1234", ebs_optimized=True
)
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
launch_config.ebs_optimized.should.equal(True)
@requires_boto_gte("2.25.0")
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
def test_create_launch_configuration_using_ip_association():
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester", image_id="ami-abcd1234", associate_public_ip_address=True
)
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
launch_config.associate_public_ip_address.should.equal(True)
@requires_boto_gte("2.25.0")
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
def test_create_launch_configuration_using_ip_association_should_default_to_false():
conn = boto.connect_autoscale()
2019-10-31 15:44:26 +00:00
config = LaunchConfiguration(name="tester", image_id="ami-abcd1234")
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
launch_config.associate_public_ip_address.should.equal(False)
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
2013-07-27 20:24:38 +00:00
def test_create_launch_configuration_defaults():
2020-10-06 06:46:05 +00:00
"""Test with the minimum inputs and check that all of the proper defaults
are assigned for the other attributes"""
2013-07-27 20:24:38 +00:00
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester", image_id="ami-abcd1234", instance_type="m1.small"
2013-07-27 20:24:38 +00:00
)
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
2019-10-31 15:44:26 +00:00
launch_config.name.should.equal("tester")
launch_config.image_id.should.equal("ami-abcd1234")
launch_config.instance_type.should.equal("m1.small")
2013-07-27 20:24:38 +00:00
# Defaults
2019-10-31 15:44:26 +00:00
launch_config.key_name.should.equal("")
2013-07-27 20:24:38 +00:00
list(launch_config.security_groups).should.equal([])
2014-08-26 17:25:50 +00:00
launch_config.user_data.should.equal(b"")
2019-10-31 15:44:26 +00:00
launch_config.instance_monitoring.enabled.should.equal("false")
2013-07-27 20:24:38 +00:00
launch_config.instance_profile_name.should.equal(None)
launch_config.spot_price.should.equal(None)
@requires_boto_gte("2.12")
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
def test_create_launch_configuration_defaults_for_2_12():
conn = boto.connect_autoscale()
2019-10-31 15:44:26 +00:00
config = LaunchConfiguration(name="tester", image_id="ami-abcd1234")
conn.create_launch_configuration(config)
launch_config = conn.get_all_launch_configurations()[0]
launch_config.ebs_optimized.should.equal(False)
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
2013-07-27 20:24:38 +00:00
def test_launch_configuration_describe_filter():
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester", image_id="ami-abcd1234", instance_type="m1.small"
2013-07-27 20:24:38 +00:00
)
conn.create_launch_configuration(config)
2019-10-31 15:44:26 +00:00
config.name = "tester2"
2013-07-27 20:24:38 +00:00
conn.create_launch_configuration(config)
2019-10-31 15:44:26 +00:00
config.name = "tester3"
2013-07-27 20:24:38 +00:00
conn.create_launch_configuration(config)
2017-02-24 02:37:43 +00:00
conn.get_all_launch_configurations(
2019-10-31 15:44:26 +00:00
names=["tester", "tester2"]
).should.have.length_of(2)
2013-07-27 20:24:38 +00:00
conn.get_all_launch_configurations().should.have.length_of(3)
2017-05-11 01:58:42 +00:00
@mock_autoscaling
def test_launch_configuration_describe_paginated():
2019-10-31 15:44:26 +00:00
conn = boto3.client("autoscaling", region_name="us-east-1")
2017-05-11 01:58:42 +00:00
for i in range(51):
conn.create_launch_configuration(
LaunchConfigurationName="TestLC%d" % i,
ImageId=EXAMPLE_AMI_ID,
InstanceType="t2.medium",
)
2017-05-11 01:58:42 +00:00
response = conn.describe_launch_configurations()
lcs = response["LaunchConfigurations"]
marker = response["NextToken"]
lcs.should.have.length_of(50)
2019-10-31 15:44:26 +00:00
marker.should.equal(lcs[-1]["LaunchConfigurationName"])
2017-05-11 01:58:42 +00:00
response2 = conn.describe_launch_configurations(NextToken=marker)
lcs.extend(response2["LaunchConfigurations"])
lcs.should.have.length_of(51)
2019-10-31 15:44:26 +00:00
assert "NextToken" not in response2.keys()
2017-05-11 01:58:42 +00:00
2017-02-16 03:35:45 +00:00
@mock_autoscaling_deprecated
2013-07-27 20:24:38 +00:00
def test_launch_configuration_delete():
conn = boto.connect_autoscale()
config = LaunchConfiguration(
2019-10-31 15:44:26 +00:00
name="tester", image_id="ami-abcd1234", instance_type="m1.small"
2013-07-27 20:24:38 +00:00
)
conn.create_launch_configuration(config)
conn.get_all_launch_configurations().should.have.length_of(1)
2019-10-31 15:44:26 +00:00
conn.delete_launch_configuration("tester")
2013-07-27 20:24:38 +00:00
conn.get_all_launch_configurations().should.have.length_of(0)
@pytest.mark.parametrize(
"request_params",
[
pytest.param(
{"LaunchConfigurationName": "test"},
id="No InstanceId, ImageId, or InstanceType parameters",
),
pytest.param(
{"LaunchConfigurationName": "test", "ImageId": "ami-test"},
id="ImageId without InstanceType parameter",
),
pytest.param(
{"LaunchConfigurationName": "test", "InstanceType": "t2.medium"},
id="InstanceType without ImageId parameter",
),
],
)
@mock_autoscaling
def test_invalid_launch_configuration_request_raises_error(request_params):
client = boto3.client("autoscaling", region_name="us-east-1")
with pytest.raises(ClientError) as ex:
client.create_launch_configuration(**request_params)
ex.value.response["Error"]["Code"].should.equal("ValidationError")
ex.value.response["Error"]["Message"].should.match(
r"^Valid requests must contain.*"
)