Ë
    x[hÇ<  ã            
       óâ   — U d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  ej                  e«      Zdg d	¢ed
gdœZe
ed<   dededededdf
d„Z G d„ de«      Z G d„ d«      Zdd„Zy)zDRed Hat Subscription: Register Red Hat Enterprise Linux based systemé    N)ÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEÚcc_rh_subscription)ÚfedoraÚrhelÚ	openeulerÚrh_subscription)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetaÚnameÚcfgÚcloudÚargsÚreturnc                 ó"  — t        |t        ¬«      }|j                  «       st        j                  d| «       y |j	                  «       �st	 |j                  «       \  }}|durt        |«      ‚|j                  «       }|st        d«      ‚|j                  rC|j                  �7|j                  «       st        d«      ‚|j                  j                  d«       nB|j                  r6|j                  «       st        d«      ‚|j                  j                  d«       |j                  �ht        |j                  t        «      sd	}t        |«      ‚|j!                  |j                  «      }	|	s$t        d
j#                  |j                  «      «      ‚|j%                  «       }	|	st        d«      ‚|j'                  d«       y |j'                  d«       y # t        $ r5}
|j)                  t+        |
«      «       |j)                  d«       Y d }
~
y d }
~
ww xY w)N)Úlogz%s: module not configured.Tz-Registration failed or did not run completelyzSetting of service-level failedz(Completed auto-attach with service levelzSetting auto-attach failedzCompleted auto-attachz"Pools must in the format of a listzUnable to attach pools {0}zUnable to add or remove reposz-rh_subscription plugin completed successfullyz4rh_subscription plugin did not complete successfullyzSystem is already registered)ÚSubscriptionManagerÚLOGÚis_configuredÚdebugÚis_registeredÚ_verify_keysÚSubscriptionErrorÚrhn_registerÚauto_attachÚservicelevelÚ_set_service_levelr   Ú_set_auto_attachÚpoolsÚ
isinstanceÚlistÚaddPoolÚformatÚupdate_reposÚlog_successÚlog_warnÚstr)r   r   r   r   ÚsmÚverifyÚ
verify_msgÚcontÚ	pool_failÚreturn_statÚes              úE/usr/lib/python3/dist-packages/cloudinit/config/cc_rh_subscription.pyÚhandler7      sµ  € Ü	˜S¤cÔ	*€BØ×ÑÔÜ�	‰	Ð.°Ô5Øà×ÑÕð*	PØ!#§¡Ó!2ÑˆF�JØ˜TÑ!Ü'¨
Ó3Ð3Ø—?‘?Ó$ˆDÙÜ'ØCóð ð �~Š~ "§/¡/Ð"=Ø×,Ñ,Ô.Ü+Ð,MÓNÐNà—F‘F—L‘LÐ!KÕLØ—’Ø×*Ñ*Ô,Ü+Ð,HÓIÐIà—F‘F—L‘LÐ!8Ô9à�x‰xÐ#Ü! "§(¡(¬DÔ1Ø D�IÜ+¨IÓ6Ð6à Ÿj™j¨¯©Ó2�Ù"Ü+Ø4×;Ñ;¸B¿H¹HÓEóð ð Ÿ/™/Ó+ˆKÙÜ'Ð(GÓHÐHØ�N‰NÐJÕKð
 	�‰Ð5Õ6øô	 !ò 	PØ�K‰Kœ˜A›ÔØ�K‰KÐN×OÑOûð	Pús   ÁE2G Ç	HÇ+H	È	Hc                   ó   — e Zd Zy)r    N)Ú__name__Ú
__module__Ú__qualname__© ó    r6   r    r    P   s   „ Ør=   r    c                   ód   — e Zd Zg d¢Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r   )Úorgúactivation-keyÚusernameÚpasswordúdisable-repoúenable-repoúadd-poolúrhsm-baseurlúserver-hostnameúauto-attachúservice-levelNc                 ó2  — |€t         }|| _        || _        | j                  j                  di «      | _        | j                  j                  d«      | _        | j                  j                  d«      | _        | j                  j                  d«      | _        | j                  j                  d«      | _        | j                  j                  d«      | _	        | j                  j                  d«      | _
        | j                  j                  d«      | _        | j                  j                  d	«      | _        | j                  j                  d
