
    Vhh                         d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ  G d de      Z G d de      Z G d dee      Zy)    )deepcopy)is_boto3_error_code)AWSRetry)ansible_dict_to_boto3_tag_list)boto3_tag_list_to_ansible_dict)boto3_tag_specifications)compare_aws_tags)!ansible_dict_to_boto3_filter_list)BaseResourceManager)BaseWaiterFactory)
Boto3Mixinc                   2     e Zd Z fdZe fd       Z xZS )Ec2WaiterFactoryc                 P    |j                  d      }t        t        |   ||       y )Nec2)clientsuperr   __init__)selfmoduler   	__class__s      j/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/aws/plugins/module_utils/ec2.pyr   zEc2WaiterFactory.__init__   s%     u%.vv>    c                 $    t         t        | 
  }|S N)r   r   _waiter_model_data)r   datar   s     r   r   z#Ec2WaiterFactory._waiter_model_data   s    %t?r   )__name__
__module____qualname__r   propertyr   __classcell__r   s   @r   r   r      s    ?  r   r   c                   j    e Zd Z ej                         d        Z ej                  d      d        Zy)Ec2Boto3Mixinc                 x    | j                   j                  d      } |j                  di |j                         S )Ndescribe_subnets r   get_paginatorpaginatebuild_full_resultr   params	paginators      r   _paginated_describe_subnetsz)Ec2Boto3Mixin._paginated_describe_subnets#   s6    KK--.@A	!y!!+F+==??r   zdescribe subnetsc                 t    	  | j                   di |}|j                  dd       S # t        d      $ r Y y w xY w)NzSubnetID.NotFoundSubnetsr(   )r0   r   get)r   r.   results      r   _describe_subnetszEc2Boto3Mixin._describe_subnets(   sI    	5T55??F zz)T** ##67 		s   & 77N)	r   r   r    r   jittered_backoffr0   r   aws_error_handlerr5   r(   r   r   r%   r%   "   sC    X @ !@ "Z!!"45+ 6+r   r%   c                   L    e Zd ZdZdZdZdZd fd	Z fdZ e	j                  d      dd       Z e	j                  d      d	        Z e	j                  d
      d        Z ej                         d        Z e	j                  d      dd       ZddZd Zd fd	Zd Z xZS )BaseEc2ManagerNTTagSpecificationsc                     t         t        |   |       | j                         | _        t               | _        || _        | j                  r!t        | j                               }|| _
        yy)zW
        Parameters:
            module (AnsibleAWSModule): An Ansible module.
        N)r   r9   r   _create_clientr   dict_tagging_updatesresource_idr   get_resourceoriginal_resource)r   r   r?   resourcer   s       r   r   zBaseEc2Manager.__init__:   sa    
 	nd,V4))+ $&  1 1 34H%-D" r   c                 \    d}|| j                         z  }|t        t        |          z  }|S )NF)_do_taggingr   r9   _flush_update)r   changedr   s     r   rE   zBaseEc2Manager._flush_updateI   s4    4##%%5<>>r   zconnect to AWSc                 d    | j                   j                  |t        j                               }|S )N)retry_decorator)r   r   r   r6   )r   client_namer   s      r   r<   zBaseEc2Manager._create_clientO   s)    ##KAZAZA\#]r   zset tags on resourcec                 @     | j                   j                  dddi| yN	aws_retryTr(   )r   create_tagsr   r.   s     r   	_add_tagszBaseEc2Manager._add_tagsT   !    9$9&9r   zunset tags on resourcec                 @     | j                   j                  dddi| yrK   )r   delete_tagsrN   s     r   _remove_tagszBaseEc2Manager._remove_tagsY   rP   r   c                 x    | j                   j                  d      } |j                  di |j                         S )Ndescribe_tagsr(   r)   r-   s      r   _paginated_describe_tagsz'BaseEc2Manager._paginated_describe_tags^   s5    KK--o>	!y!!+F+==??r   zlist tags on resourcec                 `    |s| j                   }t        d|i      }| j                  |      }|S )Nzresource-id)Filters)r?   r
   rV   )r   r?   filterstagss       r   _describe_tagszBaseEc2Manager._describe_tagsc   s7    **K3]K4PQ,,W,=r   c                     || j                   }| j                  r'| j                  j                  dg       }t        |      S | j	                  |      }t        |      S )NTags)r?   )r?   TAGS_ON_RESOURCE_preupdate_resourcer3   r[   r   )r   r?   rZ   s      r   	_get_tagszBaseEc2Manager._get_tagsk   sa    **K  ++//;D .d33 &&;&?D-d33r   c                    d}| j                   j                  d      }| j                   j                  d      }|rAd}t        |      }| j                  j                  s| j                  | j                  g|       |rOd}| j                  j                  s7|D cg c]  }t        |       }}| j                  | j                  g|       |S c c}w )NFaddremoveT)	Resourcesr]   )Key)	r>   r3   r   r   
check_moderO   r?   r=   rS   )r   rF   tags_to_addtags_to_removerZ   tagkeytag_lists          r   rD   zBaseEc2Manager._do_taggingv   s    ++//6..228<G1+>D;;))$*:*:);$GG;;));IJDV,JJ!!T-=-=,>X!N Ks   Cc                    t         t        |   ||      }|ri| j                  s|j	                  dd        |S | j                  dk(  r:t        |j	                  dg             }t        || j                  g      }|r||d<   |S )N)filter_immutablecreationr]   r:   )types)r   r9   _merge_resource_changesTAGS_ON_CREATEpopr   r   TAG_RESOURCE_TYPE)r   rl   rm   rB   rZ   	tag_specsr   s         r   ro   z&BaseEc2Manager._merge_resource_changes   s    F- G 
 &&VT*  $$(;;5hll626NO4T$BXBXAYZ	4=H01r   c                 (   |yd}| j                         }|rt        |      }nt        |      }|j                  |       t        |||      \  }}|r|| j                  d<   d}|r|| j                  d<   d}|r| j                  dt        |            S y)NFrb   Trc   r]   )r`   r   updater	   r>   _set_resource_valuer   )r   rZ   
purge_tagsrF   current_tagsdesired_tagsrg   rh   s           r   set_tagszBaseEc2Manager.set_tags   s    < ~~' #D>L#L1L%&6|T:&V#^+6D!!%(G.<D!!(+G ++F4RS_4`aar   r   )r   )TF)r   r   r    r?   rr   r^   rp   r   rE   r   r7   r<   rO   rS   r   r6   rV   r[   r`   rD   ro   rz   r"   r#   s   @r   r9   r9   1   s    K (N. "Z!!"23 4 "Z!!"89 : "Z!!":; < X @ !@ "Z!!"9: ;	4$ r   r9   N)copyr   <ansible_collections.amazon.aws.plugins.module_utils.botocorer   ;ansible_collections.amazon.aws.plugins.module_utils.retriesr   ;ansible_collections.amazon.aws.plugins.module_utils.taggingr   r   r   r	   Bansible_collections.amazon.aws.plugins.module_utils.transformationr
   ;ansible_collections.community.aws.plugins.module_utils.baser   r   r   r   r%   r9   r(   r   r   <module>r      sR     \ P f f ` X p [ Y R
( 
+J +F]$7 Fr   