U
    L¬÷dm%  ã                   @   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r‚d
}dddg}|dkr’ddg}| |¡ |r¶t|tƒr¶| |¡ n|rÎt|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r¬t d¡}d}|rœ|\}}}t d¡ d¡}|D ]8}| |¡r:| ¡ }|d |kr^q:|d  d¡| _ qtq:| ¡ d	kr”tj	 
d
¡r”d| _ q¬d| _ 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   
