Ë
    x[h«   ã            
       ó´  — U d 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 ddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ deegdgdœZeed<    ej<                  e«      Z dZ! G d„ dejD                  «      Z# G d„ de#«      Z$ G d„ de#«      Z%de&dedede'ddf
d„Z(de)fd„Z*de)de)fd„Z+de#de)fd „Z,de)de#fd!„Z-de)de#fd"„Z.y)#z9ansible enables running on first boot either ansible-pullé    N)Údeepcopy)ÚOptional)Ú	lifecycleÚsignal_handlerÚsubp)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROSÚDistro)ÚPER_INSTANCE)Úget_cfg_by_pathÚ
cc_ansibleÚansible)ÚidÚ	frequencyÚdistrosÚactivate_by_schema_keysÚmetaÚansible_configc                   ó°   — e Zd Zdefd„Zdeej                     fd„Zde	fd„Z
d„ Zdefd„Zd	„ Zej                   d
„ «       Zej                   de	fd„«       Zy)ÚAnsiblePullÚdistroc                 óª   — dg| _         ddg| _        || _        i | _        d | _        t
        j                  j                  dd«      | j                  d<   y )Nzansible-pullz	--versionÚHOMEz/root)Úcmd_pullÚcmd_versionr   ÚenvÚrun_userÚosÚenvironÚget)Úselfr   s     ú=/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.pyÚ__init__zAnsiblePull.__init__    sM   € Ø'Ð(ˆŒØ*¨KÐ8ˆÔØˆŒØˆŒØ'+ˆŒô Ÿ:™:Ÿ>™>¨&°'Ó:ˆ�‰�Òó    Úreturnc                 ó  — | j                  | j                  «      \  }}|j                  «       j                  d«      }t	        j
                  d|«      }|r0|j                  d«      }t        j                  j                  |«      S y )Nr   z	([\d\.]+))
Údo_asr   Ú
splitlinesÚpopÚreÚsearchÚgroupr   ÚVersionÚfrom_str)r#   ÚstdoutÚ_Ú
first_lineÚmatchesÚversions         r$   Úget_versionzAnsiblePull.get_version+   sn   € Ø—J‘J˜t×/Ñ/Ó0‰	ˆ�Ø×&Ñ&Ó(×,Ñ,¨QÓ/ˆ
Ü—)‘)˜L¨*Ó5ˆÙØ—m‘m AÓ&ˆGÜ×$Ñ$×-Ñ-¨gÓ6Ð6Ør&   c                 óJ   — | j                  g | j                  ¢|¢«      \  }}|S ©N)r)   r   )r#   Úargsr1   r2   s       r$   ÚpullzAnsiblePull.pull4   s(   € Ø—J‘JÐ6 §¡Ð6°Ð6Ó7‰	ˆ�Øˆr&   c                 ó:   — | j                  «       st        d«      ‚y )Nz!command: ansible is not installed)Úis_installedÚ
ValueError©r#   s    r$   Ú
check_depszAnsiblePull.check_deps8   s   € Ø× Ñ Ô"ÜÐ@ÓAÐAð #r&   Úcommandc                 ó�   — | j                   s | j                  |fi |¤ŽS  | j                  j                  || j                   fi |¤ŽS r8   )r   r   r   r)   ©r#   r@   Úkwargss      r$   r)   zAnsiblePull.do_as<   sA   € Ø�}Š}Ø�4—9‘9˜WÑ/¨Ñ/Ð/Ø ˆt�{‰{× Ñ  ¨$¯-©-ÑB¸6ÑBÐBr&   c                 óš   — t        j                  «       5  t        j                  |fd| j                  i|¤Žcd d d «       S # 1 sw Y   y xY w)NÚ
update_env)r   Úsuspend_crashr   r   rB   s      r$   r   zAnsiblePull.subpA   sA   € Ü×)Ñ)Ó+ñ 	EÜ—9‘9˜WÑD°·±ÐD¸VÑD÷	E÷ 	Eò 	Eús   •"AÁA
c                  ó   — y r8   © r>   s    r$   r<   zAnsiblePull.is_installedE   ó   € àr&   Úpkg_namec                  ó   — y r8   rH   ©r#   rJ   s     r$   ÚinstallzAnsiblePull.installI   rI   r&   N)Ú__name__Ú
__module__Ú__qualname__r   r%   r   r   r/   r6   Ústrr:   r?   Úlistr)   r   ÚabcÚabstractmethodr<   rM   rH   r&   r$   r   r      s†   „ ð	;˜vó 	;ð˜X i×&7Ñ&7Ñ8ó ð˜Só òBðC˜Tó Cò
Eð 	×Ññó ðð 	×Ñð ò ó ñr&   r   c                   óR   ‡ — e Zd Zdedee   fˆ fd„Zd„ Zd„ Zdefd„Z	de
fd	„Zˆ xZS )
ÚAnsiblePullPipr   Úuserc                 óR   •— t         ‰| �  |«       || _        | j                  «        y r8   )Úsuperr%   r   Úadd_pip_install_site_to_path©r#   r   rW   Ú	__class__s      €r$   r%   zAnsiblePullPip.__init__O   s#   ø€ Ü‰Ñ˜Ô ØˆŒØ×)Ñ)Õ+r&   c                 ó  — | j                   rx| j                  t        j                  ddg«      \  }}|› d�}| j                  j                  d«      }|r!dj                  ||g«      | j                  d<   y || j                  d<   y y )Nz-cz&import site; print(site.getuserbase())z/bin/ÚPATHú:)r   r)   ÚsysÚ
executabler   r"   Újoin)r#   Ú	user_baser2   Úansible_pathÚold_paths        r$   rZ   z+AnsiblePullPip.add_pip_install_site_to_pathT   s   € Ø�=Š=ØŸ:™:ä—N‘NØØ<ðó‰LˆI�qð (˜[¨Ð.ˆLà—x‘x—|‘| FÓ+ˆHÙØ#&§8¡8¨X°|Ð,DÓ#E�—‘˜Ò à#/�—‘˜Ò ð r&   c                 óŒ   — 	 dd l }y # t        $ r3 | j                  j                  | j                  j                  g«       Y y w xY w)Nr   )ÚpipÚImportErrorr   Úinstall_packagesÚpip_package_name)r#   rg   s     r$   Úbootstrap_pip_if_requiredz(AnsiblePullPip.bootstrap_pip_if_requirede   s;   € ð	IÜøÜò 	IØ�K‰K×(Ñ(¨$¯+©+×*FÑ*FÐ)GÖHð	Iús   ‚ ‡9AÁArJ   c                 óÂ  — | j                  «        | j                  «       s¿t        j                  dddg}t        j
                  j                  t        j
                  j                  t        j                  d«      d«      «      r|j                  d«       | j                  r|j                  d«       | j                  g |¢d‘d‘«       | j                  g |¢|‘«       y	y	)
