o
    x[hÙ'  ã                   @   s|   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  e¡ZG dd„ dejƒZdS )	é    N)ÚdistrosÚhelpersÚsubpÚutil)ÚPackageList)Ú	rhel_util)ÚHostnameConf)Ú
PER_ALWAYSÚPER_INSTANCEc                   @   sÆ   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d„ Zd/dd„Zdefdd„Zd0dd„Zdd„ Zddœdd „Zd/d!d"„Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zed-d.„ ƒZdS )1Ú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                 C   sX   t j | |||¡ t |¡| _d| _d | _d| _d|d< |  	¡ r*dg| _
d|d< d S d S )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Úpaths© r%   ú</usr/lib/python3/dist-packages/cloudinit/distros/opensuse.pyr   /   s   þzDistro.__init__Nc                 C   s>   |   ¡ r|s	| j}d|i}n	|s| j}d|i}t ||¡ d S )NÚLANGÚRC_LANG)r   Úsystemd_locale_conf_fnÚlocale_conf_fnÚrhutilÚupdate_sysconfig_file)r!   ÚlocaleÚout_fnÚ
locale_cfgr%   r%   r&   Úapply_locale:   s   
zDistro.apply_localeÚpkglistc                 C   s   | j dd|d� d S )NÚinstallz--auto-agree-with-licenses)ÚargsÚpkgs)Úpackage_command)r!   r1   r%   r%   r&   Úinstall_packagesE   s   
ÿzDistro.install_packagesc                 C   s  |d u rg }|   ¡  | jr| jdkst d¡ d S | 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rFddg}| |¡ |rXt|tƒrX| |¡ n|rdt|tƒrd| 	|¡ t
 d|¡}| 	|¡ tj|dd� | jdkr‚t d¡ d S d S )NÚtransactionalzUPackage operation requested but read only root without btrfs and transactional-updataÚzypperú--non-interactive)útransactional-updater9   ú--drop-if-no-changeÚpkgÚupgradeÚupdateÚup)r:   r9   r;   Ú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!   Úcommandr3   r4   Úcmdr1   r%   r%   r&   r5   J   sD   ÿ

ÿ




ÿÿzDistro.package_commandc                 C   s\   |   |¡}|  ¡ rt | j¡ t || j¡ d S dt|ƒi}t | j	|¡ t 
|| j¡ d S )NÚTIMEZONE)Ú_find_tz_filer   r   Údel_fileÚtz_local_fnÚsym_linkrG   r+   r,   Úclock_conf_fnÚcopy)r!   ÚtzÚtz_fileÚ	clock_cfgr%   r%   r&   Úset_timezone‡   s   
ÿzDistro.set_timezoneF)Úforcec                C   s$   | j jd| jdg|rtntd� d S )Nzupdate-sourcesr@   )Úfreq)r   Úrunr5   r	   r
   )r!   rY   r%   r%   r&   Úupdate_package_sources—   s   

üzDistro.update_package_sourcesc                 C   s|   |   ¡ r| d¡rt |¡ ¡ S |   ¡ r$t dg¡\}}t|ƒr"|S |S z
|  |¡}|j}W n	 t	y7   Y nw |s<|S |S )Nú/previous-hostnameÚhostname)
r   Úendswithr   Úload_text_fileÚstripr   ÚlenÚ_read_hostname_confr^   ÚIOError)r!   ÚfilenameÚdefaultÚoutÚ_errÚconfr^   r%   r%   r&   Ú_read_hostnameŸ   s    

ÿzDistro._read_hostnamec                 C   s   dS )Nz	127.0.1.1r%   )r!   r%   r%   r&   Ú_get_localhost_ip²   s   zDistro._get_localhost_ipc                 C   s   t t |¡ƒ}| ¡  |S ©N)r   r   r`   Úparse)r!   re   ri   r%   r%   r&   rc   µ   s   zDistro._read_hostname_confc                 C   s$   |   ¡ r| j}n| j}||  |¡fS rl   )r   Úsystemd_hostname_conf_fnÚhostname_conf_fnrj   )r!   Úhost_fnr%   r%   r&   Ú_read_system_hostnameº   s   zDistro._read_system_hostnamec                 C   s¸   | j du rZt d¡}d}|rP|\}}}t d¡ d¡}|D ]}| |¡r9| ¡ }|d |kr/q|d  d¡| _ nq| ¡ d	krKtj	 
d
¡rKd| _ dS d| _ dS t d¡ d| _ dS dS )z7Decide if we want to use transactional-update or zypperNú/Ú z/proc/mountsÚ
é   é   ÚroÚbtrfsz/usr/sbin/transactional-updater7   r8   z7Could not determine filesystem type of '/' using zypper)r   r   Úget_mount_infor`   ÚsplitÚ
startswithr   ÚlowerÚosÚpathÚexistsrC   rK   )r!   ÚresultÚfs_typeÚdevpthÚmount_pointÚmountsÚmountÚ
mount_infor%   r%   r&   rB   Á   s0   



ûÿ

ÿ
èzDistro._set_update_methodc                 C   sØ   t  | jdd¡}|  ¡ r| d¡rt  ||¡ d S |  ¡ r8|r+t ddt|ƒg¡ d S t dddt|ƒg¡ d S d }z|  |¡}W n t	yU   |rKnt
 d¡ Y d S Y nw |s\tdƒ}| |¡ t  |t|ƒd	¡ d S )
NÚcreate_hostname_fileTr]   Úhostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname file notcreatedrs   i¤  )r   Úget_cfg_option_boolÚ_cfgr   r_   Ú
write_filer   rG   rc   rd   rC   rK   r   Úset_hostname)r!   r^   re   r‡   ri   r%   r%   r&   Ú_write_hostnameÝ   s>   ÿüÿ	ÿúþ	
zDistro._write_hostnamec                 C   sx   | j s9t ¡ d }|d }t|d  d¡d ƒ}|dkr d|vs,|dkr4d|v r4|dkr4g d¢| _ | j S g d	¢| _ | j S )
z5The preferred ntp client is dependent on the version.Údistr   ru   Ú.é   ÚopenSUSEé*   )Úchronyúsystemd-timesyncdÚntp)r•   r”   r“   )Ú_preferred_ntp_clientsr   Úsystem_infoÚintrz   )r!   Údistro_infor"   Ú	major_verr%   r%   r&   Úpreferred_ntp_clients  s   

úzDistro.preferred_ntp_clientsrl   )NN)Ú__name__Ú
__module__Ú__qualname__rS   ro   r    r*   Únetwork_conf_fnrn   r)   rQ   Úrenderer_configsr   r0   r   r6   r5   rX   r\   rj   rk   rc   rq   rB   r�   Úpropertyr›   r%   r%   r%   r&   r      sB    þùÿ

=
&r   )Úloggingr}   Ú	cloudinitr   r   r   r   Úcloudinit.distrosr   r   r+   Ú"cloudinit.distros.parsers.hostnamer   Úcloudinit.settingsr	   r
   Ú	getLoggerrœ   rC   r   r%   r%   r%   r&   Ú<module>   s   

