
    }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mZ  e j                   e      Z G d dej&                        Zy)	    N)distroshelperssubputil)PackageList)	rhel_util)HostnameConf)
PER_ALWAYSPER_INSTANCEc                       e Zd ZdZdZdg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d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/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__/   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$   r5   s     r(   install_packageszDistro.install_packagesE   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?   rA   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$   commandr8   r9   cmdr5   s         r(   r:   zDistro.package_commandJ   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_linkrM   r/   r0   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)   F)forcec                |    | j                   j                  d| j                  dg|rt               y t               y )Nzupdate-sourcesrF   )freq)r   runr:   r
   r   )r$   r`   s     r(   update_package_sourceszDistro.update_package_sources   s>      K$	 	 	
 +7	 	 	
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_confrg   IOError)r$   filenamedefaultout_errconfrg   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 )r$   s    r(   _get_localhost_ipzDistro._get_localhost_ip   s    r)   c                 b    t        t        j                  |            }|j                          |S N)r	   r   ri   parse)r$   rn   rr   s      r(   rl   zDistro._read_hostname_conf   s%    D//9:

r)   c                 z    | j                         r| j                  }n| j                  }|| j                  |      fS rx   )r"   systemd_hostname_conf_fnhostname_conf_fnrs   )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_infori   split
startswithr!   lowerospathexistsrI   rQ   )r$   resultfs_typedevpthmount_pointmountsmount
mount_infos           r(   rH   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_fileTrf   hostnamectlzset-hostnamez--transientz7create_hostname_file is False; hostname file notcreatedr   i  )r   get_cfg_option_bool_cfgr"   rh   
write_filer   rM   rl   rm   rI   rQ   r	   set_hostname)r$   rg   rn   r   rr   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)   rx   )NN)__name__
__module____qualname__rZ   r|   r#   r.   network_conf_fnr{   r-   rX   renderer_configsr   r4   r   r;   r:   r_   rd   rs   rv   rl   r~   rH   r   propertyr   ru   r)   r(   r   r      s    *M&{H.N5O./"K5@E <; 
	0	9
 

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