
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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r†d
}dddg}|dkr–ddg}|j|ƒ |rºt|tƒrº|j|ƒ n|rÒt|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r®t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r–tj	j
d
ƒr–d| _ q®d| _ 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ƒ qÄtjdddt|ƒgƒ nZd }y| j|ƒ}W n t	k
rš   |r’nd S Y nX |s¨t
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   
