Ejemplo n.º 1
0
def test_ami_describe_executable_users_negative():
    conn = boto3.client('ec2', region_name='us-east-1')
    ec2 = boto3.resource('ec2', 'us-east-1')
    ec2.create_instances(ImageId='', MinCount=1, MaxCount=1)
    response = conn.describe_instances(Filters=[{
        'Name': 'instance-state-name',
        'Values': ['running']
    }])
    instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
    image_id = conn.create_image(InstanceId=instance_id,
                                 Name='TestImage')['ImageId']

    USER1 = '123456789011'
    USER2 = '113355789012'

    ADD_USER_ARGS = {
        'ImageId': image_id,
        'Attribute': 'launchPermission',
        'OperationType': 'add',
        'UserIds': [USER1]
    }

    # Add users and get no images
    conn.modify_image_attribute(**ADD_USER_ARGS)

    attributes = conn.describe_image_attribute(ImageId=image_id,
                                               Attribute='LaunchPermissions',
                                               DryRun=False)
    attributes['LaunchPermissions'].should.have.length_of(1)
    attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1)
    images = conn.describe_images(ExecutableUsers=[USER2])['Images']
    images.should.have.length_of(0)
Ejemplo n.º 2
0
def test_ami_describe_executable_users_and_filter():
    conn = boto3.client('ec2', region_name='us-east-1')
    ec2 = boto3.resource('ec2', 'us-east-1')
    ec2.create_instances(ImageId='',
                         MinCount=1,
                         MaxCount=1)
    response = conn.describe_instances(Filters=[{'Name': 'instance-state-name','Values': ['running']}])
    instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
    image_id = conn.create_image(InstanceId=instance_id,
                                 Name='ImageToDelete',)['ImageId']


    USER1 = '123456789011'

    ADD_USER_ARGS = {'ImageId': image_id,
                     'Attribute': 'launchPermission',
                     'OperationType': 'add',
                     'UserIds': [USER1]}

    # Add users and get no images
    conn.modify_image_attribute(**ADD_USER_ARGS)

    attributes = conn.describe_image_attribute(ImageId=image_id,
                                               Attribute='LaunchPermissions',
                                               DryRun=False)
    attributes['LaunchPermissions'].should.have.length_of(1)
    attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1)
    images = conn.describe_images(ExecutableUsers=[USER1],
                                  Filters=[{'Name': 'state', 'Values': ['available']}])['Images']
    images.should.have.length_of(1)
    images[0]['ImageId'].should.equal(image_id)
Ejemplo n.º 3
0
def test_ami_describe_executable_users_and_filter():
    conn = boto3.client("ec2", region_name="us-east-1")
    ec2 = boto3.resource("ec2", "us-east-1")
    ec2.create_instances(ImageId="", MinCount=1, MaxCount=1)
    response = conn.describe_instances(
        Filters=[{"Name": "instance-state-name", "Values": ["running"]}]
    )
    instance_id = response["Reservations"][0]["Instances"][0]["InstanceId"]
    image_id = conn.create_image(InstanceId=instance_id, Name="ImageToDelete")[
        "ImageId"
    ]

    USER1 = "123456789011"

    ADD_USER_ARGS = {
        "ImageId": image_id,
        "Attribute": "launchPermission",
        "OperationType": "add",
        "UserIds": [USER1],
    }

    # Add users and get no images
    conn.modify_image_attribute(**ADD_USER_ARGS)

    attributes = conn.describe_image_attribute(
        ImageId=image_id, Attribute="LaunchPermissions", DryRun=False
    )
    attributes["LaunchPermissions"].should.have.length_of(1)
    attributes["LaunchPermissions"][0]["UserId"].should.equal(USER1)
    images = conn.describe_images(
        ExecutableUsers=[USER1], Filters=[{"Name": "state", "Values": ["available"]}]
    )["Images"]
    images.should.have.length_of(1)
    images[0]["ImageId"].should.equal(image_id)
