genvid.toolbox.AWSTool

class genvid.toolbox.AWSTool(**kwargs)

Bases: genvid.toolbox.basetool.BaseTool

A set of utilities to access and manipulate AWS cluster resources.

AMI_NAME_RE = re.compile('(?P<prefix>.*)-(?P<type>[^-]*)-(?P<version>[^-]*)-(?P<timestamp>\\d{8}-\\d{6})')

Regex to match an AMI.

AMI_NAME_TMPL = '{prefix}-{type}-{version}-{timestamp}'

Template of the AMI name.

DESCRIPTION = 'Utilities to access and manipulated AWS resources.'
EXITCODE_MESSAGE_RE = re.compile('ExitCode of User Data with PID: (?P<PID>\\d+) is (?P<ExitCode>\\d+)')

Regular Expression for aws_wait_for_windows_instance() check.

NAME = 'aws'
aws_ami_snapshots(image)

Yield the list of EBS snapshot associated with an image.

Parameters:image – An AWS Image instance (must be an instance of self.aws_ec2.Image)

New in version 1.13.0.

aws_copy_ami(ami_id, regions, public=False, force=False)

Copy an AMI identified by ami_id to different regions. The AMI tags will be copied. If public is set to True, all AMI (including the src AMI) will be made public.

aws_delete_ami(image, dryrun: bool = False)

Deregister an image and its associated snapshots.

Parameters:
  • image – An AWS Image instance (must be an instance of self.aws_ec2.Image)
  • dryrun – Doesn’t execute the deletion if True.

New in version 1.13.0.

aws_ec2

A default EC2 resource.

aws_list_amis(ami_type: str, owner: str = '', prefix: str = '', version: str = '')

List the available AMIs.

Parameters:
  • ami_type (str) – The type of AMI. Can be wingame or server.
  • owner (str) – If provided, filter by owner. The value genvidtech is a special alias for the Genvid Technologies Account.
  • prefix (str) – Prefix to filter. Can be ‘*’. If None, it will be either default for the Wingame AMI or genvidtech otherwise.
  • version (str) – Version to filter. Default to GENVID_TOOLBOX_VERSION.
Returns:

A list of EC2 Images.

static aws_publish_image(ami)

Make the AMI public.

aws_rename_ami(ami_id, prefix, public=False, force=False)

Copy an AMI and change its initial prefix.

The name must match the AMI_NAME_RE and formatted with the AMI_NAME_TMPL. The AMI will be made public if public is True.

aws_s3

A default S3 resource.

aws_tag_ami_snapshot(ami, ec2=None)

Tag the AMI Snapshots with the same tags as the AMI.

The tags copied are the Name, Version, and InstanceType.

aws_upload_file(bucket: str, path: str, filepath: str)
aws_wait_for_windows_instance(iid: str, timeout: float = 1800, expect: typing.Union[typing.Callable[[str], typing.Union[int, NoneType]], NoneType] = None) → int

Wait for Windows instance to be ready.

This method tries to detect when an AWS Windows instance is ready. For that, it waits for the instance to be both running and ok, and that expect returns a value other than None in new output from the instance console. If expect is None, the output should match EXITCODE_MESSAGE_RE and the value returned is the exit code of the User Data script.

Parameters:
  • iid – The AWS instance ID.
  • timeout – The timeout in seconds before raising a RuntimeError.
  • expect – If not None, must be a callable taking the console output as argument and returning either None to continue, or the return value.
Returns:

The return value of expect.

New in version 1.19.0.

generate_rsa_keypair(length: int)

Generate an RSA’s key pair.

Parameters:length – The length of the RSA key.
Returns:A tuple of the private key in PEM format and the public key in OpenSSH format.
get_s3_images_bucket_config(bucket: str, path='/') → dict

Get a list of images configuration from the bucket. The image name must match DockerTool.RE_IMAGE_IMAGEID.

Parameters:
  • bucket – The bucket to use.
  • path – The path for the bucket. Default to ‘/’.
update_s3_images(prefixes: typing.List[str], bucket, path)

Update images to S3

Parameters:
  • prefixes – Update only files with these prefixes.
  • bucket – The name of the bucket.
  • path – The prefix key where to upload the files.
class aws.AWSTool

Implementation of genvid.toolbox.AWSTool