U
    Ӈg                     @   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ed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d0d'd(Zd)d*d+d,ZdS )1Distroz/etc/sysconfig/clockz/etc/sysconfig/i18nz/etc/locale.confz/etc/sysconfig/networkz/etc/hostnamez/etc/localtimez/usr/libexecz/var/lib/NetworkManagerzdhclient-[\w-]+\.leaseZ	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   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   ZlocaleZout_fnZ
locale_cfgr   r   r   apply_localeN   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   Z   s    zDistro._read_system_localec                 C   s   |   r8|dr8td}|| t|t|d nh|   rt| jdd}|rjt		ddt|g qt		dddt|g t
d	 nd
|i}t|| d S )N/previous-hostname i  create_hostname_fileTZhostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname set transientlyHOSTNAME)r   endswithr   Zset_hostnamer   Z
write_filestrZget_cfg_option_boolZ_cfgr   LOGinfor   r    )r   hostnamefilenameconfr+   Zhost_cfgr   r   r   _write_hostnamek   s4    
   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_hostname   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)   r1   r,   )	r   r-   r   Zload_text_filestripr   lenr   r&   )r   r2   defaultoutZ_errr'   r(   r   r   r   r7      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whichr/   debugappend
isinstancer.   listextendr   Zexpand_package_list)r   Z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-sourcesZ	makecache)Zfreq)r   runr   r	   r
   )r   rH   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_fnr6   r5   r=   Zusr_lib_execZdhclient_lease_directoryZdhclient_lease_file_regexZrenderer_configsZprefer_fqdnr   r   r   r   r!   r   r4   r8   r7   r@   r   rJ   r   r   r   r   r      s<   



!r   )Zloggingr#   Z	cloudinitr   r   r   r   Zcloudinit.distrosr   r   Z"cloudinit.distros.parsers.hostnamer   Zcloudinit.settingsr	   r
   Z	getLoggerrK   r/   r   r   r   r   r   <module>
   s   
