
"·T`=  ã               @   s¨   d  d l  m Z d  d l  m Z d  d l  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 d d	 „  Z Gd
 d „  d e j ƒ Z d S)é    )Údistros)Úhelpers)Úlog)Úsubp)Úutil)Ú	rhel_util)ÚPER_INSTANCEc             C   s   |  r
 d Sd Sd  S)NÚyesÚno© )Úvalr   r   ú8/usr/lib/python3/dist-packages/cloudinit/distros/rhel.pyÚ_make_sysconfig_bool   s    r   c            
   @   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 d d d i i i Z d d „  Z d d „  Z d d „  Z d d d „ Z d d „  Z d d  „  Z d! d" „  Z d d# d$ „ Z d% d& „  Z d' d( „  Z d 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/resolv.confz/etc/localtimez/usr/libexecÚ	sysconfigZcontrolzetc/sysconfig/networkZiface_templatesz'%(base)s/network-scripts/ifcfg-%(name)sZroute_templatesZipv4z'%(base)s/network-scripts/route-%(name)sZipv6z(%(base)s/network-scripts/route6-%(name)sc             C   sB   t  j j |  | | | ƒ t j | ƒ |  _ d |  _ d | d <d  S)NZredhatZsshdZssh_svcname)r   r   Ú__init__r   ZRunnersÚ_runnerZosfamily)ÚselfÚnameZcfgÚpathsr   r   r   r   5   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)N)Z_supported_write_network_config)r   Z	netconfigr   r   r   Ú_write_network_configA   s    zDistro._write_network_configNc             C   sV   |  j  ƒ  r' | s |  j } |  j } n | s6 |  j } d | i } t j | | ƒ d  S)NZLANG)Úuses_systemdÚsystemd_locale_conf_fnÚlocale_conf_fnr   Úupdate_sysconfig_file)r   ZlocaleÚout_fnZ
locale_cfgr   r   r   Úapply_localeD   s    		zDistro.apply_localec             C   sy   |  j  ƒ  r. | j d ƒ r. t j | | ƒ nG |  j  ƒ  rY t j d d t | ƒ g ƒ n d | i } t j | | ƒ d  S)Nz/previous-hostnameZhostnamectlzset-hostnameÚHOSTNAME)r   Úendswithr   Z
write_filer   Ústrr   r   )r   Úhostnamer    Zhost_cfgr   r   r   Ú_write_hostnameQ   s    zDistro._write_hostnamec             C   s   | r
 | S| S)Nr   )r   r%   Zfqdnr   r   r   Ú_select_hostname^   s    zDistro._select_hostnamec             C   s4   |  j  ƒ  r |  j } n	 |  j } | |  j | ƒ f S)N)r   Úsystemd_hostname_conf_fnÚhostname_conf_fnÚ_read_hostname)r   Zhost_fnr   r   r   Ú_read_system_hostnamee   s    	zDistro._read_system_hostnamec             C   sš   |  j  ƒ  r. | j d ƒ r. t j | ƒ j ƒ  S|  j  ƒ  ri t j d g ƒ \ } } t | ƒ rb | S| Sn- t j | ƒ \ } } d | k r’ | d S| Sd  S)Nz/previous-hostnamer%   r"   )	r   r#   r   Z	load_fileÚstripr   Úlenr   Zread_sysconfig_file)r   ÚfilenameÚdefaultÚoutZ_errÚ_existsÚcontentsr   r   r   r*   l   s    zDistro._read_hostnamec             C   s8   | r% d | k r% t  d |  j ƒ ‚ t j j |  | ƒ S)NÚallz1Distro %s can not translate the device name "all")ÚRuntimeErrorr   r   r   Ú_bring_up_interfaces)r   Zdevice_namesr   r   r   r5   |   s    zDistro._bring_up_interfacesc             C   s}   |  j  | ƒ } |  j ƒ  rA t j |  j ƒ t j | |  j ƒ n8 d t | ƒ i } t j |  j	 | ƒ t j
 | |  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  j d ƒ r: t j d ƒ d g } n t j d ƒ d d g } | j d ƒ | r… t | t ƒ r… | j | ƒ n" | r§ t | t ƒ r§ | j | ƒ | j | ƒ t	 j
 d | ƒ } | j | ƒ t  j  | d d	 ƒd  S)
NZdnfz Using DNF for package managementz Using YUM for package managementZyumz-tz-yz%s-%sZcaptureF)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 d t ƒd  S)Nzupdate-sourcesZ	makecacheZfreq)r   Zrunr   r   )r   r   r   r   Úupdate_package_sources³   s    zDistro.update_package_sources)Ú__name__Ú
__module__Ú__qualname__r7   r   r   Znetwork_conf_fnr)   r(   Znetwork_script_tplZresolve_conf_fnr6   Zusr_lib_execZrenderer_configsr   r   r   r!   r&   r'   r+   r*   r5   r9   r   rB   r   r   r   r   r      s8   	!r   N)Z	cloudinitr   r   r   Zloggingr   r   Zcloudinit.distrosr   Zcloudinit.settingsr   Z	getLoggerrC   r:   r   r   r   r   r   r   Ú<module>   s   