Ejemplo n.º 4
0
def create_Instance(name, min, max):
    instances = ec2.create_instances(ImageId='ami-c57261a5',
                                     MinCount=int(min),
                                     MaxCount=int(max),
                                     KeyName=name,
                                     InstanceType="t2.micro",
                                     SecurityGroupIds=['sg-b0e167c9'])
    print("instance with key pair [{}] created\n".format(name))
    return instances
Ejemplo n.º 5
0
def create_new_instances(num):
    ec2 = boto3.resource('ec2')

    # create a new EC2 instance
    instances = ec2.create_instances(ImageId='ami-04122be15033aa7ec',
                                     MinCount=1,
                                     MaxCount=int(num),
                                     InstanceType='t2.micro',
                                     SecurityGroupIds=['sg-074b481ef501670d4'],
                                     KeyName='ec2-keypair')

    print("Created " + str(num) + " new instances")
Ejemplo n.º 6
0
def test_ami_filter_by_self():
    client = boto3.client('ec2', region_name='us-east-1')

    my_images = client.describe_images(Owners=['self'])
    assert len(my_images) == 0

    # Create a new image
    instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0]
    image = instance.create_image(Name='test-image')

    my_images = client.describe_images(Owners=['self'])
    assert len(my_images) == 1
Ejemplo n.º 7
0
def test_ami_filter_by_self():
    client = boto3.client('ec2', region_name='us-east-1')

    my_images = client.describe_images(Owners=['self'])
    assert len(my_images) == 0

    # Create a new image
    instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0]
    image = instance.create_image(Name='test-image')

    my_images = client.describe_images(Owners=['self'])
    assert len(my_images) == 1
Ejemplo n.º 8
0
def test_ami_filter_by_empty_tag():
    ec2 = boto3.resource("ec2", region_name="us-west-1")
    client = boto3.client("ec2", region_name="us-west-1")

    fake_images = []
    instance = ec2.create_instances(ImageId=EXAMPLE_AMI_ID,
                                    MinCount=1,
                                    MaxCount=1)[0]
    for i in range(10):
        image = client.create_image(
            InstanceId=instance.instance_id,
            Name="MyAMI{}".format(i),
            Description="Test",
        )

        ec2.create_tags(
            Resources=[image["ImageId"]],
            Tags=[
                {
                    "Key":
                    "Base_AMI_Name",
                    "Value":
                    "Deep Learning Base AMI (Amazon Linux 2) Version 31.0",
                },
                {
                    "Key": "OS_Version",
                    "Value": "AWS Linux 2"
                },
            ],
        )
        fake_images.append(image)
    # Add release tags to some of the images in the middle
    for image in fake_images[3:6]:
        ec2.create_tags(Resources=[image["ImageId"]],
                        Tags=[{
                            "Key": "RELEASE",
                            "Value": ""
                        }])
    images_filter = [
        {
            "Name": "tag:Base_AMI_Name",
            "Values": ["Deep Learning Base AMI (Amazon Linux 2) Version 31.0"],
        },
        {
            "Name": "tag:OS_Version",
            "Values": ["AWS Linux 2"]
        },
        {
            "Name": "tag:RELEASE",
            "Values": [""]
        },
    ]
    assert len(client.describe_images(Filters=images_filter)["Images"]) == 3
Ejemplo n.º 9
0
def test_ami_filter_wildcard():
    ec2 = boto3.resource('ec2', region_name='us-west-1')
    instance = ec2.create_instances(ImageId='ami-1234abcd',
                                    MinCount=1,
                                    MaxCount=1)[0]
    image = instance.create_image(Name='test-image')
    filter_result = list(
        ec2.images.filter(Owners=['111122223333'],
                          Filters=[{
                              'Name': 'name',
                              'Values': ['test*']
                          }]))
    assert filter_result == [image]
