
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\meh'                 @   sx   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 e jeZG dd dejZdS )	    N)distroshelperssubputil)PackageList)	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edddZd0ddZdd Zdd  Zd1d!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zed-d. ZdS )2Distroz/etc/sysconfig/clockz/etc/HOSTNAMEZ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)Zipv4Zipv6)ZcontrolZflavorZiface_templatesZnetrules_pathZroute_templatesc             C   sT   t jj| ||| tj|| _d| _d | _d| _d|d< | j	 rPdg| _
d|d< d S )Nr   FZsshdZssh_svcnameZ	systemctlzsshd.service)r   r
   __init__r   ZRunners_runnerZosfamilyupdate_methodread_only_rootuses_systemdinit_cmd)selfnameZcfgpaths r   /usr/lib/python3.6/opensuse.pyr   1   s    zDistro.__init__Nc             C   s>   | j  r|s| j}d|i}n|s&| j}d|i}tj|| d S )NZLANGZRC_LANG)r   systemd_locale_conf_fnlocale_conf_fnrhutilupdate_sysconfig_file)r   ZlocaleZout_fnZ
locale_cfgr   r   r   apply_locale<   s    
zDistro.apply_locale)pkglistc             C   s   | j dd|d d S )NZinstallz--auto-agree-with-licenses)argspkgs)package_command)r   r   r   r   r   install_packagesG   s    zDistro.install_packagesc             C   s  |d krg }| j   | jr4| jdk r4tjd d S | jdkrHddg}nddddg}|dkr`d	}| r| jdkr|d	krd
}dddg}|dkrddg}|j| |rt|tr|j| n|rt|tr|j	| t
jd|}|j	| tj|dd | jdkrtjd d S )NtransactionalzUPackage operation requested but read only root without btrfs and transactional-updatazypperz--non-interactiveztransactional-updatez--drop-if-no-changeZpkgZupgradeupdateZuprefreshz%s-%sF)Zcapturez8To use/activate the installed packages reboot the system)_set_update_methodr   r   LOGerrorappend
isinstancestrlistextendr   Zexpand_package_listr   info)r   Zcommandr   r   cmdr   r   r   r   r    L   sF    





zDistro.package_commandc             C   sZ   | j |}| j r.tj| j tj|| j n(dt|i}tj| j	| tj
|| j d S )NZTIMEZONE)Z_find_tz_filer   r   Zdel_filetz_local_fnZsym_linkr+   r   r   clock_conf_fncopy)r   ZtzZtz_fileZ	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%   )Zfreq)r   Zrunr    r	   )r   r   r   r   update_package_sources   s
    zDistro.update_package_sourcesc             C   s   | j  r |jdr tj|j S | j  rJtjdg\}}t|rD|S |S n6y| j|}|j}W n t	k
rr   Y nX |s||S |S d S )Nz/previous-hostnamehostname)
r   endswithr   	load_filestripr   len_read_hostname_confr5   IOError)r   filenamedefaultoutZ_errconfr5   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j|}|j  |S )N)r   r   r7   parse)r   r<   r?   r   r   r   r:      s    zDistro._read_hostname_confc             C   s$   | j  r| j}n| j}|| j|fS )N)r   systemd_hostname_conf_fnhostname_conf_fnr@   )r   Zhost_fnr   r   r   _read_system_hostname   s    zDistro._read_system_hostnamec             C   s   | j dkrtjd}d}|r|\}}}tjdjd}x>|D ]6}|j|r<|j }|d |kr`q<|d jd| _P q<W |j d	krtj	j
d
rd| _ qd| _ ntjd d| _ dS )z7Decide if we want to use transactional-update or zypperN/ z/proc/mounts
      ZroZbtrfsz/usr/sbin/transactional-updater"   r#   z7Could not determine filesystem type of '/' using zypper)r   r   Zget_mount_infor7   split
startswithr   lowerospathexistsr'   r.   )r   resultZfs_typeZdevpthZmount_pointZmountsZmountZ
mount_infor   r   r   r&      s(    




zDistro._set_update_methodc             C   s   t j| jdd}| j r0|jdr0t j|| n| j rj|rRtjddt|g qtjdddt|g nZd }y| j|}W n t	k
r   |rnd S Y nX |st
d}|j| t j|t|d d S )	Ncreate_hostname_fileTz/previous-hostnameZhostnamectlzset-hostnamez--transientrG   i  )r   Zget_cfg_option_boolZ_cfgr   r6   Z
write_filer   r+   r:   r;   r   Zset_hostname)r   r5   r<   rR   r?   r   r   r   _write_hostname   s.    

zDistro._write_hostnamec             C   sx   | j srtj d }|d }t|d jdd }|dkr@d|ksX|dkrfd|krf|dkrfdd	d
g| _ nd
d	dg| _ | j S )z5The preferred ntp client is dependent on the version.Zdistr   rI   .   ZopenSUSE*   Zchronyzsystemd-timesyncdZntp)Z_preferred_ntp_clientsr   Zsystem_infointrK   )r   Zdistro_infor   Z	major_verr   r   r   preferred_ntp_clients  s    
zDistro.preferred_ntp_clients)N)NN)N)__name__
__module____qualname__r1   rD   r   r   Znetwork_conf_fnZnetwork_script_tplZroute_conf_tplrC   r   r0   Zrenderer_configsr   r   r   r!   r    r3   r4   r@   rA   r:   rE   r&   rS   propertyrX   r   r   r   r   r
      s<   

=
"r
   )ZloggingrN   Z	cloudinitr   r   r   r   Zcloudinit.distrosr   r   r   Z"cloudinit.distros.parsers.hostnamer   Zcloudinit.settingsr	   Z	getLoggerrY   r'   r
   r   r   r   r   <module>   s   
