+
    i)                       a  R$ t,0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
HtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHt ^ R
IHt RRR]R].RR./t] ^ k ]P<                  ! ]4      t Rt! ! R R]PD                  4      t# ! R R]#4      t$ ! R R]#4      t%R R lt&R R lt'R R lt(R R lt)R  R! lt*R" R# lt+R# )%z9ansible enables running on first boot either ansible-pullN)deepcopy)ListOptional)	lifecyclesubp)Cloud)Config)
MetaSchema)ALL_DISTROSDistro)PER_INSTANCE)get_cfg_by_pathid
cc_ansible	frequencydistrosactivate_by_schema_keysansibleansible_configc                      a  ] tR t^t o V 3R lR ltV 3R lR ltV 3R lR ltR tV 3R lR	 ltR
 t	]
P                  R 4       t]
P                  V 3R lR l4       tRtV tR# )AnsiblePullc                    < V ^8  d   QhRS[ /# )   distro)r   )format__classdict__s   "=/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py__annotate__AnsiblePull.__annotate__    s     	; 	;v 	;    c                    R .V n         R R.V n        Wn        / V n        RV n        \
        P                  P                  RR4      V P                  R&   R# )zansible-pullz	--versionNHOMEz/root)cmd_pullcmd_versionr   envrun_userosenvironget)selfr   s   &&r   __init__AnsiblePull.__init__    sK    '(*K8'+ ::>>&':r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   return)r   r   Version)r   r   s   "r   r   r   +   s      Xi&7&78 r   c                   V P                  V P                  4      w  rVP                  4       P                  ^ 4      p\        P
                  ! RV4      pV'       d1   VP                  ^ 4      p\        P                  P                  V4      # R# )    z	([\d\.]+)N)
do_asr#   
splitlinespopresearchgroupr   r/   from_str)r)   stdout_
first_linematchesversions   &     r   get_versionAnsiblePull.get_version+   sl    JJt//0	&&(,,Q/
))L*5mmA&G$$--g66r   c                    < V ^8  d   QhRS[ /# r-   str)r   r   s   "r   r   r   4   s      S r   c                H    V P                  . V P                  OVO4      w  r#V# N)r2   r"   )r)   argsr9   r:   s   &*  r   pullAnsiblePull.pull4   s&    JJ6667	r   c                H    V P                  4       '       g   \        R 4      hR# )z!command: ansible is not installedN)is_installed
ValueErrorr)   s   &r   
check_depsAnsiblePull.check_deps8   s"      ""@AA #r   c                    < V ^8  d   QhRS[ /# )r   commandlist)r   r   s   "r   r   r   <   s     C CT Cr   c                    V P                   '       g   V P                  ! V3/ VB # V P                  P                  ! WP                   3/ VB # rD   )r%   r   r   r2   r)   rO   kwargss   &&,r   r2   AnsiblePull.do_as<   s=    }}}99W///{{  --B6BBr   c                H    \         P                   ! V3R V P                  /VB # )
update_env)r   r$   rS   s   &&,r   r   AnsiblePull.subpA   s    yy@TXX@@@r   c                    R # rD    rK   s   &r   rI   AnsiblePull.is_installedD       r   c                    < V ^8  d   QhRS[ /# r   pkg_namerA   )r   r   s   "r   r   r   I   s       r   c                    R # rD   rZ   r)   r_   s   &&r   installAnsiblePull.installH   r\   r   )r"   r#   r   r$   r%   N)__name__
__module____qualname____firstlineno__r*   r>   rF   rL   r2   r   abcabstractmethodrI   rb   __static_attributes____classdictcell__)r   s   @r   r   r      so     	; 	;  BC C
A 	  	 r   r   c                      a a ] tR t^Mt oV3R lV 3R lltR tR tV3R lR ltV3R lR ltV3R	 lR
 lt	Rt