Ejemplo n.º 10
0
def test_create_image_with_tag_specification():
    ec2 = boto3.resource("ec2", region_name="us-west-1")
    client = boto3.client("ec2", region_name="us-west-1")
    tag_specifications = [
        {
            "ResourceType":
            "image",
            "Tags": [
                {
                    "Key":
                    "Base_AMI_Name",
                    "Value":
                    "Deep Learning Base AMI (Amazon Linux 2) Version 31.0",
                },
                {
                    "Key": "OS_Version",
                    "Value": "AWS Linux 2",
                },
            ],
        },
    ]
    instance = ec2.create_instances(ImageId=EXAMPLE_AMI_ID,
                                    MinCount=1,
                                    MaxCount=1)[0]
    image_id = client.create_image(
        InstanceId=instance.instance_id,
        Name="test-image",
        Description="test ami",
        TagSpecifications=tag_specifications,
    )["ImageId"]

    image = client.describe_images(ImageIds=[image_id])["Images"][0]
    image["Tags"].should.equal(tag_specifications[0]["Tags"])

    with pytest.raises(ClientError) as ex:
        client.create_image(
            InstanceId=instance.instance_id,
            Name="test-image",
            Description="test ami",
            TagSpecifications=[{
                "ResourceType": "invalid-resource-type",
                "Tags": [{
                    "Key": "key",
                    "Value": "value"
                }],
            }],
        )
    ex.value.response["Error"]["Code"].should.equal("InvalidParameterValue")
    ex.value.response["Error"]["Message"].should.equal(
        "'invalid-resource-type' is not a valid taggable resource type for this operation."
    )
Ejemplo n.º 11
0
 def exposed_replicate_node(self):
     ec2 = boto3.resource('ec2', region_name='us-west-2',
                          aws_access_key_id=ACCESS_KEY,
                          aws_secret_access_key=SECRET_KEY)
     new_instance = ec2.create_instances(ImageId=AMI_ID,
                                         InstanceType='t1.micro',
                                         MinCount=1, MaxCount=1,
                                         SecurityGroups=[SECUR_GROUP],
                                         IamInstanceProfile={'Name' :
                                                             'newDataNode'})
     instance_id = new_instance[0]
     print('Created new instance: ', instance_id.public_ip_address)
     #TODO: create an image and then call this file in the instance
     pass
Ejemplo n.º 12
0
def create_Instance(name, min, max):
	instances = ec2.create_instances(
		ImageId='ami-d8a4bbb8', 
		MinCount=int(min), 
		MaxCount=int(max),
		KeyName=name,
		InstanceType="t2.micro",
		SecurityGroupIds = ['sg-b0e167c9']
	)
	print("instance with key pair [{}] created\n".format(name))
	instance = instances[0]
	instance.wait_until_running()
	instance.load()
	dns = instance.public_dns_name
	labelMe = "http://" + dns + "/LabelMeAnnotationTool/tool.html"
	print(labelMe)
	return labelMe, dns
if ImageId_input > 4:
    print("Please Enter Correct Input:\n")
    ImageId_input = int(
        input(
            "SELECT YOUR MACHINE\n1. Ubuntu18 \n2. Ubuntu16  \n3. Amazon-Linux2 \n4. Redhat-Linux7.6  \n"
        ))
InstanceTypes = ['t2.micro', 't2.small', 't2.medium', 't2.large']
InstanceTypeInput = int(
    input("1. t2.micro \n2. t2.small \n3. t2.medium  \n4. t2.large \n"))
InstanceType = InstanceTypes[InstanceTypeInput - 1]

instances = ec2.create_instances(
    ImageId=ImageId,
    MinCount=1,
    MaxCount=1,
    InstanceType=InstanceType,
    KeyName=pem_name,
    SecurityGroupIds=[
        'sg-0a0258e39126bcc48',
    ],
)
instance_id = (instances[0].id)
print("WAIT SERVER IS GETTING STARTED")
time.sleep(100)

get_instance = ec2.instances.filter(InstanceIds=[instance_id])
for i in get_instance:
    IP = i.public_ip_address

pem_file_location = input(
    "Please ENTER the .pem file location (don't include name of file)\n")