«      | _        | j                  j                  d«      | _        | j                  j                  d«      | _        y )Nr   rF   rG   rE   r@   r?   rA   rB   rH   rD   rC   rI   )r   r   r   ÚgetÚrhel_cfgÚrhsm_baseurlÚserver_hostnamer&   Úactivation_keyr?   ÚuseridrB   r"   Úenable_repoÚdisable_repor#   )Úselfr   r   s      r6   Ú__init__zSubscriptionManager.__init__c   s,  € Øˆ;ÜˆCØˆŒØˆŒØŸ™Ÿ™Ð%6¸Ó;ˆŒØ ŸM™M×-Ñ-¨nÓ=ˆÔØ#Ÿ}™}×0Ñ0Ð1BÓCˆÔØ—]‘]×&Ñ& zÓ2ˆŒ
Ø"Ÿm™m×/Ñ/Ð0@ÓAˆÔØ—=‘=×$Ñ$ UÓ+ˆŒØ—m‘m×'Ñ'¨
Ó3ˆŒØŸ™×)Ñ)¨*Ó5ˆŒØŸ=™=×,Ñ,¨]Ó;ˆÔØŸ=™=×,Ñ,¨]Ó;ˆÔØ ŸM™M×-Ñ-¨nÓ=ˆÔØ ŸM™M×-Ñ-¨oÓ>ˆÕr=   c                 ó:   — | j                   j                  |«       y)z>Simple wrapper for logging info messages. Useful for unittestsN)r   Úinfo©rS   Úmsgs     r6   r,   zSubscriptionManager.log_successu   s   € à�‰�‰�cÕr=   c                 ó:   — | j                   j                  |«       y)zASimple wrapper for logging warning messages. Useful for unittestsN)r   ÚwarningrW   s     r6   r-   zSubscriptionManager.log_warny   s   € à�‰×Ñ˜Õr=   c                 óÐ  — | j                   D ]A  }|| j                  vsŒdj                  |dj                  | j                  «      «      }d|fc S  | j                  �Dt        j                  | j                  «      s%t        j                  | j                  «      sd}d|fS | j                  �:| j                  r(t        j                  t        | j                  «      «      rd}d|fS y)zq
        Checks that the keys in the rh_subscription dict from the user-data
        are what we expect.
        z?{0} is not a valid key for rh_subscription. Valid keys are: {1}ú, Fz8The key auto-attach must be a boolean value (True/False zqThe service-level key must be used in conjunction with the auto-attach key.  Please re-run with auto-attach: True)TN)
rL   Úvalid_rh_keysr*   Újoinr"   r   Úis_trueÚis_falser#   r.   )rS   ÚkÚbad_keyÚnot_boolÚno_autos        r6   r   z SubscriptionManager._verify_keys}   sâ   € ð —‘ò 	&ˆAØ˜×*Ñ*Ò*ðç ™&  D§I¡I¨d×.@Ñ.@Ó$AÓBð ð
 ˜g�~Ò%ð	&ð ×ÑÐ(Ü�L‰L˜×)Ñ)Ô*¬d¯m©m¸D×<LÑ<LÔ.Mð Kð ð ˜(�?Ð"à×ÑÐ)Ø×!Ò!¤t§}¡}´S¸×9IÑ9IÓ5JÔ'Kð$ð ð
 ˜'�>Ð!Ør=   c                 óT   — dg}	 t        |«       y# t        j                  $ r Y yw xY w)zg
        Checks if the system is already registered and returns
        True if so, else False
        ÚidentityFT)Ú_sub_man_clir   ÚProcessExecutionError)rS   Úcmds     r6   r   z!SubscriptionManager.is_registered    s7   € ð
 ˆlˆð	Ü˜Ôð øô ×)Ñ)ò 	Ùð	ús   … ‘'¦'c                 ó^  — | j                   �Á| j                  �µddj                  | j                   «      dj                  | j                  «      g}| j                  �*|j	                  dj                  | j                  «      «       | j
                  �*|j	                  dj                  | j
                  «      «       	 t        |d¬«      d	   }nð| j                  �Á| j                  �µddj                  | j                  «      dj                  | j                  «      g}| j                  �*|j	                  dj                  | j                  «      «       | j
                  �*|j	                  dj                  | j
                  «      «       	 t        |d¬«      d	   }n#| j                  d«       | j                  d«       y|j                  d«      d   j                  «       }| j                   j#                  d|«       y# t        j                  $ rC}|j                  d
