
    f(                         d dl Z d dlZd dlmZmZmZ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 G d dej$                        Zy)	    N)distroshelperssubputil)PackageList)	rhel_util)HostnameConf)PER_INSTANCEc                       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ddddddddiZd Zd"dZdefdZd#dZd Zd Zd"dZd Zd Zd Zd Zd  Zed!        Zy)$Distroz/etc/sysconfig/clockz/etc/HOSTNAMEservicez/etc/sysconfig/languagez/etc/sysconfig/network/configz/etc/sysconfig/network/ifcfg-%sz!/etc/sysconfig/network/ifroute-%sz/etc/hostnamez/etc/locale.confz/etc/localtime	sysconfigzetc/sysconfig/network/configsusez%(base)s/network/ifcfg-%(name)sz3etc/udev/rules.d/85-persistent-net-cloud-init.rulesz!%(base)s/network/ifroute-%(name)s)ipv4ipv6)controlflavoriface_templatesnetrules_pathroute_templatesc                     t         j                  j                  | |||       t        j                  |      | _        d| _        d | _        d| _        d|d<   | j                         rdg| _
        d|d<   y y )Nr   Fsshdssh_svcname	systemctlzsshd.service)r   r   __init__r   Runners_runnerosfamilyupdate_methodread_only_rootuses_systemdinit_cmd)selfnamecfgpathss       </usr/lib/python3/dist-packages/cloudinit/distros/opensuse.pyr   zDistro.__init__1   so    dC7u-!##M(MDM!/C     Nc                     | j                         r|s| j                  }d|i}n|s| j                  }d|i}t        j                  ||       y )NLANGRC_LANG)r!   systemd_locale_conf_fnlocale_conf_fnrhutilupdate_sysconfig_file)r#   localeout_fn
locale_cfgs       r'   apply_localezDistro.apply_locale<   sN    44 &)J,,#V,J$$VZ8r(   pkglistc                 ,    | j                  dd|       y )Ninstallz--auto-agree-with-licenses)argspkgs)package_command)r#   r4   s     r'   install_packageszDistro.install_packagesG   s    8w 	 	
r(   c                    |g }| j                          | j                  r%| j                  dk(  st        j	                  d       y | j                  dk(  rddg}ng d}|dk(  rd}|s| j                  dk(  r|dk(  rd}g d	}|d
k(  rddg}|j                  |       |r"t        |t              r|j                  |       n#|r!t        |t              r|j                  |       t        j                  d|      }|j                  |       t        j                  |d       | j                  dk(  rt        j                  d       y y )NtransactionalzUPackage operation requested but read only root without btrfs and transactional-updatazypper--non-interactive)transactional-updater>   --drop-if-no-changepkgupgradeupdateup)r?   r>   r@   refreshz%s-%sF)capturez8To use/activate the installed packages reboot the system)_set_update_methodr    r   LOGerrorappend
isinstancestrlistextendr   expand_package_listr   info)r#   commandr7   r8   cmdr4   s         r'   r9   zDistro.package_commandL   s=   <D!t'9'9_'LII9  )01CC iG""o58#GC i01C

7 JtS)JJtjt,JJt**7D9

7 			#u%0HHJ 1r(   c                 `   | j                  |      }| j                         r@t        j                  | j                         t        j
                  || j                         y dt        |      i}t        j                  | j                  |       t        j                  || j                         y )NTIMEZONE)_find_tz_filer!   r   del_filetz_local_fnsym_linkrL   r.   r/   clock_conf_fncopy)r#   tztz_file	clock_cfgs       r'   set_timezonezDistro.set_timezone   s    $$R( MM$**+MM'4#3#34 CGI ((););YGIIgt//0r(   c                 `    | j                   j                  d| j                  dgt               y )Nzupdate-sourcesrE   )freq)r   runr9   r
   r#   s    r'   update_package_sourceszDistro.update_package_sources   s-      K	 	 	
