Ë
    x[hÙ'  ã                   ó®   — d dl Z d dlZd dlmZ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  e j                   e«      Z G d„ dej&                  «      Zy)	é    N)ÚdistrosÚhelpersÚsubpÚutil)ÚPackageList)Ú	rhel_util)ÚHostnameConf)Ú
PER_ALWAYSÚPER_INSTANCEc                   ó²   — e Zd ZdZdZdgZdZdZdZdZ	dZ
d	d
ddddddœdœiZd„ Zd"d„Zdefd„Zd#d„Zd„ Zddœd„Zd"d„Zd„ Zd„ Zd„ Zd„ Zd „ Zed!„ «       Zy)$ÚDistroz/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                 óì   — t         j                  j                  | |||«       t        j                  |«      | _        d| _        d | _        d| _        d|d<   | j                  «       rdg| _
        d|d<   y y )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   zDistro.__init__/   so   € Ü�‰×Ñ  d¨C°Ô7Ü—‘ uÓ-ˆŒØˆŒØ!ˆÔØ#ˆÔØ#ˆˆMÑØ×ÑÔØ(˜MˆDŒMØ!/ˆC�Òð ó    Nc                 óš   — | j                  «       r|s| j                  }d|i}n|s| j                  }d|i}t        j                  ||«       y )NÚLANGÚRC_LANG)r"   Úsystemd_locale_conf_fnÚlocale_conf_fnÚrhutilÚupdate_sysconfig_file)r$   ÚlocaleÚout_fnÚ
locale_cfgs       r(   Úapply_localezDistro.apply_locale:   sN   € Ø×ÑÔÙØ×4Ñ4�Ø  &Ð)‰JáØ×,Ñ,�Ø# VÐ,ˆJÜ×$Ñ$ V¨ZÕ8r)   Úpkglistc                 ó,   — | j                  dd|¬«       y )NÚinstallz--auto-agree-with-licenses)ÚargsÚpkgs)Úpackage_command)r$   r5   s     r(   Úinstall_packageszDistro.install_packagesE   s   € Ø×ÑØÐ8¸wð 	õ 	
r)   c                 óŒ  — |€g }| j                  «        | j                  r%| j                  dk(  st        j	                  d«       y | j                  dk(  rddg}ng d¢}|dk(  rd}|s| j                  dk(  r|dk(  rd}g d	¢}|d
k(  rddg}|j                  |«       |r"t        |t        «      r|j                  |«       n#|r!t        |t        «      r|j                  |«       t        j                  d|«      }|j                  |«       t        j                  |d¬«       | j                  dk(  rt        j                  d«       y y )NÚtransactionalzUPackage operation requested but read only root without btrfs and transactional-updataÚzypperú--non-interactive)útransactional-updater?   ú--drop-if-no-changeÚpkgÚupgradeÚupdateÚup)r@   r?   rA   Ú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$   Úcommandr8   r9   Úcmdr5   s         r(   r:   zDistro.package_commandJ   s=  € Øˆ<Øˆ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                 ó`  — | j                  |«      }| j                  «       r@t        j                  | j                  «       t        j
                  || j                  «       y dt        |«      i}t        j                  | j                  |«       t        j                  || j                  «       y )NÚTIMEZONE)Ú_find_tz_filer"   r   Údel_fileÚtz_local_fnÚsym_linkrM   r/   r0   Úclock_conf_fnÚcopy)r$   ÚtzÚtz_fileÚ	clock_cfgs       r(   Úset_timezonezDistro.set_timezone‡   s„   € Ø×$Ñ$ RÓ(ˆØ×ÑÔô �M‰M˜$×*Ñ*Ô+Ü�M‰M˜' 4×#3Ñ#3Õ4ð œC ›GðˆIô ×(Ñ(¨×);Ñ);¸YÔGä�I‰I�g˜t×/Ñ/Õ0r)   F)Úforcec                ó|   — | j                   j                  d| j                  dg|rt        ¬«       y t        ¬«       y )Nzupdate-sourcesrF   )Úfreq)r   Úrunr:   r
   r   )r$   r`   s     r(   Úupdate_package_sourceszDistro.update_package_sources—   s>   € Ø�‰×ÑØØ× Ñ ØˆKÙ$”ð	 	õ 	
ô +7ð	 	õ 	
r)   c                 ó`  — | j                  «       r4|j                  d«      r#t        j                  |«      j	                  «       S | j                  «       r(t        j
                  dg«      \  }}t        |«      r|S |S 	 | j                  |«      }|j                  }s|S |S # t        $ r Y Œw xY w)Nú/previous-hostnameÚhostname)