k(  r*| j                  dj                  |j                  «      «       Y d}~yd}~ww xY w# t        j                  $ rC}|j                  d
k(  r*| j                  dj                  |j                  «      «       Y d}~yd}~ww xY w)zŽ
        Registers the system by userid and password or activation key
        and org.  Returns True when successful False when not.
        NÚregisterz--activationkey={0}z	--org={0}z--baseurl={0}z--serverurl={0}T)Úlogstring_valr   Ú zRegistration failed due to: {0}Fz--username={0}z--password={0}z8Unable to register system due to incomplete information.z9Use either activationkey and org *or* userid and passwordzID: é   z"Registered successfully with ID %s)rO   r?   r*   rM   ÚappendrN   rg   r   rh   Ústdoutr-   ÚstderrrP   rB   ÚsplitÚrstripr   r   )rS   ri   Ú
return_outr5   Úreg_ids        r6   r!   z SubscriptionManager.rhn_register®   sM  € ð ×ÑÐ+°$·(±(Ð2Fð Ø%×,Ñ,¨T×-@Ñ-@ÓAØ×"Ñ" 4§8¡8Ó,ðˆCð × Ñ Ð,Ø—
‘
˜?×1Ñ1°$×2CÑ2CÓDÔEà×#Ñ#Ð/Ø—
‘
Ð,×3Ñ3°D×4HÑ4HÓIÔJðÜ)¨#¸TÔBÀ1ÑE‘
ð �k‰kÐ%¨D¯M©MÐ,Eð Ø ×'Ñ'¨¯©Ó4Ø ×'Ñ'¨¯©Ó6ðˆCð × Ñ Ð,Ø—
‘
˜?×1Ñ1°$×2CÑ2CÓDÔEà×#Ñ#Ð/Ø—
‘
Ð,×3Ñ3°D×4HÑ4HÓIÔJðÜ)¨#¸TÔBÀ1ÑE‘
ð �M‰MØJôð �M‰MØKôð à×!Ñ! &Ó)¨!Ñ,×3Ñ3Ó5ˆØ�‰�‰Ð;¸VÔDØøô[ ×-Ñ-ò Ø—8‘8˜r’>Ø—M‘MØ9×@Ñ@ÀÇÁÓJôô ûðûô6 ×-Ñ-ò Ø—8‘8˜r’>Ø—M‘MØ9×@Ñ@ÀÇÁÓJôô ûðús0   Â=G= Æ
I Ç=IÈ9IÉIÉJ,É)9J'Ê'J,c                 ó&  — dddj                  | j                  «      g}	 t        |«      d   }|j                  d«      D ]#  }|dk7  sŒ	| j                  j                  |«       Œ% y	# t        j                  $ r—}|j
                  j                  «       dk7  r8|j
                  j                  d«      D ]  }|dk7  sŒ	| j                  |«       Œ n8| j                  dj                  |j                  j                  «       «      «       Y d }~yd }~ww xY w)
NÚattachú--autoz--servicelevel={0}r   rm   ú
z*Setting the service level failed with: {0}FT)r*   r#   rg   r   rh   rp   rs   rr   r-   rq   Ústripr   r   ©rS   ri   rt   r5   Úlines        r6   r$   z&SubscriptionManager._set_service_levelö   sø   € àØØ ×'Ñ'¨×(9Ñ(9Ó:ð
ˆð	Ü% cÓ*¨1Ñ-ˆJð ×$Ñ$ TÓ*ò 	%ˆDØ�r‹zØ—‘—‘˜tÕ$ð	%ð øô ×)Ñ)ò 	Ø�x‰x�‰Ó  BÒ&ØŸH™HŸN™N¨4Ó0ò ,�DØ˜r“zØŸ™ dÕ+ñ,ð —‘Ø@×GÑGØŸ™Ÿ™Ó(óôô
 ûð	ús    A& Á&DÁ9A DÂ:ADÄDc                 ó  — ddg}	 t        |«      d   }|j                  d«      D ]#  }|dk7  sŒ	| j                  j                  |«       Œ% y# t        j                  $ r*}| j                  dj	                  |«      «       Y d }~yd }~ww xY w)	Nrw   rx   r   zAuto-attach failed with: {0}Fry   rm   T)rg   r   rh   r-   r*   rr   r   r   r{   s        r6   r%   z$SubscriptionManager._set_auto_attach  s‹   € Ø˜Ð"ˆð	Ü% cÓ*¨1Ñ-ˆJð ×$Ñ$ TÓ*ò 	%ˆDØ�r‹zØ—‘—‘˜tÕ$ð	%ð øô ×)Ñ)ò 	Ø�M‰MÐ8×?Ñ?ÀÓBÔCÜûð	ús   †A ÁB	Á BÂB	c                 óÖ   — g }g }g d¢}t        |«      d   }|j                  «       j                  d«      }g d¢}t        |«      d   }|j                  «       j                  d«      }||fS )zh
        Gets the list pools for the active subscription and returns them
        in list form.
        )r(   z--availableú--pool-onlyr   ry   )r(   z
--consumedr   )rg   rs   rr   )rS   Ú	availableÚconsumedri   Úresultss        r6   Ú	_getPoolszSubscriptionManager._getPools  ss   € ð
 ˆ	Øˆò 5ˆÜ˜sÓ# AÑ&ˆØ—^‘^Ó%×,Ñ,¨TÓ2ˆ	ò 4ˆÜ˜sÓ# AÑ&ˆØ—N‘NÓ$×+Ñ+¨DÓ1ˆà˜(Ð"Ð"r=   c                 óŠ  — ddg}t        |«      d   }g }|j                  d«      D ]8  }d|v sŒ|j                  |j                  d«      d   j                  «       «       Œ: ddg}t        |«      d   }g }|j                  d«      D ]8  }d|v sŒ|j                  |j                  d«      d   j                  «       «       Œ: ||fS )	zl
        Obtains the current list of active yum repositories and returns
        them in list form.
        Úreposz--list-enabledr   ry   zRepo ID:ú:rn   z--list-disabled)rg   rr   ro   rz   )rS   ri   rt   Úactive_reposÚrepoÚinactive_reposs         r6   Ú	_getReposzSubscriptionManager._getRepos0  sá   € ð Ð(Ð)ˆÜ! #Ó& qÑ)ˆ