zishould cloud-init grow an interface for non-distro package
        managers? this seems reusable
        ú-mrg   rM   ÚstdlibzEXTERNALLY-MANAGEDz--break-system-packagesú--userz	--upgradeN)rk   r<   r`   ra   r    ÚpathÚexistsrb   Ú	sysconfigÚget_pathÚappendr   r)   )r#   rJ   Úcmds      r$   rM   zAnsiblePullPip.installk   sÀ   € ð 	×&Ñ&Ô(à× Ñ Ô"ä—‘ØØØð	ˆCô �w‰w�~‰~Ü—‘—‘Ü×&Ñ& xÓ0Ð2Fóôð
 —
‘
Ð4Ô5Ø�}Š}Ø—
‘
˜8Ô$à�J‰JÐ1˜Ð1˜kÐ1¨5Ð1Ô2Ø�J‰JÐ'˜Ð'˜hÐ'Õ(ð% #r&   r'   c                 ó”   — t         j                  dddg}| j                  r|j                  d«       | j	                  |«      \  }}d|v S )Nrm   rg   rR   ro   r   )r`   ra   r   rt   r)   )r#   ru   r1   r2   s       r$   r<   zAnsiblePullPip.is_installed…   sC   € Ü�~‰~˜t U¨FÐ3ˆà�=Š=Ø�J‰J�xÔ à—J‘J˜s“O‰	ˆ�Ø˜FÐ"Ð"r&   )rN   rO   rP   r   r   rQ   r%   rZ   rk   rM   Úboolr<   Ú__classcell__©r\   s   @r$   rV   rV   N   s=   ø„ ð,˜vð ,¨X°c©]õ ,ò
0ò"Ið) ó )ð4#˜d÷ #r&   rV   c                   óF   ‡ — e Zd Zdedee   fˆ fd„Zdefd„Zdefd„Z	ˆ xZ
S )ÚAnsiblePullDistror   rW   c                 ó2   •— t         ‰| �  |«       || _        y r8   )rY   r%   r   r[   s      €r$   r%   zAnsiblePullDistro.__init__�   s   ø€ Ü‰Ñ˜Ô Øˆ�r&   rJ   c                 ó^   — | j                  «       s| j                  j                  |g«       y y r8   )r<   r   ri   rL   s     r$   rM   zAnsiblePullDistro.install”   s'   € Ø× Ñ Ô"Ø�K‰K×(Ñ(¨(¨Õ4ð #r&   r'   c                 ó>   — t        t        j                  d«      «      S )Nr   )rw   r   Úwhichr>   s    r$   r<   zAnsiblePullDistro.is_installed˜   s   € Ü”D—J‘J˜yÓ)Ó*Ð*r&   )rN   rO   rP   r   r   rQ   r%   rM   rw   r<   rx   ry   s   @r$   r{   r{   �   s2   ø„ ð˜vð ¨X°c©]õ ð5 ó 5ð+˜d÷ +r&   r{   ÚnameÚcfgÚcloudr9   r'   c                 ó^  — |j                  di «      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }	|j                  dd«      }
|r²t        |«       |j                  }|d	k(  rt        ||«      }nt	        ||«      }|j                  |
«       |j                  «        |j                  d
d«      }|r||j                  t        <   |rt        ||«       |	rt        |t        |	«      «       |rt        ||«       y y y )Nr   r   Úinstall_methodÚsetup_controllerÚgalaxyr:   Úpackage_nameÚ rg   r   )r"   Úvalidate_configr   rV   r{   rM   r?   r   ÚCFG_OVERRIDEÚansible_galaxyÚrun_ansible_pullr   Úansible_controller)r€   r�   r‚   r9   Úansible_cfgÚansible_userr„   r…   Ú
galaxy_cfgÚpull_cfgr‡   r   r   r   s                 r$   Úhandler’   œ   s  € àŸ™ 	¨2Ó.€KØ—?‘? :Ó.€LØ —_‘_Ð%5Ó6€NØ"—‘Ð'9Ó:Ðà—‘ Ó*€JØ�‰˜vÓ&€HØ—?‘? >°2Ó6€Láä˜Ô$àŸ™ˆØ˜UÒ"Ü$ V¨\Ó:‰Gä'¨°Ó=ˆGØ�‰˜Ô%Ø×ÑÔØ$Ÿ™Ð)9¸2Ó>ˆáØ(6ˆG�K‰KœÑ%áÜ˜: wÔ/áÜ˜W¤h¨xÓ&8Ô9áÜÐ/°Õ9ð ð- r&   c                 óz  — d}|D ]  }t        | |«      rŒt        d|› d| › �«      ‚ | j                  d«      r$dD ]  }t        | |«      rŒt        d|› d| › �«      ‚ | j                  d«      }|r9t        |j                  d«      |j                  d«      g«      st        d	|› �«      ‚| d
   }|dvrt        d«      ‚y )N)r„   r‡   zMissing required key 'z' from r:   )zpull/urlzpull/playbook_namer…   ÚrepositoriesÚrun_ansiblezMissing required key from r„   )rg   r   z Invalid install method {install})r   r=   r"   Úany)r�   Úrequired_keysÚkeyÚcontroller_cfgrM   s        r$   r‰   r‰   Á   sø   € ð€Mð ò IˆÜ˜s CÕ(ÜÐ5°c°U¸'À#ÀÐGÓHÐHðIð ‡w�wˆv„Ø3ò 	MˆCÜ" 3¨Õ,Ü Ð#9¸#¸¸gÀcÀUÐ!KÓLÐLð	Mð —W‘WÐ/Ó0€NÙÜà×"Ñ" >Ó2Ø×"Ñ" =Ó1ðô
