o
    f'                     @   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rt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   