Ejemplo n.º 14
0
def test_ami_filter_wildcard():
    ec2 = boto3.resource('ec2', region_name='us-west-1')
    instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0]
    image = instance.create_image(Name='test-image')
    filter_result = list(ec2.images.filter(Owners=['111122223333'], Filters=[{'Name':'name', 'Values':['test*']}]))
    assert filter_result == [image]
Ejemplo n.º 15
0
def add_servers_to_region_boto3(ami_id, count, region):
    ec2 = boto3.resource("ec2", region_name=region)
    return ec2.create_instances(ImageId=ami_id, MinCount=count, MaxCount=count)
Ejemplo n.º 16
0
def create_instances(region=None,
                     instance_names=[],
                     pg_name='',
                     image_id='',
                     instance_type='',
                     key_name='',
                     security_group_ids=[],
                     subnet_id=None,
                     ipv6_address_count=0,
                     ebs_optimized=None,
                     min_count=1,
                     max_count=1):
    '''Create EC2 instance.
    Parameters:
        region         : string, the AWS region.
        instance_names : list, the list of instnace name for creating instances.
        pg_name        : string, the name of placement group for creating instances in.
        ......
    Reture values:
        True  : if request succeed.
        False : if request failed.
    '''

    # check inputs
    if min_count > max_count:
        print 'Invalid Inputs: parameter "min_count" ({0}) can not be greater than "max_count" ({1}).'.format(
            min_count, max_count)
        return False

    if len(instance_names) != max_count:
        print 'Invalid Inputs: parameter "instance_names" provided {0} name(s), however "max_count" ({1}) name(s) are required.'.format(
            len(instance_names), max_count)
        return False

    if not key_name:
        key_name = EC2CFG['KEY_NAME']

    # connect to resource
    ec2 = boto3.resource('ec2')

    # check if instance already exists
    instance_iterator = ec2.instances.filter(Filters=[{
        'Name': 'tag:Name',
        'Values': instance_names
    }])
    instance_list = list(instance_iterator)

    if instance_list:
        for instance in instance_list:
            print '%s, known as %s, already exists.' % (instance, [
                x['Value'] for x in instance.tags if x['Key'] == 'Name'
            ])
        print 'Exit without creating any instance.'
        return False

    # launch instance
    print '1. Creating instance: %s' % (instance_names)

    kwargs = {}
    kwargs['ImageId'] = image_id
    kwargs['InstanceType'] = instance_type
    kwargs['KeyName'] = key_name
    kwargs['SecurityGroupIds'] = security_group_ids
    kwargs['SubnetId'] = subnet_id
    kwargs['Ipv6AddressCount'] = ipv6_address_count
    kwargs['MinCount'] = min_count
    kwargs['MaxCount'] = max_count
    kwargs['Placement'] = {'GroupName': pg_name}
    if ebs_optimized in (True, False):
        kwargs['EbsOptimized'] = ebs_optimized

    print 'kwargs = %s' % (kwargs)

    try:
        instance_list = ec2.create_instances(DryRun=True, **kwargs)
    except ClientError as e:
        if 'DryRunOperation' not in str(e):
            print e
            return False

    try:
        instance_list = ec2.create_instances(**kwargs)
        print(instance_list)
    except ClientError as e:
        raise

    # set instance name
    print '2. Creating tag as instance name'

    for (instance, instance_name) in zip(instance_list, instance_names):
        print '%s {\'Name\': %s}' % (instance, instance_name)
        ec2.create_tags(Resources=[instance.id],
                        Tags=[{
                            'Key': 'Name',
                            'Value': instance_name
                        }])

    # waiting for running
    print '3. Waiting instance state become running'
    for instance in instance_list:
        print "{0}: Instance State: {1}".format(instance,
                                                instance.state['Name'])
        while instance.state['Name'] == u'pending':
            time.sleep(10)
            instance.load()
            print "{0}: Instance State: {1}".format(instance,
                                                    instance.state['Name'])

    print 'create_instances() finished'
    return True