VtV ;t# )AnsiblePullPipc                6   < V ^8  d   QhRS[ RS[S[,          /# r   r   userr   r   rB   )r   r   s   "r   r   AnsiblePullPip.__annotate__N   s     , ,v ,Xc] ,r   c                R   < \         SV `  V4       W n        V P                  4        R # rD   )superr*   r%   add_pip_install_site_to_pathr)   r   rp   	__class__s   &&&r   r*   AnsiblePullPip.__init__N   s!     ))+r   c                $   V P                   '       d~   V P                  \        P                  R R.4      w  rV R2pV P                  P                  R4      pV'       d"   RP                  WC.4      V P                  R&   R# W0P                  R&   R# R# )z-cz&import site; print(site.getuserbase())z/bin/PATH:N)r%   r2   sys
executabler$   r(   join)r)   	user_baser:   ansible_pathold_paths   &    r   ru   +AnsiblePullPip.add_pip_install_site_to_pathS   s{    ===::NN<LI ([.Lxx||F+H#&88X,D#E #/  r   c                     ^ RI pR#   \         d5    T P                  P                  T P                  P                  .4        R# i ; i)r1   N)pipImportErrorr   install_packagespip_package_name)r)   r   s   & r   bootstrap_pip_if_required(AnsiblePullPip.bootstrap_pip_if_requiredd   s;    	I 	IKK(($++*F*F)GH	Is    ;AAc                    < V ^8  d   QhRS[ /# r^   rA   )r   r   s   "r   r   rr   j   s     ; ; ;r   c                8   V P                  4        V P                  4       '       g   \        P                  RRR.p\        P
                  P                  \        P
                  P                  \        P                  ! R4      R4      4      '       d   VP                  R4       V P                  '       d   VP                  R4       V P                  V4       \        P                  RV4       V P                  . VOVN4       \        P                  R	V4       R
# R
# )zYshould cloud-init grow an interface for non-distro package
managers? this seems reusable
-mr   rb   stdlibzEXTERNALLY-MANAGEDz--break-system-packages--userzInstalling the %s packagezInstalled the %s packageN)r   rI   r|   r}   r&   pathexistsr~   	sysconfigget_pathappendr%   _AnsiblePullPip__upgrade_pipLOGinfor2   )r)   r_   cmds   && r   rb   AnsiblePullPip.installj   s     	&&(  ""	C ww~~&&x02F 
 

45}}}

