Source code for idem_aws.exec.aws.ec2.instance_type

from typing import List


[docs]async def get( hub, ctx, *, name: str = None, filters: List = None, resource_id: str = None ): """ Use an un-managed Instance-type as a data-source. Supply one of the inputs as the filter. Args: name(str): The name of the Idem state. resource_id(str, Optional): AWS Ec2 Instance type to identify the resource. filters(list[dict[str, Any]], Optional): One or more filters: for example, tag :<key>, tag-key. A complete list of filters can be found at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_instance_types Request Syntax: .. code-block:: sls [Idem-state-name]: aws.ec2.instance_type.search: - resource_id: 'string' - filters: - name: 'string' values: 'list' - name: 'string' values: 'list' Examples: .. code-block:: sls my-unmanaged-instance-type: exec.run: - path: aws.ec2.instance_type.get: - filters: - name: instance-type values: - '*.nano' - name: hypervisor values: - xen - name: processor-info.supported-architecture values: - x86_64 my_instance: aws.ec2.instance.present: - instance_type: ${aws.ec2.instance_type:my-unmanaged-instance-type:resource_id} """ result = dict(comment=[], ret=None, result=True) # Perform validation on the parameters syntax_validation = hub.tool.aws.search_utils.search_filter_syntax_validation( filters=filters ) result["result"] &= syntax_validation["result"] if not result["result"]: result["comment"].append(syntax_validation["comment"]) return result boto3_filter = hub.tool.aws.search_utils.convert_search_filter_to_boto3( filters=filters ) # Get all instances that match the given filters ret = await hub.exec.boto3.client.ec2.describe_instance_types( ctx, Filters=boto3_filter, InstanceTypes=[resource_id] if resource_id else None, ) result["result"] &= ret.result if not ret: result["comment"].append(ret.comment) return result # Get all the instance types that matched the filter instance_types = {i["InstanceType"] for i in ret.ret["InstanceTypes"]} # Check for null results if not instance_types: result["result"] = False result["comment"] += [ f"Unable to find an aws.ec2.instance_type for '{name}' that matched the given filters" ] return result # Get the first instance from the results instance_type = next(iter(instance_types)) # Add a comment if there were multiple results if len(instance_types) > 1: result["comment"] += [ f"More than one aws.ec2.instance resource was found. Use resource '{instance_type}'" ] result["ret"] = dict(resource_id=instance_type) return result