ó
    x[hÙ'  ã                   ó®   • S SK r S SKrS SKJrJrJrJr  S SKJr  S SKJ	r
  S SKJr  S SKJrJr  \ R                   " \5      r " S S\R&                  5      rg)	é    N)ÚdistrosÚhelpersÚsubpÚutil)ÚPackageList)Ú	rhel_util)ÚHostnameConf)Ú
PER_ALWAYSÚPER_INSTANCEc                   óÄ   • \ rS rSrSrSrS/rSrSrSr	Sr
S	rS
SSSSSSS.S.0rS rS$S jrS\4S jrS%S jrS rSS.S jrS$S jrS rS rS rS  rS! r\S" 5       rS#rg)&ÚDistroé   z/etc/sysconfig/clockz/etc/HOSTNAMEÚservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz/etc/hostnamez/etc/locale.confz/etc/localtimeÚ	sysconfigzetc/sysconfig/network/configÚsusez%(base)s/network/ifcfg-%(name)sz3etc/udev/rules.d/85-persistent-net-cloud-init.rulesz!%(base)s/network/ifroute-%(name)s)Úipv4Úipv6)ÚcontrolÚflavorÚiface_templatesÚnetrules_pathÚroute_templatesc                 óô   • [         R                  R                  XX#5        [        R                  " U5      U l        SU l        S U l        SU l        SUS'   U R                  5       (       a  S/U l
        SUS'   g g )Nr   FÚsshdÚssh_svcnameÚ	systemctlzsshd.service)r   r   Ú__init__r   ÚRunnersÚ_runnerÚosfamilyÚupdate_methodÚread_only_rootÚuses_systemdÚinit_cmd)ÚselfÚnameÚcfgÚpathss       Ú</usr/lib/python3/dist-packages/cloudinit/distros/opensuse.pyr   ÚDistro.__init__/   sn   € Ü�‰×Ñ ¨CÔ7Ü—’ uÓ-ˆŒØˆŒØ!ˆÔØ#ˆÔØ#ˆˆMÑØ×Ñ×ÑØ(˜MˆDŒMØ!/ˆC�Òð ó    Nc                 ó¸   • U R                  5       (       a  U(       d  U R                  nSU0nOU(       d  U R                  nSU0n[        R                  " X#5        g )NÚLANGÚRC_LANG)r#   Úsystemd_locale_conf_fnÚlocale_conf_fnÚrhutilÚupdate_sysconfig_file)r%   ÚlocaleÚout_fnÚ
locale_cfgs       r)   Úapply_localeÚDistro.apply_locale:   sO   € Ø×Ñ×ÑÞØ×4Ñ4�Ø  &Ð)‰JæØ×,Ñ,�Ø# VÐ,ˆJÜ×$Ò$ VÕ8r+   Úpkglistc                 ó&   • U R                  SSUS9  g )NÚinstallz--auto-agree-with-licenses)ÚargsÚpkgs)Úpackage_command)r%   r8   s     r)   Úinstall_packagesÚDistro.install_packagesE   s   € Ø×ÑØÐ8¸wð 	ò 	
r+   c                 óÖ  • Uc  / nU R                  5         U R                  (       a&  U R                  S:X  d  [        R	                  S5        g U R                  S:X  a  SS/nO/ SQnUS:X  a  SnU(       d  U R                  S:X  a  US:X  a  Sn/ S	QnUS
:X  a  SS/nUR                  U5        U(       a'  [        U[        5      (       a  UR                  U5        O-U(       a&  [        U[        5      (       a  UR                  U5        [        R                  " SU5      nUR                  U5        [        R                  " USS9  U R                  S:X  a  [        R                  S5        g g )NÚtransactionalzUPackage operation requested but read only root without btrfs and transactional-updataÚzypperú--non-interactive)útransactional-updaterC   ú--drop-if-no-changeÚpkgÚupgradeÚupdateÚup)rD   rC   rE   Úrefreshz%s-%sF)Úcapturez8To use/activate the installed packages reboot the system)Ú_set_update_methodr"   r!   ÚLOGÚerrorÚappendÚ
isinstanceÚstrÚlistÚextendr   Úexpand_package_listr   Úinfo)r%   Úcommandr;   r<   Úcmdr8   s         r)   r=   ÚDistro.package_commandJ   sC  € Ø‰<ØˆDà×ÑÔ!Ø×× t×'9Ñ'9¸_Ó'LÜ�I‰Ið9ôð ð ×Ñ Ó)ØÐ0Ð1‰CòˆCð �iÓØˆGæØ×"Ñ" oÓ5Ø˜8Ó#àˆGòˆCð �iÓàÐ0Ð1ˆCØ�
‰
�7Ôö ”J˜t¤S×)Ñ)Ø�J‰J�tÕÞ”j ¤t×,Ñ,Ø�J‰J�tÔä×*Ò*¨7°DÓ9ˆØ�
‰
�7Ôô 	�	Š	�#˜uÒ%à×Ñ Ó0Ü�H‰HØJõð 1r+   c                 ón  • U R                  U5      nU R                  5       (       aA  [        R                  " U R                  5        [        R
                  " X R                  5        g S[        U5      0n[        R                  " U R                  U5        [        R                  " X R                  5        g )NÚTIMEZONE)Ú_find_tz_filer#   r   Údel_fileÚtz_local_fnÚsym_linkrQ   r1   r2   Úclock_conf_fnÚcopy)r%   ÚtzÚtz_fileÚ	clock_cfgs       r)   Úset_timezoneÚDistro.set_timezone‡   sƒ   € Ø×$Ñ$ RÓ(ˆØ×Ñ×Ñô �MŠM˜$×*Ñ*Ô+Ü�MŠM˜'×#3Ñ#3Õ4ð œC ›GðˆIô ×(Ò(¨×);Ñ);¸YÔGä�IŠI�g×/Ñ/Õ0r+   F)Úforcec                ót   • U R                   R                  SU R                  S/U(       a  [        O[        S9  g )Nzupdate-sourcesrJ   )Úfreq)r   Úrunr=   r
   r   )r%   rf   s     r)   Úupdate_package_sourcesÚDistro.update_package_sources—   s1   € Ø�‰×ÑØØ× Ñ ØˆKÞ$•¬,ð	 	ò 	
