o
    x[hì  ã                   @   st   d dl Z d dlZd dlmZmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZmZ e  e¡ZG dd„ dejƒZdS )é    N)ÚdistrosÚhelpersÚsubpÚutil)ÚPackageListÚ	rhel_util)ÚHostnameConf)Ú
PER_ALWAYSÚPER_INSTANCEc                   @   sº   e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
dddddœdœiZdZdd„ Zdefdd„Zdd„ Zd-dd„Zd.dd„Zdd „ Zd!d"„ Zd-d#d$„Zd%d&„ Zd/d'd(„Zd)d*œd+d,„ZdS )0ÚDistroz/etc/sysconfig/clockz/etc/sysconfig/i18nz/etc/locale.confz/etc/sysconfig/networkz/etc/hostnamez/etc/localtimez/usr/libexecz/var/lib/NetworkManagerzdhclient-[\w-]+\.leaseÚ	sysconfigzetc/sysconfig/networkz'%(base)s/network-scripts/ifcfg-%(name)sz'%(base)s/network-scripts/route-%(name)sz(%(base)s/network-scripts/route6-%(name)s)Úipv4Úipv6)ÚcontrolÚiface_templatesÚroute_templatesTc                 C   s<   t j | |||¡ t |¡| _d| _d| _d | _d|d< d S )NÚredhatzen_US.UTF-8ÚsshdÚssh_svcname)	r   r   Ú__init__r   ÚRunnersÚ_runnerÚosfamilyÚdefault_localeÚsystem_locale)ÚselfÚnameÚcfgÚpaths© r   ú8/usr/lib/python3/dist-packages/cloudinit/distros/rhel.pyr   4   s   zDistro.__init__Úpkglistc                 C   s   | j d|d� d S )NÚinstall)Úpkgs)Úpackage_command)r   r!   r   r   r    Úinstall_packages?   s   zDistro.install_packagesc                 C   s"   | j s|  ¡ | _ | j r| j S | jS )z8Return the default locale if set, else use system locale)r   Ú_read_system_localer   )r   r   r   r    Ú
get_localeB   s   

ÿÿzDistro.get_localeNc                 C   s6   |   ¡ r
|s	| j}n|s| j}d|i}t ||¡ d S )NÚLANG)Úuses_systemdÚsystemd_locale_conf_fnÚlocale_conf_fnr   Úupdate_sysconfig_file)r   ÚlocaleÚout_fnÚ
locale_cfgr   r   r    Úapply_localeN   s   €ÿzDistro.apply_localer(   c                 C   sX   |   ¡ r| j}n| j}|std| ƒ‚tj |¡r*t |¡\}}||v r(|| S dS dS )z.Read system default locale setting, if presentzInvalid path: %sN)	r)   r*   r+   Ú
ValueErrorÚosÚpathÚexistsr   Úread_sysconfig_file)r   ÚkeynameÚ	locale_fnÚ_existsÚcontentsr   r   r    r&   Z   s   ûzDistro._read_system_localec                 C   sª   |   ¡ r| d¡rtdƒ}| |¡ t |t|ƒd¡ d S |   ¡ rIt | jdd¡}|r7t	 	ddt|ƒg¡ d S t	 	dddt|ƒg¡ t
 d	¡ d S d
|i}t ||¡ d S )Nú/previous-hostnameÚ i¤  Úcreate_hostname_fileTÚhostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname set transientlyÚHOSTNAME)r)   Úendswithr   Úset_hostnamer   Ú
write_fileÚstrÚget_cfg_option_boolÚ_cfgr   ÚLOGÚinfor   r,   )r   ÚhostnameÚfilenameÚconfr<   Úhost_cfgr   r   r    Ú_write_hostnamek   s.   
ÿüÿÿÿzDistro._write_hostnamec                 C   s$   |   ¡ r| j}n| j}||  |¡fS ©N)r)   Úsystemd_hostname_conf_fnÚhostname_conf_fnÚ_read_hostname)r   Úhost_fnr   r   r    Ú_read_system_hostnameŠ   s   zDistro._read_system_hostnamec                 C   sr   |   ¡ r| d¡rt |¡ ¡ S |   ¡ r(t dg¡\}}| ¡ }t|ƒr&|S |S t |¡\}}d|v r7|d S |S )Nr:   rG   r>   )	r)   r?   r   Úload_text_fileÚstripr   Úlenr   r5   )r   rH   ÚdefaultÚoutÚ_errr8   r9   r   r   r    rO   ‘   s   zDistro._read_hostnamec                 C   s\   |   |¡}|  ¡ rt | j¡ t || j¡ d S dt|ƒi}t | j	|¡ t 
|| j¡ d S )NÚZONE)Ú_find_tz_filer)   r   Údel_fileÚtz_local_fnÚsym_linkrB   r   r,   Úclock_conf_fnÚcopy)r   ÚtzÚtz_fileÚ	clock_cfgr   r   r    Úset_timezone¢   s   
ÿzDistro.set_timezonec                 C   s¨   |d u rg }t  d¡rt d¡ dg}n	t d¡ ddg}| d¡ |r/t|tƒr/| |¡ n|r;t|tƒr;| |¡ | |¡ t	 
d|¡}| |¡ t j |dd	� d S )
NÚdnfz Using DNF for package managementz Using YUM for package managementÚyumz-tz-yz%s-%sF)Úcapture)r   ÚwhichrE   ÚdebugÚappendÚ
isinstancerB   ÚlistÚextendr   Úexpand_package_list)r   ÚcommandÚargsr#   Úcmdr!   r   r   r    r$   ²   s    






zDistro.package_commandF)Úforcec                C   s$   | j jd| jdg|rtntd� d S )Nzupdate-sourcesÚ	makecache)Úfreq)r   Úrunr$   r	   r
   )r   rp   r   r   r    Úupdate_package_sourcesÓ   s   

üzDistro.update_package_sourcesrL   )r(   )NN)Ú__name__Ú
__module__Ú__qualname__r]   r+   r*   Únetwork_conf_fnrN   rM   r[   Úusr_lib_execÚdhclient_lease_directoryÚdhclient_lease_file_regexÚrenderer_configsÚprefer_fqdnr   r   r%   r'   r0   r&   rK   rQ   rO   rb   r$   rt   r   r   r   r    r      s>    þýÿ



!r   )Úloggingr2   Ú	cloudinitr   r   r   r   Úcloudinit.distrosr   r   Ú"cloudinit.distros.parsers.hostnamer   Úcloudinit.settingsr	   r
   Ú	getLoggerru   rE   r   r   r   r   r    Ú<module>   s   	
