
    Vhs                     B   d dl mZmZmZ eZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ dZd	Zd	ZdZdZ	 d d
lmZ d dl m!Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z( d dl m)Z)  ee"       ed      k\  r	dZd dl m*Z+ n  ee"       ed      k\  r	dZd dl m*Z+ nd dl m+Z+ 	 d dl0Z dZ1	 d dl2Z dZ3	 d dlm4Z4 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM dZNes#dZ" G d deO      Z+ G d de5      Z$ G d de5      Z%d ZPd ZQd  ZRd!ZSd"ZTd#ZU G d$ d%e+      ZV G d& d'eV      ZWy# e,$ r%Z- e.e-      Z ej^                         Zd	ZY dZ-[-dZ-[-ww xY w# e,$ r d	Z1Y w xY w# e,$ r d	Z3Y w xY w# e,$ r  G d de5      Z4Y w xY w)(    )absolute_importdivisionprint_functionN)AnsibleModulemissing_required_lib)MappingSequence)string_types)BOOLEANS_TRUEBOOLEANS_FALSE)LooseVersionTF)SSLError)__version__)APIErrorNotFoundTLSParameterError)	TLSConfigauthz3.0.0)	APIClient2.0.0)Client)RequestExceptionc                       e Zd Zy)r   N__name__
__module____qualname__     p/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/docker/plugins/module_utils/common.pyr   r   K       r    r   )DEFAULT_DOCKER_HOSTDEFAULT_TLSDEFAULT_TLS_VERIFYDEFAULT_TLS_HOSTNAMEDEFAULT_TIMEOUT_SECONDSDOCKER_COMMON_ARGSDOCKER_COMMON_ARGS_VARSDOCKER_MUTUALLY_EXCLUSIVEDOCKER_REQUIRED_TOGETHERDEFAULT_DOCKER_REGISTRYBYTE_SUFFIXESis_image_name_idis_valid_tagsanitize_resultDockerBaseClassupdate_tls_hostnamecompare_dict_allow_more_presentcompare_genericDifferenceTracker"clean_dict_booleans_for_docker_apiconvert_duration_to_nanosecondparse_healthcheckomit_none_from_dictz1.8.0c                       e Zd Zd Zy)r   c                      y Nr   )selfkwargss     r!   __init__zClient.__init__r   s    r    N)r   r   r   r?   r   r    r!   r   r   q   s    	r    r   c                       e Zd Zy)r   Nr   r   r    r!   r   r   u   r"   r    r   c                       e Zd Zy)r   Nr   r   r    r!   r   r   x   r"   r    r   c                 >   d|v rKt        t              t        d      k\  r0|j                  d      }| | dj                  t        |             t	        d |j                         D              }	 t        di |}|S # t        $ r} | d|z         Y d }~y d }~ww xY w)Nassert_hostnamez7.0.0b1aN  tls_hostname is not compatible with Docker SDK for Python 7.0.0+. You are using Docker SDK for Python {docker_py_version}. The tls_hostname option (value: {tls_hostname}) has either been set directly or with the environment variable DOCKER_TLS_HOSTNAME. Make sure it is not set, or switch to an older version of Docker SDK for Python.)docker_py_versiontls_hostnamec              3   0   K   | ]  \  }}|	||f  y wr<   r   ).0kvs      r!   	<genexpr>z"_get_tls_config.<locals>.<genexpr>   s     ETQq}1a&Es   
	zTLS config error: %sr   )r   docker_versionpopformatdictitemsr   r   )fail_functionr>   rC   
tls_configexcs        r!   _get_tls_configrS   |   s    F"|N'C|T]G^'^ **%67&d ekdj&4!0 ek e	 EV\\^EEF4((
 4,s2334s   1A> >	BBBc                     | d   xs | d   S )N
