
"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 Gd d	   d	 e j  Z d
 S)    )distros)HostnameConf)helpers)subp)util)	rhel_util)PER_INSTANCEc               @   sE  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 Z d d d d d d d d d d d d d d i i i Z d d   Z d d d  Z d d   Z d 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/   Z d0 d1   Z d2 d3   Z e d4 d5    Z d S)6Distroz/etc/sysconfig/clockz/etc/HOSTNAMEservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz/etc/sysconfig/network/ifcfg-%sz/etc/resolv.confz!/etc/sysconfig/network/ifroute-%sz/etc/hostnamez/etc/locale.confz/etc/localtime	sysconfigZcontrolzetc/sysconfig/network/configZflavorsuseZiface_templatesz%(base)s/network/ifcfg-%(name)sZnetrules_pathz3etc/udev/rules.d/85-persistent-net-cloud-init.rulesZroute_templatesZipv4z!%(base)s/network/ifroute-%(name)sZipv6c             C   sd   t  j j |  | | |  t j |  |  _ d |  _ d | d <|  j   r` d g |  _ d | d <d  S)Nr   ZsshdZssh_svcnameZ	systemctlzsshd.service)	r   r	   __init__r   ZRunners_runnerZosfamilyuses_systemdinit_cmd)selfnameZcfgpaths r   </usr/lib/python3/dist-packages/cloudinit/distros/opensuse.pyr   1   s    	
zDistro.__init__Nc             C   sY   |  j    r* | s |  j } d | i } n | s9 |  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localeout_fnZ
locale_cfgr   r   r   apply_locale:   s    		zDistro.apply_localec             C   s   |  j  d d d d | d  S)Ninstallargsz--auto-agree-with-licensespkgs)package_command)r   pkglistr   r   r   install_packagesE   s    zDistro.install_packagesc             C   s   | d  k r g  } d d g } | d k r0 d } | j  |  | rb t | t  rb | j  |  n" | r t | t  r | j |  t j d |  } | j |  t j | d d d  S)NZzypperz--non-interactiveZupgradeupdatez%s-%sZcaptureF)append
isinstancestrlistextendr   Zexpand_package_listr   )r   Zcommandr   r   cmdr    r   r   r   r   L   s    zDistro.package_commandc             C   s}   |  j  |  } |  j   rA t j |  j  t j | |  j  n8 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_timezoned   s    zDistro.set_timezonec             C   s&   |  j  j d |  j d g d t d  S)Nzupdate-sourcesZrefreshZfreq)r   Zrunr   r   )r   r   r   r   update_package_sourcest   s    zDistro.update_package_sourcesc             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   r0   x   s    zDistro._bring_up_interfacesc             C   s   |  j    r. | j d  r. t j |  j   S|  j    ri t j d g  \ } } t |  rb | S| Sn? y |  j |  } | j } Wn t	 k
 r Yn X| s | S| Sd  S)Nz/previous-hostnamehostname)
r   endswithr   	load_filestripr   len_read_hostname_confr1   IOError)r   filenamedefaultoutZ_errconfr1   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   r3   parse)r   r8   r;   r   r   r   r6      s    
zDistro._read_hostname_confc             C   s4   |  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    r. | j d  r. t j | |  n |  j    rY t j d d t |  g  nf d  } y |  j |  } Wn t k
 r Yn X| s t d  } | j	 |  t j | t |  d  d  S)Nz/previous-hostnameZhostnamectlzset-hostname i  )
r   r2   r   Z
write_filer   r%   r6   r7   r   Zset_hostname)r   r1   r   r;   r   r   r   _write_hostname   s    zDistro._write_hostnamec             C   s   |  j  |  S)N)Z_supported_write_network_config)r   Z	netconfigr   r   r   _write_network_config   s    zDistro._write_network_configc             C   s   |  j  s t j   d } | d } t | d j d  d  } | d k rX d | k s| | d k r d | k r | d k r d d	 d
 g |  _  n d
 d	 d g |  _  |  j  S)z5The preferred ntp client is dependent on the version.Zdistr      .   ZopenSUSE*   Zchronyzsystemd-timesyncdZntp)Z_preferred_ntp_clientsr   Zsystem_infointsplit)r   Zdistro_infor   Z	major_verr   r   r   preferred_ntp_clients   s    	
$zDistro.preferred_ntp_clients)__name__
__module____qualname__r*   r@   r   r   Znetwork_conf_fnZnetwork_script_tplZresolve_conf_fnZroute_conf_tplr?   r   r)   Zrenderer_configsr   r   r!   r   r,   r-   r0   r<   r=   r6   rA   rC   rD   propertyrK   r   r   r   r   r	      sD   		r	   N)Z	cloudinitr   Z"cloudinit.distros.parsers.hostnamer   r   r   r   Zcloudinit.distrosr   r   Zcloudinit.settingsr   r	   r   r   r   r   <module>   s   