r(   c                 `   | j                         r4|j                  d      r#t        j                  |      j	                         S | j                         r(t        j
                  dg      \  }}t        |      r|S |S 	 | j                  |      }|j                  }s|S |S # t        $ r Y w xY w)N/previous-hostnamehostname)
r!   endswithr   load_text_filestripr   len_read_hostname_confrf   IOError)r#   filenamedefaultout_errconfrf   s          r'   _read_hostnamezDistro._read_hostname   s    8#4#45I#J&&x06688 ))ZL1KS$3x
//9== O	  s   >B! !	B-,B-c                      y)Nz	127.0.1.1 rb   s    r'   _get_localhost_ipzDistro._get_localhost_ip   s    r(   c                 b    t        t        j                  |            }|j                          |S N)r	   r   rh   parse)r#   rm   rq   s      r'   rk   zDistro._read_hostname_conf   s%    D//9:

r(   c                 z    | j                         r| j                  }n| j                  }|| j                  |      fS rw   )r!   systemd_hostname_conf_fnhostname_conf_fnrr   )r#   host_fns     r'   _read_system_hostnamezDistro._read_system_hostname   s:    33G++G,,W566r(   c                    | j                   t        j                  d      }d}|r|\  }}}t        j                  d      j	                  d      }|D ]G  }|j                  |      s|j	                         }|d   |k7  r.|d   j                  d      | _         n |j                         d	k(  r't        j                  j                  d
      rd| _         yd| _         yt        j                  d       d| _         yy)z7Decide if we want to use transactional-update or zypperN/ z/proc/mounts
      robtrfsz/usr/sbin/transactional-updater<   r=   z7Could not determine filesystem type of '/' using zypper)r   r   get_mount_inforh   split
startswithr    lowerospathexistsrH   rP   )r#   resultfs_typedevpthmount_pointmountsmount
mount_infos           r'   rG   zDistro._set_update_method   s    %((-FG17.+,,^<BB4H# E''/%*[[]
%a=K7$.8m.F.Ft.L+ ==?g-"''..43 *9D&)1D&M &."1 &r(   c                 Z   t        j                  | j                  dd      }| j                         r(|j	                  d      rt        j
                  ||       y | j                         rG|r"t        j                  ddt        |      g       y t        j                  dddt        |      g       y d }	 | j                  |      }|st        d      }|j                  |       t        j
                  |t        |      d	       y # t        $ r |rnt        j                  d       Y y Y dw xY w)
Ncreate_hostname_fileTre   hostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname file notcreatedr   i  )r   get_cfg_option_bool_cfgr!   rg   
write_filer   rL   rk   rl   rH   rP   r	   set_hostname)r#   rf   rm   r   rq   s        r'   _write_hostnamezDistro._write_hostname   s   #77II-t 
 8#4#45I#JOOHh/ #		=.#h-HI		%&%H	 D //9 #B'h'OOHc$i7  'HH"  s   4D !D*)D*c                    | j                   sqt        j                         d   }|d   }t        |d   j	                  d      d         }|dk\  rd|vs|dk\  rd|v r|dk7  rg d| _         | j                   S g d	| _         | j                   S )
z5The preferred ntp client is dependent on the version.distr   r   .   openSUSE*   )chronysystemd-timesyncdntp)r   r   r   )_preferred_ntp_clientsr   system_infointr   )r#   distro_infor$   	major_vers       r'   preferred_ntp_clientszDistro.preferred_ntp_clients  s    
 ****,V4Kq>DKN005a89I RJd$:RJ$$69?/+ ***/+ ***r(   rw   )NN)__name__
__module____qualname__rY   r{   r"   r-   network_conf_fnnetwork_script_tplroute_conf_tplrz   r,   rW   renderer_configsr   r3   r   r:   r9   r^   rc   rr   ru   rk   r}   rG   r   propertyr   rt   r(   r'   r   r      s    *M&{H.N5O:8N./"K5@E <; 
	0	9
 

;z1 
&
7.8$8L + +r(   r   )loggingr   	cloudinitr   r   r   r   cloudinit.distrosr   r   r.   "cloudinit.distros.parsers.hostnamer	   cloudinit.settingsr
   	getLoggerr   rH   r   rt   r(   r'   <module>r      sC     	 2 2 ) 1 ; +g!I+W^^ I+r(   