ØˆØ×$Ñ$ TÓ*ò 	BˆDØ˜TÒ!Ø×#Ñ# T§Z¡Z°£_°QÑ%7×$>Ñ$>Ó$@ÕAð	Bð Ð)Ð*ˆÜ! #Ó& qÑ)ˆ
àˆØ×$Ñ$ TÓ*ò 	DˆDØ˜TÒ!Ø×%Ñ% t§z¡z°#£°qÑ'9×&@Ñ&@Ó&BÕCð	Dð ˜^Ð+Ð+r=   c                 ó`  — |s| j                   j                  d«       y| j                  «       \  }}g }dg}|D ]K  }||vr%||v r!|j                  dj	                  |«      «       Œ,| j                  dj	                  |«      «       ŒM t        |«      dkD  rY|j                  |«       	 t        |«       | j                   j                  ddj                  |«      j                  d	d
«      «       yy# t        j                  $ r+}| j                  dj	                  |«      «       Y d}~yd}~ww xY w)zl
        Takes a list of subscription pools and "attaches" them to the
        current subscription
        zNo pools to attachTrw   z
--pool={0}zPool {0} is not availabler   z/Attached the following pools to your system: %sr\   z--pool=rm   z$Unable to attach pool {0} due to {1}NF)r   r   rƒ   ro   r*   r-   ÚlenÚextendrg   r^   Úreplacer   rh   )rS   r&   Úpool_availableÚpool_consumedÚ	pool_listri   Úpoolr5   s           r6   r)   zSubscriptionManager.addPoolF  s  € ñ Ø�H‰H�N‰NÐ/Ô0Øà(,¯©Ó(8Ñ%ˆ˜Øˆ	ØˆjˆØò 	HˆDØ˜MÑ)°¸Ñ0FØ× Ñ  ×!4Ñ!4°TÓ!:Õ;à—‘Ð9×@Ñ@ÀÓFÕGð		Hô
 ˆy‹>˜AÒØ�J‰J�yÔ!ðÜ˜SÔ!Ø—‘—‘ØEØ—Y‘Y˜yÓ)×2Ñ2°9¸bÓAôð ð øô ×-Ñ-ò Ø—‘Ø:×AÑAÀ$ÈÓJôô ûð	ús   Â'AC/ Ã/D-Ä!D(Ä(D-c                 ó‚  — | j                   }| j                  }|€g }|€g }t        |t        «      s| j	                  d«       yt        |t        «      s| j	                  d«       y|s|s| j
                  j                  d«       y| j                  «       \  }}g }g }|D ]8  }||v r!|j                  dj                  |«      «       Œ(|j                  |«       Œ: g }g }	|D ]8  }||v r!|j                  dj                  |«      «       Œ(|	j                  |«       Œ: t        |«      dkD  rH|D ]C  }
|
|v r| j
                  j                  d	|
«       Œ$| j	                  d
j                  |
«      «       ŒE t        |	«      dkD  r#|	D ]  }
| j
                  j                  d|
