from ._base_response import EC2BaseResponse class IamInstanceProfiles(EC2BaseResponse): def associate_iam_instance_profile(self) -> str: instance_id = self._get_param("InstanceId") iam_instance_profile_name = self._get_param("IamInstanceProfile.Name") iam_instance_profile_arn = self._get_param("IamInstanceProfile.Arn") iam_association = self.ec2_backend.associate_iam_instance_profile( instance_id, iam_instance_profile_name, iam_instance_profile_arn ) template = self.response_template(IAM_INSTANCE_PROFILE_RESPONSE) return template.render(iam_association=iam_association, state="associating") def describe_iam_instance_profile_associations(self) -> str: association_ids = self._get_multi_param("AssociationId") filters = self._get_object_map("Filter") max_items = self._get_param("MaxItems") next_token = self._get_param("NextToken") ( iam_associations, next_token, ) = self.ec2_backend.describe_iam_instance_profile_associations( association_ids, filters, max_items, next_token ) template = self.response_template(DESCRIBE_IAM_INSTANCE_PROFILE_RESPONSE) return template.render(iam_associations=iam_associations, next_token=next_token) def disassociate_iam_instance_profile(self) -> str: association_id = self._get_param("AssociationId") iam_association = self.ec2_backend.disassociate_iam_instance_profile( association_id ) template = self.response_template(IAM_INSTANCE_PROFILE_RESPONSE) return template.render(iam_association=iam_association, state="disassociating") def replace_iam_instance_profile_association(self) -> str: association_id = self._get_param("AssociationId") iam_instance_profile_name = self._get_param("IamInstanceProfile.Name") iam_instance_profile_arn = self._get_param("IamInstanceProfile.Arn") iam_association = self.ec2_backend.replace_iam_instance_profile_association( association_id, iam_instance_profile_name, iam_instance_profile_arn ) template = self.response_template(IAM_INSTANCE_PROFILE_RESPONSE) return template.render(iam_association=iam_association, state="associating") # https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html IAM_INSTANCE_PROFILE_RESPONSE = """ e10deeaf-7cda-48e7-950b-example {{ iam_association.id }} {% if iam_association.iam_instance_profile %} {{ iam_association.iam_instance_profile.arn }} {{ iam_association.iam_instance_profile.id }} {% endif %} {{ iam_association.instance.id }} {{ state }} """ # https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeIamInstanceProfileAssociations.html # Note: this API description page contains an error! Provided `iamInstanceProfileAssociations` doesn't work, you # should use `iamInstanceProfileAssociationSet` instead. DESCRIBE_IAM_INSTANCE_PROFILE_RESPONSE = """ 84c2d2a6-12dc-491f-a9ee-example {% if next_token %}{{ next_token }}{% endif %} {% for iam_association in iam_associations %} {{ iam_association.id }} {{ iam_association.iam_instance_profile.arn }} {{ iam_association.iam_instance_profile.id }} {{ iam_association.instance.id }} {{ iam_association.state }} {% endfor %} """