tls_verifytlsr   r   s    r!   is_using_tlsrW      s    ,e,r    c                    t        |       r| d   j                  dd      | d<   t        | d   | d   | d         }| d   rDt        d| d	   |
      }| d   r| d   r| d   | d   f|d<   | d   r| d   |d<   t        di ||d<   n7| d   r2t        d|      }| d   r| d   r| d   | d   f|d<   t        di ||d<    | j                  d      r(t        t              t        d      k  r |d       d|d<   |S )Ndocker_hostztcp://zhttps://api_versiontimeout)base_urlversionr[   rU   TrE   )verifyrC   rP   	cert_pathkey_pathclient_certcacert_pathca_certrV   F)r^   rP   use_ssh_clientz4.4.0zAuse_ssh_client=True requires Docker SDK for Python 4.4.0 or newerr   )rW   replacerN   rS   getr   rK   )r   rP   resultrQ   s       r!   get_connect_paramsrh      sI   D"=199(JO]m$]#YF L 0'


 j!1)-k):D<L(MJ}%$($7Jy!'5*5u	e'

 j!1)-k):D<L(MJ}%'5*5utxx !',w*??]^#'  Mr    z?Try `pip uninstall docker-py` followed by `pip install docker`.z.Use `pip install --upgrade docker` to upgrade.z1Use `pip install --upgrade docker-py` to upgrade.c                        e Zd Zd fd	ZddZej                  d        ZddZe	dd       Z
ej                  d        Zed        Zd Zd	 Zdd
ZddZd ZddZd ZddZ fdZ xZS )AnsibleDockerClientBasec                 n   |t         }t        |      t        d      k\  }t        t              | _        t        r>t
        r8| j                  dt        j                         dt        j                  d       t        s1t        d      }|dz   dz   }| j                  |t        z  t               | j                  t        |      k  rod	}|s
|t        z  }n%t        t        d
      k  r
|t         z  }n	|t"        z  }| j                  |t        t        j                         t        j                  |fz         t%        | j&                  | j                        | _        	 t+        t,        | ^  di | j(                   | j0                  | _        t        | j2                        | _        |xs d}| j8                  t        |      k  r#| j                  d| j2                  d|d       y y # t4        $ r}| j                  d|z         Y d }~~d }~wt6        $ r}| j                  d|z         Y d }~d }~ww xY w)Nr   a  Cannot have both the docker-py and docker python modules (old and new version of Docker SDK for Python) installed together as they use the same namespace and cause a corrupt installation. Please uninstall both packages, and re-install only the docker-py or docker python module (for z
's Python z). It is recommended to install the docker module. Please note that simply uninstalling one of the modules can leave the other module in a broken state.zQDocker SDK for Python: docker>=5.0.0 (Python >= 3.6) or docker<5.0.0 (Python 2.7)z:, for example via `pip install docker` (Python >= 3.6) or z;`pip install docker==4.4.4` (Python 2.7). The error was: %s)	exceptionz\Error: Docker SDK for Python version is %s (%s's Python %s). Minimum version required is %s.z2.0)rP   zDocker API error: %szError connecting: %sz1.25zDocker API version is z. Minimum version required is .r   )MIN_DOCKER_VERSIONr   rK   rD   HAS_DOCKER_MODELSHAS_DOCKER_SSLADAPTERfailplatformnodesys
executableHAS_DOCKER_PYr   HAS_DOCKER_ERRORHAS_DOCKER_TRACEBACK DOCKERPYUPGRADE_RECOMMEND_DOCKER DOCKERPYUPGRADE_SWITCH_TO_DOCKERDOCKERPYUPGRADE_UPGRADE_DOCKERrh   auth_params_connect_paramssuperrj   r?   rZ   docker_api_version_strr   	Exceptiondocker_api_version)r=   min_docker_versionmin_docker_api_versionNEEDS_DOCKER_PY2msgrR   	__class__s         r!   r?   z AnsibleDockerClientBase.__init__   s   %!3();<W@UU!-n!=!6II
 #+--/3>>C D & (C DCTTOPCIIc,,8LIM!!L1C$DDpC# 77,u"557755IIc^X]]_cnnN`aab1$2B2BRVR[R[\	4)49QD<P<PQ*.*:*:D' #/t/J/J"K!7!A6""\2H%IIIIUYUpUp  sI  J  K J  	4II,s233 	4II,s233	4s$   .G( (	H41H