«       Œ  dg}t        |«      dkD  r|j                  |«       t        |«      dkD  r|j                  |«       	 t        |«       t        |«      dkD  r;| j
                  j                  ddj                  |«      j!                  dd«      «       t        |«      dkD  r;| j
                  j                  ddj                  |«      j!                  dd«      «       y# t        j                  $ r*}| j	                  dj                  |«      «       Y d}~yd}~ww xY w)zÑ
        Takes a list of yum repo ids that need to be disabled or enabled; then
        it verifies if they are already enabled or disabled and finally
        executes the action to disable or enable
        Nz&Repo IDs must in the format of a list.Fz No repo IDs to enable or disableTz--enable={0}z--disable={0}r   zRepo %s is already enabledz!Repo {0} does not appear to existz.Repo %s not disabled because it is not enabledr…   z Unable to alter repos due to {0}zEnabled the following repos: %sr\   z	--enable=rm   z Disabled the following repos: %sz
--disable=)rQ   rR   r'   r(   r-   r   r   rŠ   ro   r*   rŒ   r�   rg   r   rh   r^   rŽ   )rS   ÚereposÚdreposr‡   r‰   Úenable_listÚenable_list_failÚrepoidÚdisable_listÚdisable_list_failÚfailri   r5   s                r6   r+   z SubscriptionManager.update_reposh  s   € ð ×!Ñ!ˆØ×"Ñ"ˆØˆ>ØˆFØˆ>ØˆFÜ˜&¤$Ô'Ø�M‰MÐBÔCØä˜&¤$Ô'Ø�M‰MÐBÔCØñ ¡Ø�H‰H�N‰NÐ=Ô>Øà'+§~¡~Ó'7Ñ$ˆ�nàˆØÐØò 	0ˆFØ˜Ñ'Ø×"Ñ" >×#8Ñ#8¸Ó#@ÕAà ×'Ñ'¨Õ/ð		0ð ˆØÐØò 	1ˆFØ˜Ñ%Ø×#Ñ# O×$:Ñ$:¸6Ó$BÕCà!×(Ñ(¨Õ0ð		1ô ÐÓ  1Ò$Ø(ò �à˜<Ñ'Ø—H‘H—N‘NÐ#?ÀÕFà—M‘MØ;×BÑBÀ4ÓHõðô Ð Ó! AÒ%Ø)ò �Ø—‘—‘ØDÀdõðð
 ˆiˆÜˆ|Ó˜qÒ Ø�J‰J�|Ô$äˆ{Ó˜aÒØ�J‰J�{Ô#ð	Ü˜Ôô
 ˆ{Ó˜aÒØ�H‰H�N‰NØ1Ø—‘˜;Ó'×0Ñ0°¸bÓAôô ˆ|Ó˜qÒ Ø�H‰H�N‰NØ2Ø—‘˜<Ó(×1Ñ1°,ÀÓCôð øô ×)Ñ)ò 	Ø�M‰MÐ<×CÑCÀAÓFÔGÜûð	ús   Ç#J ÊJ>Ê J9Ê9J>c                 ód   — t        | j                  xr | j                  xs | j                  «      S ©N)ÚboolrP   rB   rO   )rS   s    r6   r   z!SubscriptionManager.is_configured¾  s%   € Ü�T—[‘[Ò2 T§]¡]ÒJ°t×7JÑ7JÓKÐKr=   r�   )r9   r:   r;   r]   rT   r,   r-   r   r   r!   r$   r%   rƒ   rŠ   r)   r+   r   r<   r=   r6   r   r   T   sQ   „ ò€Mó?ò$òò!òFòFòPò4
ò#ò(,ò, òDTólLr=   r   c                 ó8   — t        j                   dg| z   |¬«      S )z·
    Uses the preferred cloud-init subprocess def of subp.subp
    and runs subscription-manager.  Breaking this to a
    separate function for later use in mocking and unittests
    zsubscription-manager)Ú	logstring)r   )ri   rl   s     r6   rg   rg   Â  s   € ô �9‰9Ð,Ð-°Ñ3¸}ÔMÐMr=   )F)Ú__doc__ÚloggingÚ	cloudinitr   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.settingsr   Ú	getLoggerr9   r   r   Ú__annotations__r.   r(   r7   Ú	Exceptionr    r   rg   r<   r=   r6   ú<module>r«      s˜   ðò Kã ç  Ý !Ý #Ý .Ý +à€g×Ñ˜Ó!€ð Ú.ØØ 1Ð2ñ	€€jó ð37�ð 37˜6ð 37¨%ð 37°tð 37Àó 37ôl	˜	ô 	÷kLñ kLô\Nr=   