r+   c                 ó–  • U R                  5       (       a:  UR                  S5      (       a$  [        R                  " U5      R	                  5       $ U R                  5       (       a-  [
        R
                  " S/5      u  p4[        U5      (       a  U$ U$  U R                  U5      nUR                  nW(       d  U$ U$ ! [         a     Nf = f)Nú/previous-hostnameÚhostname)
r#   Úendswithr   Úload_text_fileÚstripr   ÚlenÚ_read_hostname_confrn   ÚIOError)r%   ÚfilenameÚdefaultÚoutÚ_errÚconfrn   s          r)   Ú_read_hostnameÚDistro._read_hostnameŸ   s±   € Ø×Ñ×Ñ 8×#4Ñ#4Ð5I×#JÑ#JÜ×&Ò& xÓ0×6Ñ6Ó8Ð8Ø×Ñ× Ñ ÜŸ)š) Z LÓ1‰KˆSÜ�3�x‰xØ�
à�ðØ×/Ñ/°Ó9�ØŸ=™=�ö Ø�ØˆOøô	 ó Ùðús   ÂB; Â;
CÃCc                 ó   • g)Nz	127.0.1.1© )r%   s    r)   Ú_get_localhost_ipÚDistro._get_localhost_ip²   s   € Ør+   c                 ód   • [        [        R                  " U5      5      nUR                  5         U$ ©N)r	   r   rp   Úparse)r%   ru   ry   s      r)   rs   ÚDistro._read_hostname_confµ   s%   € ÜœD×/Ò/°Ó9Ó:ˆØ�
‰
ŒØˆr+   c                 ó‚   • U R                  5       (       a  U R                  nOU R                  nXR                  U5      4$ r�   )r#   Úsystemd_hostname_conf_fnÚhostname_conf_fnrz   )r%   Úhost_fns     r)   Ú_read_system_hostnameÚDistro._read_system_hostnameº   s;   € Ø×Ñ×ÑØ×3Ñ3‰Gà×+Ñ+ˆGØ×,Ñ,¨WÓ5Ð6Ð6r+   c                 ó&  • U R                   Gc  [        R                  " S5      nSnU(       aÇ  Uu  p2n[        R                  " S5      R	                  S5      nU HO  nUR                  U5      (       d  M  UR	                  5       nUS   U:w  a  M6  US   R                  S5      U l          O   UR                  5       S	:X  a,  [        R                  R                  S
5      (       a  SU l         gSU l         g[        R                  S5        SU l         gg)z7Decide if we want to use transactional-update or zypperNÚ/Ú z/proc/mountsÚ
é   é   ÚroÚbtrfsz/usr/sbin/transactional-updaterA   rB   z7Could not determine filesystem type of '/' using zypper)r!   r   Úget_mount_inforp   ÚsplitÚ
startswithr"   ÚlowerÚosÚpathÚexistsrM   rU   )r%   ÚresultÚfs_typeÚdevpthÚmount_pointÚmountsÚmountÚ
mount_infos           r)   rL   ÚDistro._set_update_methodÁ   sñ   € à×ÑÒ%Ü×(Ò(¨Ó-ˆFØˆGÞØ17Ñ.� +ä×,Ò,¨^Ó<×BÑBÀ4ÓH�Û#�EØ×'Ñ'¨×/Ó/Ø%*§[¡[£]˜
Ø% a™=¨KÓ7Ù$Ø.8¸©m×.FÑ.FÀtÓ.L˜Ô+Ùñ $ð —=‘=“? gÓ-´"·'±'·.±.Ø4÷3ñ 3ð *9�DÕ&à)1�DÕ&ä—‘ØMôð &.�Õ"ð1 &r+   c                 óž  • [         R                  " U R                  SS5      nU R                  5       (       a-  UR	                  S5      (       a  [         R
                  " X!5        g U R                  5       (       aN  U(       a#  [        R                  " SS[        U5      /5        g [        R                  " SSS[        U5      /5        g S n U R                  U5      nU(       d  [        S5      nUR                  U5        [         R
                  " U[        U5      S	5        g ! [         a!    U(       a   NX[        R                  S5         g f = f)
NÚcreate_hostname_fileTrm   Úhostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname file notcreatedrŒ   i¤  )r   Úget_cfg_option_boolÚ_cfgr#   ro   Ú
write_filer   rQ   rs   rt   rM   rU   r	   Úset_hostname)r%   rn   ru   r¢   ry   s        r)   Ú_write_hostnameÚDistro._write_hostnameÝ   s  € Ü#×7Ò7Ø�I‰IÐ-¨tó 
Ðð ×Ñ×Ñ 8×#4Ñ#4Ð5I×#JÑ#JÜ�OŠO˜HÕ/Ø×Ñ× Ñ Þ#Ü—	’	˜=¨.¼#¸h»-ÐHÕIä—	’	à%Ø&Ø%Ü˜H›ð	õð ˆDðð ×/Ñ/°Ó9�ö Ü# BÓ'�Ø×Ñ˜hÔ'Ü�OŠO˜H¤c¨$£i°Õ7øô ó Þ'Ùä—H‘Hð"ôñ ðús   ÃD! Ä!EÄ4EÅEc                 ó.  • U R                   (       dy  [        R                  " 5       S   nUS   n[        US   R	                  S5      S   5      nUS:¼  a  SU;  d  US:¼  a!  SU;   a  US:w  a  / SQU l         U R                   $ / S	QU l         U R                   $ )
z5The preferred ntp client is dependent on the version.Údistr   rŽ   Ú.é   ÚopenSUSEé*   )Úchronyúsystemd-timesyncdÚntp)r²   r±   r°   )Ú_preferred_ntp_clientsr   Úsystem_infoÚintr“   )r%   Údistro_infor&   Ú	major_vers       r)   Úpreferred_ntp_clientsÚDistro.preferred_ntp_clients  s›   € ð
 ×*×*Ü×*Ò*Ó,¨VÑ4ˆKØ˜q‘>ˆDÜ˜K¨™N×0Ñ0°Ó5°aÑ8Ó9ˆIð ˜R“ J°dÓ$:Ø˜R“ J°$Ó$6¸9È»?ò/�Ô+ð ×*Ñ*Ð*ò/�Ô+ð ×*Ñ*Ð*r+   )r³   r   r$   r    r"   r!   r�   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r_   r†   r$   r0   Únetwork_conf_fnr…   r/   r]   Úrenderer_configsr   r6   r   r>   r=   rd   rj   rz   r~   rs   rˆ   rL   r¨   Úpropertyr¸   Ú__static_attributes__r}   r+   r)   r   r      s¶   † Ø*€MØ&ÐØˆ{€HØ.€NØ5€OØ.ÐØ/ÐØ"€KàØ5ØØ@àEð <Ø;ñ ñ
ðÐò	0ô	9ð
¨ô 
ô
;òz1ð  /4õ 
ôò&òò
7ò.ò8$8ðL ñ+ó ó+r+   r   )Úloggingr–   Ú	cloudinitr   r   r   r   Úcloudinit.distrosr   r   r1   Ú"cloudinit.distros.parsers.hostnamer	   Úcloudinit.settingsr
   r   Ú	getLoggerrº   rM   r   r}   r+   r)   Ú<module>rÈ      sA   ðó Û 	ç 2Ó 2Ý )Ý 1Ý ;ß 7à×Ò˜Ó!€ôG+ˆW�^‰^õ G+r+   