U
    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d0d 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/sysconfig/network/ifcfg-%sz!/etc/sysconfig/network/ifroute-%sz/etc/hostnamez/etc/locale.confz/etc/localtimeZ	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| ||| t|| _d| _d | _d| _d|d< | 	 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/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 )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_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 krg }|    | jr2| jdks2td d S | jdkrFddg}nddddg}|dkr^d	}|s| jdkr|d	krd
}dddg}|dkrddg}|| |rt|tr|| n|rt|tr|	| t
d|}|	| tj|dd | jdkrtd d S )NtransactionalzUPackage operation requested but read only root without btrfs and transactional-updatazypperz--non-interactiveztransactional-updatez--drop-if-no-change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   sT    




zDistro.package_commandc                 C   sZ   |  |}|  r.t| j t|| j n(dt|i}t| j	| t
|| 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   runr    r	   r   r   r   r   update_package_sources   s    zDistro.update_package_sourcesc                 C   s   |   r |dr t| S |   rJtdg\}}t|rD|S |S n6z| |}|j}W n t	k
rr   Y nX |s||S |S d S )N/previous-hostnamehostname)
r   endswithr   	load_filestripr   len_read_hostname_confr:   IOError)r   filenamedefaultoutZ_errconfr:   r   r   r   _read_hostname   s    

zDistro._read_hostnamec                 C   s   dS )Nz	127.0.1.1r   r7   r   r   r   _get_localhost_ip   s    zDistro._get_localhost_ipc                 C   s   t t|}|  |S N)r   r   r<   parse)r   rA   rD   r   r   r   r?      s    zDistro._read_hostname_confc                 C   s$   |   r| j}n| j}|| |fS rG   )r   systemd_hostname_conf_fnhostname_conf_fnrE   )r   Zhost_fnr   r   r   _read_system_hostname   s    zDistro._read_system_hostnamec                 C   s   | j dkrtd}d}|r|\}}}tdd}|D ]8}||r:| }|d |kr^q:|d d| _ qtq:| d	krtj	
d
rd| _ qd| _ nt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_infor<   split
startswithr   lowerospathexistsr)   r0   )r   resultZfs_typeZdevpthZmount_pointZmountsZmountZ
mount_infor   r   r   r(      s,    



zDistro._set_update_methodc                 C   s   |   r |dr t|| nn|   r>tddt|g nPd }z| |}W n tk
rd   Y nX |srtd}|	| t|t|d d S )Nr9   Zhostnamectlzset-hostnamerM   i  )
r   r;   r   Z
write_filer   r-   r?   r@   r   Zset_hostname)r   r:   rA   rD   r   r   r   _write_hostname   s    
zDistro._write_hostnamec                 C   sx   | j srt d }|d }t|d 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   rO   .   ZopenSUSE*   Zchronyzsystemd-timesyncdZntp)Z_preferred_ntp_clientsr   Zsystem_infointrQ   )r   Zdistro_infor   Z	major_verr   r   r   preferred_ntp_clients   s(    zDistro.preferred_ntp_clients)N)NN)N)__name__
__module____qualname__r3   rJ   r   r   Znetwork_conf_fnZnetwork_script_tplZroute_conf_tplrI   r   r2   Zrenderer_configsr   r   r"   r    r5   r8   rE   rF   r?   rK   r(   rX   propertyr]   r   r   r   r   r
      sD   

=
r
   )rT   Z	cloudinitr   r   r   Zloggingr   r   Zcloudinit.distrosr   r   Z"cloudinit.distros.parsers.hostnamer   Zcloudinit.settingsr	   Z	getLoggerr^   r)   r
   r   r   r   r   <module>   s   