ô Ð9¸.Ð9IÐJÓKÐKàÐ"Ñ#€GØÐ'Ñ'ÜÐ;Ó<Ð<ð (r&   c                 ó~   — | j                  «       D ��ci c]  \  }}|dur|j                  dd«      |“Œ c}}S c c}}w )zremove boolean false valuesFr2   ú-)ÚitemsÚreplace)r�   r˜   Úvalues      r$   Úfilter_argsrŸ   Ý   sF   € ð  ŸI™I›K÷áˆS�%Ø˜Ñð 	�‰�C˜Ó˜uÑ$óð ùó s   ”!9r:   c                 ó  — |j                  d«      }| j                  «       }|st        j                  d«       n^|t	        j
                  ddd«      k  rD|j                  d«      r3t        d|j                  › d|j                  › d|j                  › d	�«      ‚ | j                  g t        |«      j                  «       D ��cg c]  \  }}|d
urd|› d|› �nd|› �‘Œ c}}¢|‘­Ž }|r!t        j                  j!                  |› «       y y c c}}w )NÚplaybook_namezCannot parse ansible versioné   é   r   ÚdiffzAnsible version ú.z%doesn't support --diff flag, exiting.Tú--ú=)r+   r6   ÚLOGÚwarningr   r/   r"   r=   ÚmajorÚminorÚpatchr:   rŸ   rœ   r`   r1   Úwrite)r:   r�   r¡   Úvr˜   rž   r1   s          r$   rŒ   rŒ   æ   s  € ØŸ™ Ó1€Mà×ÑÓ€AÙÜ�‰Ð2Õ3Ø	
ŒY×Ñ˜q ! QÓ'Ò	'à�7‰7�6Œ?ÜØ" 1§7¡7 )¨1¨Q¯W©W¨I°Q°q·w±w°iØ7ð8óð ð ˆT�Y‰Yð ô *¨#Ó.×4Ñ4Ó6÷