8$s#HH0(;JJ''h'(HH/:) #r   c                    < V ^8  d   QhRS[ /# )r   r   rP   )r   r   s   "r   r   rr      s     % % %r   c                    \         P                  R4        V P                  . VORNRN4       \         P                  R4       R#   \        P                   d"   p\         P                  RT4        Rp?R# Rp?ii ; i)zGTry to upgrade pip then not raise an exception
if the pip upgrade failszUpgrading pipz	--upgrader   zUpgraded pipzZFailed at upgrading pip. This is usually not criticalso the script will skip this step.
%sN)r   r   r2   r   ProcessExecutionErrorwarning)r)   r   es   && r   __upgrade_pipAnsiblePullPip.__upgrade_pip   sr     	!	%JJ11k1512 HH^$ )) 	KK=  	s   A A;A66A;c                    < V ^8  d   QhRS[ /# r-   bool)r   r   s   "r   r   rr      s     # #d #r   c                    \         P                  R RR.pV P                  '       d   VP                  R4       V P	                  V4      w  r#RV9   # )r   r   rQ   r   r   )r|   r}   r%   r   r2   )r)   r   r9   r:   s   &   r   rI   AnsiblePullPip.is_installed   sC    ~~tUF3===JJx JJsO	F""r   r%   )rd   re   rf   rg   r*   ru   r   rb   r   rI   rj   rk   __classcell__rw   r   s   @@r   rm   rm   M   s=     , ,
0"I; ;8% %"# # #r   rm   c                   b   a a ] tR t^t oV3R lV 3R lltV3R lR ltV3R lR ltRtVtV ;t	# )AnsiblePullDistroc                6   < V ^8  d   QhRS[ RS[S[,          /# ro   rq   )r   r   s   "r   r   AnsiblePullDistro.__annotate__   s      v Xc] r   c                2   < \         SV `  V4       W n        R # rD   )rt   r*   r%   rv   s   &&&r   r*   AnsiblePullDistro.__init__   s     r   c                    < V ^8  d   QhRS[ /# r^   rA   )r   r   s   "r   r   r      s     5 5 5r   c                n    V P                  4       '       g   V P                  P                  V.4       R # R # rD   )rI   r   r   ra   s   &&r   rb   AnsiblePullDistro.install   s*      ""KK(((4 #r   c                    < V ^8  d   QhRS[ /# r-   r   )r   r   s   "r   r   r      s     + +d +r   c                @    \        \        P                  ! R 4      4      # )r   )r   r   whichrK   s   &r   rI   AnsiblePullDistro.is_installed   s    DJJy)**r   r   )
rd   re   rf   rg   r*   rb   rI   rj   rk   r   r   s   @@r   r   r      s(      5 5+ + +r   r   c          
      L    V ^8  d   QhR\         R\        R\        R\        RR/# )r   namecfgcloudrE   r.   N)rB   r   r   rQ   )r   s   "r   r   r      s/     %: %: %:6 %:% %:t %: %:r   c                    VP                  R / 4      pVP                  R4      pVP                  R4      pVP                  R4      pVP                  R4      pVP                  R4      p	VP                  RR4      p
V'       d   \        V4       VP                  pVR8X  d   \        W4      pM\	        W4      pVP                  V
4       VP                  4        VP                  R	R4      pV'       d   WP                  \        &   V'       d   \        W4       V	'       d8   \        V	\        4      '       d   V	.p	V	 F  p\        V\        V4      4       K  	  V'       d   \        W|4       R
# R
# R
# )r   r%   install_methodsetup_controllergalaxyrF   package_name r   r   N)r(   validate_configr   rm   r   rb   rL   r$   CFG_OVERRIDEansible_galaxy
isinstancedictrun_ansible_pullr   ansible_controller)r   r   r   rE   ansible_cfgansible_userr   r   
galaxy_cfgpull_cfgr   r   r   r   s   &&&&          r   handler      s%   	2.K??:.L __%56N"'9:*Jv&H??>26L$U"$V:G'=G%$)92>(6KK%:/(D))$: (3-8   /9 3 r   c                $    V ^8  d   QhR\         /# )r   r   r   )r   s   "r   r   r      s     2= 2= 2=r   c                 >   RpV F%  p\        W4      '       d   K  \        RV RV  24      h	  V P                  R4      pV'       d   \        V\        4      '       d   V.pM$\        V\
        4      '       g   \        RV 24      hV F  p\        V\        4      '       g   \        RV 24      h\        VR4      '       g   \        RV 24      h\        VR4      p\        VR	4      p\        WV.4      '       g   \        R
V 24      h\        We.4      '       g   K  \        RV 24      h	  V P                  R4      pV'       d@   \        VP                  R4      VP                  R4      .4      '       g   \        RV 24      hV R ,          pVR9  d   \        R4      hR# )r   zMissing required key 'z' from rF   zLInvalid value ansible.pull. Expected either dict of list of dicts but found z7Invalid value of ansible.pull. Expected dict but found urlz Missing required key 'url' from playbook_nameplaybook_namesz+Missing required key 'playbook_names' from zzKey 'ansible.pull.playbook_name' and 'ansible.pull.playbook_names' are mutually exclusive. Please use 'playbook_names' in r   repositoriesrun_ansiblezMissing required key from z Invalid install method {install}N)r   r   )r   r   )r   rJ   r(   r   r   rQ   anyall)	r   required_keyskeyr   p_cfghas_playbookhas_playbookscontroller_cfgrb   s	   &        r   r   r      s   M s((5cU'#GHH  wwvHh%% zHHd++$$,:/  EeT** w   #5%00 #CE7!KLL*5/BL+E3CDM455 A%I  m233 77<g?  * WW/0N"">2""=1
 
 9.9IJKK"#G'';<< (r   c                0    V ^8  d   QhR\         R\         /# )r   r   r.   r   )r   s   "r   r   r     s      T d r   c                    V P                  4        UUu/ uF   w  rVRJg   K  VP                  RR4      VbK"  	  upp# u uppi )zremove boolean false valuesFr:   -)itemsreplace)r   r   values   &  r   filter_argsr     sK      IIK'LS 	%Cu$'  s   
>>c                0    V ^8  d   QhR\         R\        /# )r   rF   r   )r   r   )r   s   "r   r   r     s     . .; .T .r   c           	      p   VP                  R R4      pVP                  RR4      pV'       d   V.pV P                  4       pV'       g   \        P                  R4       MgV\        P
                  ! ^^^ 4      8  dK   VP                  R4      '       d4   \        RVP                   RVP                   RVP                   R24      h\        V4      P                  4        UUu. uF  w  rVVRJd	   R	V R
V 2MR	V 2NK  	  pppV'       d_   V\        P
                  ! ^^^ 4      8  dB   V P                  ! . VOVO5!  pV'       d#   \        P                  P!                  V 4       R# R# V FB  p	V P                  ! . VOV	N5!  pV'       g   K"  \        P                  P!                  V 4       KD  	  R# u uppi )r   Nr   zCannot parse ansible versiondiffzAnsible version .z%doesn't support --diff flag, exiting.T--=)r4   r>   r   r   r   r/   r(   rJ   majorminorpatchr   r   rF   r|   r9   write)
rF   r   r   r   vr   r   	pull_argsr9   playbooks
   &&        r   r   r     s   $7M #(8$ ?N'A23	
Yq!Q'	'776??"177)1QWWIQqwwi78  &c*0022JC $4/"SE5'r#Z?2   	Q)##Ar1-- 7I77JJx)  'HYY4	484Fv

  F8- 's   !F2c                0    V ^8  d   QhR\         R\        /# r   r   r   r   r   )r   s   "r   r   r   5  s       { r   c                     V P                  R . 4      pV'       g   \        P                  RV 4       V F  pVP                  V4       K  	  R# )actionszInvalid config: %sN)r(   r   r   r2   )r   r   r   rO   s   &&  r   r   r   5  s:    ggi$G(#.g r   c                0    V ^8  d   QhR\         R\        /# r   r   )r   s   "r   r   r   >  s     1 1D 1; 1r   c           
         V P                  R . 4       F&  pVP                  RRVR,          VR,          .4       K(  	  V P                  R. 4       Fn  pVP                  R4      pVP                  R4      pRV.\        V4      P	                  4        UUu. uF  w  rgR	V R
V 2NK  	  uppOpVP                  WR7       Kp  	  R# u uppi )r   gitclonesourcer   r   playbook_dirr   zansible-playbookr   r   )cwdN)r(   r2   r4   r   r   )	r   r   
repositoryrE   r   r   r   r   rO   s	   &&       r   r   r   >  s    ggnb1
GZ1:f3EF	
 2 r*xx/1
 4?t3D3J3J3LM3LZS3%q 3LM

 	g0 + Ns   C
c                @    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   # )r   meta)__conditional_annotations__r	   )r   s   "r   r   r      s     ? ?& j ' @r   )-r   __doc__rh   loggingr&   r5   r|   r   copyr   typingr   r   	cloudinitr   r   cloudinit.cloudr   cloudinit.configr   cloudinit.config.schemar	   cloudinit.distrosr
   r   cloudinit.settingsr   cloudinit.utilr   r   	getLoggerrd   r   r   ABCr   rm   r   r   r   r   r   r   r   r   )r   s   @r   <module>r     s    ? 
  	 	 
   ! % ! # . 1 + * 	,}	{	  !+#'' +\Q#[ Q#h
+ 
+%:P2=j.B1r   