U
    L¬÷d¤  ã                   @   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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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(„ ZdS )-ÚDistroz/etc/sysconfig/clockz/etc/sysconfig/i18nz/etc/locale.confz/etc/sysconfig/networkz/etc/hostnamez'/etc/sysconfig/network-scripts/ifcfg-%sz/etc/localtimez/usr/libexecZ	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)Zipv4Zipv6)ZcontrolZiface_templatesZroute_templatesTc                 C   s<   t j | |||¡ t |¡| _d| _d| _d | _d|d< d S )NZredhatzen_US.UTF-8ZsshdZssh_svcname)	r   r
   Ú__init__r   ZRunnersÚ_runnerZosfamilyÚdefault_localeÚsystem_locale)ÚselfÚnameZcfgÚpaths© r   ú8/usr/lib/python3/dist-packages/cloudinit/distros/rhel.pyr   0   s    zDistro.__init__c                 C   s   | j d|d d S )NÚinstall)Úpkgs)Úpackage_command)r   Úpkglistr   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_locale>   s    
ÿzDistro.get_localeNc                 C   s<   |   ¡ r|s| j}| j}n
|s$| j}d|i}t ||¡ d S )NÚLANG)Úuses_systemdÚsystemd_locale_conf_fnÚlocale_conf_fnr   Úupdate_sysconfig_file)r   ZlocaleZout_fnZ
locale_cfgr   r   r   Úapply_localeJ   s     ÿzDistro.apply_localer   c                 C   sX   |   ¡ r| j}n| j}|s&td| ƒ‚tj |¡rTt |¡\}}||krP|| 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   ZkeynameZ	locale_fnÚ_existsÚcontentsr   r   r   r   W   s    zDistro._read_system_localec                 C   sn   |   ¡ r8| d¡r8tdƒ}| |¡ t |t|ƒd¡ n2|   ¡ rVt ddt|ƒg¡ nd|i}t 	||¡ d S )Nú/previous-hostnameÚ i¤  Zhostnamectlzset-hostnameÚHOSTNAME)
r   Úendswithr   Zset_hostnamer   Z
write_fileÚstrr   r   r    )r   ÚhostnameÚfilenameÚconfZhost_cfgr   r   r   Ú_write_hostnameh   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   Zhost_fnr   r   r   Ú_read_system_hostnamew   s    zDistro._read_system_hostnamec                 C   sx   |   ¡ r | d¡r t |¡ ¡ S |   ¡ rRt dg¡\}}| ¡ }t|ƒrL|S |S n"t |¡\}}d|krp|d S |S d S )Nr)   r.   r+   )	r   r,   r   Z	load_fileÚstripr   Úlenr   r&   )r   r/   ÚdefaultÚoutZ_errr'   r(   r   r   r   r4   ~   s    zDistro._read_hostnamec                 C   sZ   |   |¡}|  ¡ r.t | j¡ t || j¡ n(dt|ƒi}t | j	|¡ t 
|| j¡ d S )NZZONE)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¨   |d krg }t  d¡r(t d¡ dg}nt d¡ ddg}| d¡ |r^t|tƒr^| |¡ n|rvt|tƒrv| |¡ | |¡ t	 
d|¡}| |¡ t j |dd	 d S )
NZdnfz Using DNF for package managementz Using YUM for package managementZyumz-tz-yz%s-%sF)Zcapture)r   ZwhichÚLOGÚdebugÚappendÚ
isinstancer-   ÚlistÚextendr   Zexpand_package_list)r   ZcommandÚargsr   Úcmdr   r   r   r   r   Ÿ   s     






zDistro.package_commandc                 C   s   | j jd| jdgtd d S )Nzupdate-sourcesZ	makecache)Zfreq)r   Úrunr   r	   r   r   r   r   Úupdate_package_sourcesÀ   s    üzDistro.update_package_sources)N)r   )N)NN)Ú__name__Ú
__module__Ú__qualname__r;   r   r   Znetwork_conf_fnr3   r2   Znetwork_script_tplr:   Zusr_lib_execZrenderer_configsZprefer_fqdnr   r   r   r!   r   r1   r5   r4   r=   r   rG   r   r   r   r   r
      s:   þýÿ



!r
   )r#   Z	cloudinitr   r   r   Zloggingr   r   Zcloudinit.distrosr   Z"cloudinit.distros.parsers.hostnamer   Zcloudinit.settingsr	   Z	getLoggerrH   r>   r
   r   r   r   r   Ú<module>
   s   
