o
    w7em%                     @   sx   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dlm	Z
 d dlmZ d dlmZ eeZG dd	 d	ejZdS )
    N)distroshelpers)log)subputil)	rhel_util)HostnameConf)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	Zd
ZdddddddddiZdd Zd.ddZdd Zd/ddZdd Z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 )0Distroz/etc/sysconfig/clockz/etc/HOSTNAMEservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz/etc/sysconfig/network/ifcfg-%sz!/etc/sysconfig/network/ifroute-%sz/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   1   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_localec                 C   s   | j dd|d d S )Ninstallz--auto-agree-with-licenses)argspkgs)package_command)r    pkglistr$   r$   r%   install_packagesG   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-updater8   --drop-if-no-changepkgupgradeupdateup)r9   r8   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    commandr1   r2   cmdr4   r$   r$   r%   r3   L   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_linkrF   r*   r+   clock_conf_fncopy)r    tztz_file	clock_cfgr$   r$   r%   set_timezone   s   
zDistro.set_timezonec                 C   s   | j jd| jdgtd d S )Nzupdate-sourcesr?   )freq)r   runr3   r	   r    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_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$   rZ   r$   r$   r%   _get_localhost_ip   s   zDistro._get_localhost_ipc                 C   s   t t|}|  |S N)r   r   r_   parse)r    rd   rh   r$   r$   r%   rb      s   zDistro._read_hostname_confc                 C   s$   |   r| j}n| j}|| |fS rk   )r   systemd_hostname_conf_fnhostname_conf_fnri   )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-updater6   r7   z7Could not determine filesystem type of '/' using zypper)r   r   get_mount_infor_   split
startswithr   lowerospathexistsrB   rJ   )r    resultfs_typedevpthmount_pointmountsmount
mount_infor$   r$   r%   rA      s0   






zDistro._set_update_methodc                 C   s   |   r|drt|| d S |   r!tddt|g d S d }z| |}W n	 ty3   Y nw |s:td}|	| t|t|d d S )Nr\   hostnamectlzset-hostnamerr   i  )
r   r^   r   
write_filer   rF   rb   rc   r   set_hostname)r    r]   rd   rh   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   rt   .   openSUSE*   )chronysystemd-timesyncdntp)r   r   r   )_preferred_ntp_clientsr   system_infointry   )r    distro_infor!   	major_verr$   r$   r%   preferred_ntp_clients   s   

zDistro.preferred_ntp_clientsrk   )NN)__name__
__module____qualname__rR   rn   r   r)   network_conf_fnnetwork_script_tplroute_conf_tplrm   r(   rP   renderer_configsr   r/   r5   r3   rW   r[   ri   rj   rb   rp   rA   r   propertyr   r$   r$   r$   r%   r
      sF    

=
r
   )r|   	cloudinitr   r   r   loggingr   r   cloudinit.distrosr   r*   "cloudinit.distros.parsers.hostnamer   cloudinit.settingsr	   	getLoggerr   rB   r
   r$   r$   r$   r%   <module>   s   