H4H//H4c                      y r<   r   )r=   r   pretty_prints      r!   logzAnsibleDockerClientBase.log       r    c                      y r<   r   r=   r   r>   s      r!   rq   zAnsibleDockerClientBase.fail       r    c                      y r<   r   r=   r   r]   datecollection_names        r!   	deprecatez!AnsibleDockerClientBase.deprecate   r   r    c                    |4|dk(  r|t         v ry|t        v ryt        |      S |dk(  rt        |      S |S |t        j
                  j                  |      }|| dk(  r t        j                  j                  |d      S | dk(  r t        j                  j                  |d      S | d	k(  r t        j                  j                  |d
      S |dk(  r|t         v ry|t        v ryt        |      S |dk(  rt        |      S |S |S )NboolTFintr_   zcert.pemrb   zca.pemr`   zkey.pem)	r   r   r   r   osenvironrf   pathjoin)
param_nameparam_valueenv_variabledefault_valuetype	env_values         r!   
_get_valuez"AnsibleDockerClientBase._get_value  s   "v~-/.0 K((u};''#

|4I$,77<<	:>>.77<<	8<<+77<<	9==6> M1# N2$	?*5=y>)   r    c                      y r<   r   r=   s    r!   _get_paramsz#AnsibleDockerClientBase._get_params(  r   r    c                    | j                  d       | j                         }t               }t        D ]  }|j	                  |      ||<    t        | j                  d|d   dt        d      | j                  d|d   dd d      | j                  d|d   d	d
d      | j                  d|d   dd d      | j                  d|d   dd d      | j                  d|d   dd d      | j                  d|d   dt        d      | j                  d|d   dt        d      | j                  d|d   dt        d      | j                  d|d   d dd      
      }t        |       |S )NzGetting credentialsrY   DOCKER_HOSTstr)r   rE   DOCKER_TLS_HOSTNAMErZ   DOCKER_API_VERSIONautorb   ca_pathDOCKER_CERT_PATHr_   ra   r`   
client_keyrV   
DOCKER_TLSr   validate_certsDOCKER_TLS_VERIFYr[   DOCKER_TIMEOUTr   rd   F)
rY   rE   rZ   rb   r_   r`   rV   rU   r[   rd   )r   r   rN   r(   rf   r   r#   r$   r%   r'   r2   )r=   client_paramsparamskeyrg   s        r!   r|   z#AnsibleDockerClientBase.auth_params,  s   
 	&'((*% 	1C'++C0F3K	1 vm7Lm(;% ( I9O)>5 ) Rvm7LNb(.U ( <vi7HJ\^binoook6-3HJ\^binoo__Z1EGY[_fk_lve}lKV\]'7@P9QSf'9 ' HOOIvi/@BR$;% $ I??+;VDT=UW[]bio?p
$ 	F#r    c           
          t        j                  dt        |            }|rF| j                  d| j                  d   d|j                  d      d|j                  d      d       | j                  d|z         y )	Nz!hostname.*doesn\'t match (\'.*\')zNYou asked for verification that Docker daemons certificate's hostname matches rE   z'. The actual certificate's hostname is    zY. Most likely you need to set DOCKER_TLS_HOSTNAME or pass `tls_hostname` with a value of zS. You may also use TLS without verification by setting the `tls` parameter to true.zSSL Exception: %s)rematchr   rq   r|   group)r=   errorr   s      r!   _handle_ssl_errorz)AnsibleDockerClientBase._handle_ssl_errorO  sf    =s5zJII )).95;;q>5;;WX>	[ \
 			%/0r    c                     	 | j                  d|z         | j                  |      }| j                  d       |S # t        $ r
}Y d }~y d }~wt        $ r}| j	                  d|z         Y d }~y d }~ww xY w)NzInspecting container Id %s)	containerzCompleted container inspectionzError inspecting container: %s)r   inspect_containerr   r   rq   )r=   container_idrg   dummyrR   s        r!   get_container_by_idz+AnsibleDockerClientBase.get_container_by_idY  so    	>HH1L@A++l+CFHH56M 	 	>II6<==	>s   8; 	A3	A3A..A3c                    |y|}|j                  d      sd|z   }d}	 | j                  d      D ][  }| j                  d|d   z         t        |d   t              r||d   v r|} n&|d   j                  |      r|} n|d   |k(  sY|} n |y| j                  |d         S # t
        $ r}| j                  |       Y d}~6d}~wt        $ r}| j                  d|z         Y d}~[d}~ww xY w)	zG
        Lookup a container and return the inspection results.
        N/T)allztesting container: %sNamesIdz#Error retrieving container list: %s)

startswith
containersr   
isinstancelistr   r   r   rq   r   )r=   namesearch_namerg   r   rR   s         r!   get_containerz%AnsibleDockerClientBase.get_containerd  s    <s#*K	C!___6 
	0Ig4FGHi0$7K9U\K]<]&FT?--d3&FT?d*&F
  >''t55  	(""3'' 	CII;cABB	Cs*   A*B& 
B& &	C//CC/C**C/c                 N   ||yd}|Q	 | j                         D ]=  }| j                  d|d   z         ||d   k(  r|} n|d   j                  |      s;|} n ||d   }|9	 | j                  d|z         | j                  |      }| j                  d       |S |S # t        $ r}| j	                  |       Y d}~cd}~wt
        $ r}| j                  d|z         Y d}~d}~ww xY w# t        $ r
}Y d}~yd}~wt
        $ r}| j                  d|z         Y d}~|S d}~ww xY w)	zE
        Lookup a network and return the inspection results.
        Nztesting network: %sNamer   z!Error retrieving network list: %szInspecting network Id %szCompleted network inspectionzError inspecting network: %s)	networksr   r   r   r   r   rq   inspect_networkr   )r=   r   
network_idrg   networkrR   r   s          r!   get_networkz#AnsibleDockerClientBase.get_network  sN    <J.E#}} GHH2gfoFGwv.!(t}//5!( J!@3j@A--j978 v%  ,&&s++ E		=CDDE   @		83>??@sH   A
B B %6C+ 	C((B>>C(
C##C(+	D$9D$DD$c                    |sy| j                  d|d|       | j                  ||      }|st        j                  |      \  }}|dk(  r| j                  d|z         | j                  ||      }|sE|j	                  d      r4|t        d      d }| j                  d|z         | j                  ||      }|s-|d|}| j                  d|z         | j                  ||      }|s1d|vr-|d|}| j                  d|z         | j                  ||      }t        |      d	kD  r| j                  d
|d|       t        |      d	k(  r	 | j                  |d   d         }|S | j                  d|d|d       y# t        $ r | j                  d|d|d       Y yt        $ r.}| j                  d|d|dt        |             Y d}~S d}~ww xY w)zV
        Lookup an image (by name and tag) and return the inspection results.
        NzFind image :z	docker.iozCheck for docker.io image: %szlibrary/r   z	/library/r   z)Daemon returned more than one result for r   r   zImage z not found.zError inspecting image  - )r   _image_lookupr   resolve_repository_namer   lenrq   inspect_imager   r   r   )	r=   r   tagimagesregistry	repo_namelookup
inspectionrR   s	            r!   
find_imagez"AnsibleDockerClientBase.find_image  s    tS12##D#."&">">t"DHi;& 89DE++Is;)"6"6z"B&s:'78FHH<vEF!//<F )1)<FHH<vEF!//<F#Y"6 19)DFHH<vEF!//<Fv;?II$PSTUv;!W!//q	$@
 T378  T3?@ W		sCPSHUVVWs   F !G$G,#GGc           	      T   |sy| j                  d|z         	 | j                  |      }|S # t        $ r@}|s | j                  d|dt	        |             | j                  d|z         Y d}~yd}~wt
        $ r+}| j                  d|dt	        |             Y d}~S d}~ww xY w)zL
        Lookup an image (by ID) and return the inspection results.
        NzFind image %s (by ID)zError inspecting image ID r   zImage %s not found.)r   r   r   rq   r   r   )r=   image_idaccept_missing_imager   rR   s        r!   find_image_by_idz(AnsibleDockerClientBase.find_image_by_id  s     (834	R++H5J   	'		3s8TUHH*X56 	RIIXs3xPQQ	Rs    , 	B'6A00B'< B""B'c           	      8   	 | j                  |      }}|rL|d|}|d|}g }|D ]7  }|j	                  d      }	|j	                  d      }
|	r||	v s|
s.||
v s3|g} |S  |S # t        $ r*}| j                  d|dt        |             Y d}~d}~ww xY w)	z
        Including a tag in the name parameter sent to the Docker SDK for Python images method
        does not work consistently. Instead, get the result set for name and manually check
        if the tag exists.
        )r   zError searching for image r   Nr   @RepoTagsRepoDigests)r   r   rq   r   rf   )r=   r   r   responserR   r   r   lookup_digestimagetagsdigestss              r!   r   z%AnsibleDockerClientBase._image_lookup  s    	N{{{-H  $c*F'+S1MF! yy,))M2Vt^]g=U#WF   	NIIT3s8LMM	Ns   A& &	B/ BBc                    t        |dd      }|||d<   | j                  d|d|       | j                  ||      }	  | j                  |fi |D ]  }| j                  |d       |j	                  d      s(|j	                  d	      rJ|j	                  d	      }| j                  d
|d|j	                  d      d|j	                  d             | j                  d
|d|j	                  d              	 | j                  ||      }	|	||	k(  fS # t        $ r-}| j                  d|d|dt        |             Y d}~Jd}~ww xY w)z
        Pull an image
        T)r   streamdecodeNrr   zPulling image r   )r   r   errorDetailzError pulling z	 - code: codez
 message: messager   zError pulling image )rN   r   r   pullrf   rq   r   r   )
r=   r   r   rr   r>   old_taglineerror_detailrR   new_tags
             r!   
pull_imagez"AnsibleDockerClientBase.pull_image  sF    

 !)F:$45//$,	P!		$1&1 	WD188G$xx.'+xx'>		tO[O_O_`fOgO[O_O_`iOj#l m 		T488GCT"UV	W //$,7***  	PII$SXNOO	Ps    :D ;BD 	E!#E		Ec                 (   | j                   t        d      k  rft        j                  |      d   }t        j                  | |      }|r6| j                  | j                  | j                  d|      d|i      d      S t        t        | *  |fi |S )z
        Get image digest by directly calling the Docker API when running Docker SDK < 4.0.0
        since prior versions did not support accessing private repositories.
        z4.0.0r   z/distribution/{0}/jsonzX-Registry-Auth)headersT)json)rD   r   r   r   get_config_header_result_get_urlr~   rj   inspect_distribution)r=   r   r>   r   headerr   s        r!   r  z,AnsibleDockerClientBase.inspect_distribution*  s    
 !!L$9933E:1=H++D(;F||DIIII6>.7 %. %  $   ,dHYRXYYr    )NN)FNNN)r   r<   )latestN)r   r   r   r?   r   abcabstractmethodrq   r   staticmethodr   r   propertyr|   r   r   r   r   r   r   r   r   r  __classcell__r   s   @r!   rj   rj      s    /Kb 	  " "H 	     D1	> 6D%N2h&.+>Z Zr    rj   c                   L     e Zd Z	 	 	 	 d fd	Zd ZddZd Zd	dZd	dZ xZ	S )
AnsibleDockerClientc           
         |xs i | _         t               }|j                  t               |r|j                  |       || _        g }|t
        z  }|r||z  }g }|t        z  }|r||z  }t        |||||||xs i       | _        | j                  j                  j                  d      | _        | j                  j                  | _        t        t        | ?  ||	       |
| j!                  |
|       y y )N)argument_specsupports_check_modemutually_exclusiverequired_togetherrequired_ifrequired_one_ofrequired_bydebug)r   r   )fail_resultsrN   updater(   arg_specr*   r+   r   moduler   rf   r  
check_moder~   r  r?   _get_minimal_versions)r=   r  r  r  r  r  r  r  r   r   option_minimal_versions%option_minimal_versions_ignore_paramsr  merged_arg_specmutually_exclusive_paramsrequired_together_paramsr   s                   r!   r?   zAnsibleDockerClient.__init__<  s    ).B&12""=1+DM$&!!%>>!%);;%#%  $<< $(99$#) 386#+#)r
 [[''++G4
++00!411#9 	2 	; #.&&'>@ef /r    c                     | j                   j                  |        | j                  j                  dd|it	        | j                          y )Nr   r   )r  r  r  	fail_jsonr0   r   s      r!   rq   zAnsibleDockerClient.faili  s=      (L#L9J9J)KLr    c                 B    | j                   j                  ||||       y )N)r]   r   r   )r  r   r   s        r!   r   zAnsibleDockerClient.deprecatem  s    c7_r    c                 .    | j                   j                  S r<   )r  r   r   s    r!   r   zAnsibleDockerClient._get_paramsp  s    {{!!!r    c                 Z   t               | _        | j                  j                  D ]   }|||v r
t               | j                  |<   " | j                  j	                  |       | j                  j                         D ]  \  }}d}d}d|v r| j                  t        |d         k\  }d|v r| j                  t        |d         k\  }|xr ||d<   |d   rXd|v r |d   |       }nz| j                  j                  j                  |      d u}|rQd| j                  j                  |   v r6| j                  j                  |   | j                  j                  |   d   k7  }|sd|v r|d   }nd|d	}|sd
}	|	| j                  |d   |fz  }	n|sd}	t        |d         t        d      k  r
|	t        z  }	n+| j                  t        d      k  r
|	t        z  }	n	|	t        z  }	|	t        t!        j"                         t$        j&                  |d   |fz  }	nd|d}	| j)                  |	        y )NTrD   r   	supporteddetect_usagedefault	usage_msgzset z optionz?Docker API version is %s. Minimum version required is %s to %s.z\Docker SDK for Python version is %s (%s's Python %s). Minimum version required is %s to %s. r   zCannot z with your configuration.)rN   r  r  r  r  rO   rD   r   r   r   rf   r   ry   rz   r{   rK   rr   rs   rt   ru   rq   )
r=   r  ignore_paramsoptiondatasupport_docker_pysupport_docker_apiusedusgr   s
             r!   r  z)AnsibleDockerClient._get_minimal_versionss  sP   '+v$kk// 	:F(]*376D((0		:
 	$$++,CD 88>>@ '	#LFD $!%"d*$($:$:l4PcKd>e$e!#t+%)%<%<TRfMg@h%h" 1 H6HD$!T)/4/5D;;--11&9ED	T[[-F-Fv-N N#{{11&9T[[=V=VW]=^_h=ii"d*";/ + 28:-_!T%@%@$G[B\^a$bb.|'-@(AB\RYEZZ#CCC!33l76KK#CCC#AAC!^X]]_cnnVZ[nVoqt$uu / GJLIIcNO'	#r    c                 b   |dg}|D ]%  }t        |t              s y|j                  |      }' t        |t              r2|D ],  }| j                  j                  dj                  |             . yt        |t              r.|r+| j                  j                  dj                  |             yyy)aw  
        Checks result of client operation for warnings, and if present, outputs them.

        warnings_key should be a list of keys used to crawl the result dictionary.
        For example, if warnings_key == ['a', 'b'], the function will consider
        result['a']['b'] if these keys exist. If the result is a non-empty string, it
        will be reported as a warning. If the result is a list, every entry will be
        reported as a warning.

        In most cases (if warnings are returned at all), warnings_key should be
        ['Warnings'] or ['Warning']. The default value (if not specified) is ['Warnings'].
        NWarningszDocker warning: {0})r   r   rf   r	   r  warnrM   r
   )r=   rg   warnings_keyr   warnings        r!   report_warningsz#AnsibleDockerClient.report_warnings  s     &<L 	%Cfg.ZZ_F	% fh'! H  !6!=!=g!FGH-&KK299&AB 39-r    )NFNNNNNNNNNNr  r<   )
r   r   r   r?   rq   r   r   r  r7  r
  r  s   @r!   r  r  :  s3    Y]]a_cJN+gZM`"0#dCr    r  )X
__future__r   r   r   r   __metaclass__r  r   rr   r   rt   	tracebackansible.module_utils.basicr   r   /ansible.module_utils.common._collections_compatr   r	   ansible.module_utils.sixr
   )ansible.module_utils.parsing.convert_boolr   r   Aansible_collections.community.docker.plugins.module_utils.versionr   rv   HAS_DOCKER_PY_2HAS_DOCKER_PY_3rw   rx   requests.exceptionsr   dockerr   rK   docker.errorsr   r   r   
docker.tlsr   r   r   r   ImportErrorrR   r   
format_excdocker.modelsro   docker.ssladapterrp   r   r   >ansible_collections.community.docker.plugins.module_utils.utilr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   rn   objectrS   rW   rh   rz   r{   ry   rj   r  r   r    r!   <module>rL     s  
 C B  	  	 
  J M 1 S Z  ,4CC$N#|G'<<.	n	%g)>	>.!" 
4      6   N 9 9 4,-&R $e  !Q #V  sZf sZlBC1 BC[  3x/9//1M    "!"  9 	sO   AE 1E1 8E> ?F E.	E))E.1E;:E;>FFFF