á��Uð #(¨tÑ"3ˆb���Q�u�gÑ¸2¸c¸U¸ÑCó

ðð
 	ò€Fñ Ü�
‰
×Ñ˜F˜8Õ%ð ùó

s   ÃD	c                 óˆ   — | j                  dg «      }|st        j                  d| «       |D ]  }|j                  |«       Œ y )NÚactionszInvalid config: %s)r"   r¨   r©   r)   )r�   r   r°   r@   s       r$   r‹   r‹   þ   s?   € Ø�g‰g�i Ó$€GáÜ�‰Ð(¨#Ô.Øò ˆØ�‰�gÕñr&   c           
      óx  — | j                  dg «      D ]  }|j                  dd|d   |d   g«       Œ | j                  dg «      D ]m  }|j                  d«      }|j                  d«      }d	|gt        |«      j	                  «       D ��cg c]  \  }}d
|› d|› �‘Œ c}}¢}|j                  ||¬«       Œo y c c}}w )Nr”   ÚgitÚcloneÚsourcerp   r•   Úplaybook_dirr¡   zansible-playbookr¦   r§   )Úcwd)r"   r)   r+   rŸ   rœ   )	r�   r   Ú
repositoryr9   rµ   r¡   r˜   rž   r@   s	            r$   r�   r�     sÏ   € Ø—g‘g˜n¨bÓ1ò 
ˆ
Ø�‰Ø�G˜Z¨Ñ1°:¸fÑ3EÐFõ	
ð
ð —‘˜ rÓ*ò 1ˆØ—x‘x Ó/ˆØŸ™ Ó1ˆàØð
ô 4?¸tÓ3D×3JÑ3JÓ3L×M¡Z S¨%��3�%�q˜˜Ò ÓMð
ˆð
 	�‰�g <ˆÕ0ñ1ùó Ns   Â	B6
)/Ú__doc__rS   Úloggingr    r,   r`   rr   Úcopyr   Útypingr   Ú	cloudinitr   r   r   Úcloudinit.cloudr   Úcloudinit.configr	   Úcloudinit.config.schemar
   Úcloudinit.distrosr   r   Úcloudinit.settingsr   Úcloudinit.utilr   r   Ú__annotations__Ú	getLoggerrN   r¨   rŠ   ÚABCr   rV   r{   rQ   rR   r’   Údictr‰   rŸ   rŒ   r‹   r�   rH   r&   r$   ú<module>rÇ      s  ðÚ ?ã 
Û Û 	Û 	Û 
Û Ý Ý ç 5Ñ 5Ý !Ý #Ý .ß 1Ý +Ý *ð ØØˆ}Ø )˜{ñ	€€jó ð €g×Ñ˜Ó!€Ø€ô,�#—'‘'ô ,ô^>#�[ô >#ôB
+˜ô 
+ð":�ð ":˜6ð ":¨%ð ":°tð ":Àó ":ðJ=˜ó =ð8�Tð ˜dó ð&˜;ð &¨Tó &ð0˜ð  {ó ð1˜Dð 1¨;ô 1r&   