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 %}
"""