2021-09-22 18:05:28 +00:00
|
|
|
import base64
|
|
|
|
|
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
|
2014-02-25 19:34:53 +00:00
|
|
|
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
|
2021-02-14 11:38:03 +00:00
|
|
|
from botocore.exceptions import ClientError
|
2013-07-27 20:24:38 +00:00
|
|
|
|
2021-02-14 11:38:03 +00:00
|
|
|
import pytest
|
2021-10-18 19:44:29 +00:00
|
|
|
import sure # noqa # pylint: disable=unused-import
|
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
|
2019-12-17 02:05:29 +00:00
|
|
|
from moto.core import ACCOUNT_ID
|
2013-09-10 21:04:56 +00:00
|
|
|
from tests.helpers import requires_boto_gte
|
2021-01-27 19:49:33 +00:00
|
|
|
from tests import EXAMPLE_AMI_ID
|
2013-07-27 20:24:38 +00:00
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
# Has boto3 equivalent
|
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
|
|
|
|
),
|
2013-09-10 20:54:57 +00:00
|
|
|
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(
|
2019-12-16 00:22:26 +00:00
|
|
|
"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)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_create_launch_configuration_boto3():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="t1.micro",
|
|
|
|
KeyName="the_keys",
|
|
|
|
SecurityGroups=["default", "default2"],
|
|
|
|
UserData="This is some user_data",
|
|
|
|
InstanceMonitoring={"Enabled": True},
|
|
|
|
IamInstanceProfile="arn:aws:iam::{}:instance-profile/testing".format(
|
|
|
|
ACCOUNT_ID
|
|
|
|
),
|
|
|
|
SpotPrice="0.1",
|
|
|
|
)
|
|
|
|
|
|
|
|
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
|
|
|
launch_config["LaunchConfigurationName"].should.equal("tester")
|
|
|
|
launch_config.should.have.key("LaunchConfigurationARN")
|
|
|
|
launch_config["ImageId"].should.equal(EXAMPLE_AMI_ID)
|
|
|
|
launch_config["InstanceType"].should.equal("t1.micro")
|
|
|
|
launch_config["KeyName"].should.equal("the_keys")
|
|
|
|
set(launch_config["SecurityGroups"]).should.equal(set(["default", "default2"]))
|
|
|
|
userdata = launch_config["UserData"]
|
|
|
|
userdata = base64.b64decode(userdata)
|
|
|
|
userdata.should.equal(b"This is some user_data")
|
|
|
|
launch_config["InstanceMonitoring"].should.equal({"Enabled": True})
|
|
|
|
launch_config["IamInstanceProfile"].should.equal(
|
|
|
|
"arn:aws:iam::{}:instance-profile/testing".format(ACCOUNT_ID)
|
|
|
|
)
|
|
|
|
launch_config["SpotPrice"].should.equal("0.1")
|
|
|
|
launch_config["BlockDeviceMappings"].should.equal([])
|
|
|
|
|
|
|
|
|
|
|
|
# Has boto3 equivalent
|
2014-04-25 20:18:26 +00:00
|
|
|
@requires_boto_gte("2.27.0")
|
2017-02-16 03:35:45 +00:00
|
|
|
@mock_autoscaling_deprecated
|
2014-02-25 19:34:53 +00:00
|
|
|
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
|
2014-02-25 19:34:53 +00:00
|
|
|
|
|
|
|
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
|
2014-02-25 19:34:53 +00:00
|
|
|
|
|
|
|
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
|
2014-02-25 19:34:53 +00:00
|
|
|
|
2014-04-25 20:18:26 +00:00
|
|
|
conn = boto.connect_autoscale(use_block_device_types=True)
|
2014-02-25 19:34:53 +00:00
|
|
|
config = LaunchConfiguration(
|
2019-10-31 15:44:26 +00:00
|
|
|
name="tester",
|
|
|
|
image_id="ami-abcd1234",
|
|
|
|
instance_type="m1.small",
|
|
|
|
key_name="the_keys",
|
2014-02-25 19:34:53 +00:00
|
|
|
security_groups=["default", "default2"],
|
2014-08-26 17:25:50 +00:00
|
|
|
user_data=b"This is some user_data",
|
2014-02-25 19:34:53 +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
|
|
|
|
),
|
2014-02-25 19:34:53 +00:00
|
|
|
spot_price=0.1,
|
2019-10-31 15:44:26 +00:00
|
|
|
block_device_mappings=[block_device_mapping],
|
2014-02-25 19:34:53 +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")
|
|
|
|
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(
|
2019-12-16 00:22:26 +00:00
|
|
|
"arn:aws:iam::{}:instance-profile/testing".format(ACCOUNT_ID)
|
2019-10-31 15:44:26 +00:00
|
|
|
)
|
2014-02-25 19:34:53 +00:00
|
|
|
launch_config.spot_price.should.equal(0.1)
|
|
|
|
len(launch_config.block_device_mappings).should.equal(3)
|
|
|
|
|
2014-04-25 20:18:26 +00:00
|
|
|
returned_mapping = launch_config.block_device_mappings
|
2014-02-25 19:34:53 +00:00
|
|
|
|
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"])
|
|
|
|
)
|
2014-02-25 19:34:53 +00:00
|
|
|
|
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
|
2014-02-25 19:34:53 +00:00
|
|
|
|
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")
|
2014-02-25 19:34:53 +00:00
|
|
|
|
2019-10-31 15:44:26 +00:00
|
|
|
returned_mapping["/dev/xvdb"].ephemeral_name.should.equal("ephemeral0")
|
2014-02-25 19:34:53 +00:00
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_create_launch_configuration_with_block_device_mappings_boto3():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="t1.micro",
|
|
|
|
KeyName="the_keys",
|
|
|
|
SecurityGroups=["default", "default2"],
|
|
|
|
UserData="This is some user_data",
|
|
|
|
InstanceMonitoring={"Enabled": True},
|
|
|
|
IamInstanceProfile="arn:aws:iam::{}:instance-profile/testing".format(
|
|
|
|
ACCOUNT_ID
|
|
|
|
),
|
|
|
|
SpotPrice="0.1",
|
|
|
|
BlockDeviceMappings=[
|
|
|
|
{"DeviceName": "/dev/xvdb", "VirtualName": "ephemeral0"},
|
|
|
|
{
|
|
|
|
"DeviceName": "/dev/xvdp",
|
|
|
|
"Ebs": {"SnapshotId": "snap-1234abcd", "VolumeType": "standard"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"DeviceName": "/dev/xvdh",
|
|
|
|
"Ebs": {
|
|
|
|
"VolumeType": "io1",
|
|
|
|
"VolumeSize": 100,
|
|
|
|
"Iops": 1000,
|
|
|
|
"DeleteOnTermination": False,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
|
|
|
launch_config["LaunchConfigurationName"].should.equal("tester")
|
|
|
|
|
|
|
|
mappings = launch_config["BlockDeviceMappings"]
|
|
|
|
mappings.should.have.length_of(3)
|
|
|
|
|
|
|
|
xvdh = [m for m in mappings if m["DeviceName"] == "/dev/xvdh"][0]
|
|
|
|
xvdp = [m for m in mappings if m["DeviceName"] == "/dev/xvdp"][0]
|
|
|
|
xvdb = [m for m in mappings if m["DeviceName"] == "/dev/xvdb"][0]
|
|
|
|
|
|
|
|
xvdh.shouldnt.have.key("VirtualName")
|
|
|
|
xvdh.should.have.key("Ebs")
|
|
|
|
xvdh["Ebs"]["VolumeSize"].should.equal(100)
|
|
|
|
xvdh["Ebs"]["VolumeType"].should.equal("io1")
|
|
|
|
xvdh["Ebs"]["DeleteOnTermination"].should.equal(False)
|
|
|
|
xvdh["Ebs"]["Iops"].should.equal(1000)
|
|
|
|
|
|
|
|
xvdp.shouldnt.have.key("VirtualName")
|
|
|
|
xvdp.should.have.key("Ebs")
|
|
|
|
xvdp["Ebs"]["SnapshotId"].should.equal("snap-1234abcd")
|
|
|
|
xvdp["Ebs"]["VolumeType"].should.equal("standard")
|
|
|
|
xvdp["Ebs"]["DeleteOnTermination"].should.equal(False)
|
|
|
|
|
|
|
|
xvdb["VirtualName"].should.equal("ephemeral0")
|
|
|
|
xvdb.shouldnt.have.key("Ebs")
|
|
|
|
|
|
|
|
|
|
|
|
# Has boto3 equivalent
|
2013-09-10 21:04:56 +00:00
|
|
|
@requires_boto_gte("2.12")
|
2017-02-16 03:35:45 +00:00
|
|
|
@mock_autoscaling_deprecated
|
2013-09-10 21:04:56 +00:00
|
|
|
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
|
2013-09-10 21:04:56 +00:00
|
|
|
)
|
|
|
|
conn.create_launch_configuration(config)
|
|
|
|
|
|
|
|
launch_config = conn.get_all_launch_configurations()[0]
|
|
|
|
launch_config.ebs_optimized.should.equal(True)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
# Has boto3 equivalent
|
2014-02-10 19:08:56 +00:00
|
|
|
@requires_boto_gte("2.25.0")
|
2017-02-16 03:35:45 +00:00
|
|
|
@mock_autoscaling_deprecated
|
2014-01-24 15:56:08 +00:00
|
|
|
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
|
2014-01-24 15:56:08 +00:00
|
|
|
)
|
|
|
|
conn.create_launch_configuration(config)
|
|
|
|
|
|
|
|
launch_config = conn.get_all_launch_configurations()[0]
|
|
|
|
launch_config.associate_public_ip_address.should.equal(True)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_create_launch_configuration_additional_parameters():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="t1.micro",
|
|
|
|
EbsOptimized=True,
|
|
|
|
AssociatePublicIpAddress=True,
|
|
|
|
)
|
|
|
|
|
|
|
|
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
|
|
|
launch_config["EbsOptimized"].should.equal(True)
|
|
|
|
launch_config["AssociatePublicIpAddress"].should.equal(True)
|
|
|
|
|
|
|
|
|
|
|
|
# Has boto3 equivalent
|
2014-02-10 19:08:56 +00:00
|
|
|
@requires_boto_gte("2.25.0")
|
2017-02-16 03:35:45 +00:00
|
|
|
@mock_autoscaling_deprecated
|
2014-01-24 15:56:08 +00:00
|
|
|
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")
|
2014-01-24 15:56:08 +00:00
|
|
|
conn.create_launch_configuration(config)
|
|
|
|
|
|
|
|
launch_config = conn.get_all_launch_configurations()[0]
|
|
|
|
launch_config.associate_public_ip_address.should.equal(False)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_create_launch_configuration_additional_params_default_to_false():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="t1.micro",
|
|
|
|
)
|
|
|
|
|
|
|
|
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
|
|
|
launch_config["EbsOptimized"].should.equal(False)
|
|
|
|
launch_config["AssociatePublicIpAddress"].should.equal(False)
|
|
|
|
|
|
|
|
|
|
|
|
# Has boto3 equivalent
|
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)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_create_launch_configuration_defaults_boto3():
|
|
|
|
"""Test with the minimum inputs and check that all of the proper defaults
|
|
|
|
are assigned for the other attributes"""
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="m1.small",
|
|
|
|
)
|
|
|
|
|
|
|
|
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
|
|
|
|
|
|
|
# Defaults
|
|
|
|
launch_config["KeyName"].should.equal("")
|
|
|
|
launch_config["SecurityGroups"].should.equal([])
|
|
|
|
launch_config["UserData"].should.equal("")
|
|
|
|
launch_config["InstanceMonitoring"].should.equal({"Enabled": False})
|
|
|
|
launch_config.shouldnt.have.key("IamInstanceProfile")
|
|
|
|
launch_config.shouldnt.have.key("SpotPrice")
|
|
|
|
|
|
|
|
|
|
|
|
# Has boto3 equivalent
|
2013-09-10 21:04:56 +00:00
|
|
|
@requires_boto_gte("2.12")
|
2017-02-16 03:35:45 +00:00
|
|
|
@mock_autoscaling_deprecated
|
2013-09-10 21:04:56 +00:00
|
|
|
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")
|
2013-09-10 21:04:56 +00:00
|
|
|
conn.create_launch_configuration(config)
|
|
|
|
|
|
|
|
launch_config = conn.get_all_launch_configurations()[0]
|
|
|
|
launch_config.ebs_optimized.should.equal(False)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
# Has boto3 equivalent
|
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)
|
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_launch_configuration_describe_filter_boto3():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
for name in ["tester", "tester2", "tester3"]:
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName=name,
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="m1.small",
|
|
|
|
)
|
|
|
|
|
|
|
|
configs = client.describe_launch_configurations(
|
|
|
|
LaunchConfigurationNames=["tester", "tester2"]
|
|
|
|
)
|
|
|
|
configs["LaunchConfigurations"].should.have.length_of(2)
|
|
|
|
client.describe_launch_configurations()[
|
|
|
|
"LaunchConfigurations"
|
|
|
|
].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):
|
2021-01-27 19:49:33 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
# Has boto3 equivalent
|
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)
|
2021-02-14 11:38:03 +00:00
|
|
|
|
|
|
|
|
2021-09-22 18:05:28 +00:00
|
|
|
@mock_autoscaling
|
|
|
|
def test_launch_configuration_delete_boto3():
|
|
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
|
|
client.create_launch_configuration(
|
|
|
|
LaunchConfigurationName="tester",
|
|
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
|
|
InstanceType="m1.small",
|
|
|
|
)
|
|
|
|
|
|
|
|
client.describe_launch_configurations()[
|
|
|
|
"LaunchConfigurations"
|
|
|
|
].should.have.length_of(1)
|
|
|
|
|
|
|
|
client.delete_launch_configuration(LaunchConfigurationName="tester")
|
|
|
|
|
|
|
|
client.describe_launch_configurations()[
|
|
|
|
"LaunchConfigurations"
|
|
|
|
].should.have.length_of(0)
|
|
|
|
|
|
|
|
|
2021-02-14 11:38:03 +00:00
|
|
|
@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.*"
|
|
|
|
)
|