r"   Úendswithr   Úload_text_fileÚstripr   ÚlenÚ_read_hostname_confrg   ÚIOError)r$   ÚfilenameÚdefaultÚoutÚ_errÚconfrg   s          r(   Ú_read_hostnamezDistro._read_hostnameŸ   s¨   € Ø×ÑÔ 8×#4Ñ#4Ð5IÔ#JÜ×&Ñ& xÓ0×6Ñ6Ó8Ð8Ø×ÑÔ ÜŸ)™) Z LÓ1‰KˆS�$Ü�3ŒxØ�
à�ðØ×/Ñ/°Ó9�ØŸ=™=�ñ Ø�ØˆOøô	 ò Ùðús   Á>B! Â!	B-Â,B-c                  ó   — y)Nz	127.0.1.1© )r$   s    r(   Ú_get_localhost_ipzDistro._get_localhost_ip²   s   € Ør)   c                 ób   — t        t        j                  |«      «      }|j                  «        |S ©N)r	   r   ri   Úparse)r$   rn   rr   s      r(   rl   zDistro._read_hostname_confµ   s%   € ÜœD×/Ñ/°Ó9Ó:ˆØ�
‰
ŒØˆr)   c                 óz   — | j                  «       r| j                  }n| j                  }|| j                  |«      fS rx   )r"   Úsystemd_hostname_conf_fnÚhostname_conf_fnrs   )r$   Úhost_fns     r(   Ú_read_system_hostnamezDistro._read_system_hostnameº   s:   € Ø×ÑÔØ×3Ñ3‰Gà×+Ñ+ˆGØ˜×,Ñ,¨WÓ5Ð6Ð6r)   c                 óø  — | j                   €ît        j                  d«      }d}|r¸|\  }}}t        j                  d«      j	                  d«      }|D ]G  }|j                  |«      sŒ|j	                  «       }|d   |k7  rŒ.|d   j                  d«      | _         n |j                  «       d	k(  r't        j                  j                  d
«      rd| _         yd| _         yt        j                  d«       d| _         yy)z7Decide if we want to use transactional-update or zypperNú/Ú z/proc/mountsú
é   é   ÚroÚbtrfsz/usr/sbin/transactional-updater=   r>   z7Could not determine filesystem type of '/' using zypper)r    r   Úget_mount_infori   ÚsplitÚ
startswithr!   ÚlowerÚosÚpathÚexistsrI   rQ   )r$   ÚresultÚfs_typeÚdevpthÚmount_pointÚmountsÚmountÚ
mount_infos           r(   rH   z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ð *9�DÕ&à)1�DÕ&ä—‘ØMôð &.�Õ"ð1 &r)   c                 óZ  — t        j                  | j                  dd«      }| j                  «       r(|j	                  d«      rt        j
                  ||«       y | j                  «       rG|r"t        j                  ddt        |«      g«       y t        j                  dddt        |«      g«       y d }	 | j                  |«      }|st        d«      }|j                  |«       t        j
                  |t        |«      d	«       y # t        $ r |rnt        j                  d«       Y y Y Œdw xY w)
NÚcreate_hostname_fileTrf   Úhostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname file notcreatedr�   i¤  )r   Úget_cfg_option_boolÚ_cfgr"   rh   Ú
write_filer   rM   rl   rm   rI   rQ   r	   Úset_hostname)r$   rg   rn   r–   rr   s        r(   Ú_write_hostnamezDistro._write_hostnameÝ   s  € Ü#×7Ñ7Ø�I‰IÐ-¨tó 
Ðð ×ÑÔ 8×#4Ñ#4Ð5IÔ#JÜ�O‰O˜H hÕ/Ø×ÑÔ Ù#Ü—	‘	˜=¨.¼#¸h»-ÐHÕIä—	‘	à%Ø&Ø%Ü˜H›ð	õð ˆDðð ×/Ñ/°Ó9�ñ Ü# BÓ'�Ø×Ñ˜hÔ'Ü�O‰O˜H¤c¨$£i°Õ7øô ò Ù'Øä—H‘Hð"ôñ ñ ðús   Â4D Ä!D*Ä)D*c                 ó  — | j                   sqt        j                  «       d   }|d   }t        |d   j	                  d«      d   «      }|dk\  rd|vs|dk\  rd|v r|dk7  rg d¢| _         | j                   S g d	¢| _         | j                   S )
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_clientsz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)   rx   )NN)Ú__name__Ú
__module__Ú__qualname__rZ   r|   r#   r.   Únetwork_conf_fnr{   r-   rX   Úrenderer_configsr   r4   r   r;   r:   r_   rd   rs   rv   rl   r~   rH   rœ   Úpropertyr«   ru   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   r/   Ú"cloudinit.distros.parsers.hostnamer	   Úcloudinit.settingsr
   r   Ú	getLoggerr¬   rI   r   ru   r)   r(   ú<module>r¸      sC   ðó Û 	ç 2Ó 2Ý )Ý 1Ý ;ß 7à€g×Ñ˜Ó!€ôG+ˆW�^‰^õ G+r)   