
    }f(                         d dl Z d dlZd dlmZ d dl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dZd	Z G d
 dej*                        ZddZedfdZddZddZy)    N)List)distrossubputil)Apt)PackageManager)HostnameConf)CLOUDINIT_NETPLAN_FILEa8  # This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
z/etc/default/localec                        e Zd ZdZdedZed   eded   edddZd	Zd
Z	 fdZ
d ZddZ fdZd Zd Zd ZddZd Zd ZddZd ZdedededefdZ xZS )Distroz/etc/hostnamez'/etc/network/interfaces.d/50-cloud-init)eninetplanr   )eni_path
eni_headerr   T)netplan_pathnetplan_headerpostcmdsz/var/lib/dhcpzdhclient\.\w+\.leasesc                     t         |   |||       d| _        d| _        d | _        t        j                  | j                  |      | _        | j                  g| _	        y )NdebianzC.UTF-8)
super__init__osfamilydefault_localesystem_localer   from_config_runneraptpackage_managers)selfnamecfgpaths	__class__s       :/usr/lib/python3/dist-packages/cloudinit/distros/debian.pyr   zDistro.__init__7   sQ    sE* !'!??4<<57;xxj    c                     | j                   st               | _         | j                   r| j                   S | j                  S )z9Return the default locale if set, else use default locale)r   read_system_localer   r   s    r$   
get_localezDistro.get_localeB   s>     !!!3!5D #'"4"4D	
:>:M:M	
r%   c                 @   |st         }|st        d      | j                         }t        j                  j                  |      }| j                   }|r&t        j                  dt         | j                         n%t        j                  d| j                  t                |j                         |j                         k7  xs | xs |}| xs |xs |}|rt        |||       n"t        j                  d|| j                  |       |rt        |||       d| _        yy)zeApply specified locale to system, regenerate if specified locale
        differs from system default.zFailed to provide locale value.zVSystem locale not found in %s. Assuming system locale is %s based on hardcoded defaultzSystem locale set to %s via %s)keynamez9System has '%s=%s' requested '%s', skipping regeneration.N)LOCALE_CONF_FN
ValueErrorr)   ospathexistsr   LOGdebugr   lowerregenerate_localeupdate_locale_conf)	r   localeout_fnr+   distro_localeconf_fn_existssys_locale_unset
need_regen	need_confs	            r$   apply_localezDistro.apply_localeM   s    #F>?? )/#111IIJ##	 II0"" LLNm1133  !!  	
 '&H*H8H	ffg>IIK""	 vvw?!%D r%   c                 6    t                t        |   |i |S N)_maybe_remove_legacy_eth0r   _write_network_state)r   argskwargsr#   s      r$   rA   zDistro._write_network_state~   s    !#w+T<V<<r%   c                 <   d }	 | j                  |      }|st        d      }|j                  |       t        j                  |t        |      d       y # t        $ r> t        j                  | j                  dd      }|rnt
        j                  d       Y y Y w xY w)Ncreate_hostname_fileTz8create_hostname_file is False; hostname file not created   )_read_hostname_confIOErrorr   get_cfg_option_bool_cfgr1   infor	   set_hostname
write_filestr)r   hostnamefilenameconfrE   s        r$   _write_hostnamezDistro._write_hostname   s    	 ++H5D #D(##d)U3  
	#'#;#;		14$  $N  
	s   A ABBc                 T    | j                  | j                        }| j                  |fS r?   )_read_hostnamehostname_conf_fn)r   sys_hostnames     r$   _read_system_hostnamezDistro._read_system_hostname   s)    **4+@+@A%%|44r%   c                 b    t        t        j                  |            }|j                          |S r?   )r	   r   load_text_fileparse)r   rQ   rR   s      r$   rH   zDistro._read_hostname_conf   s%    D//9:

r%   c                 l    d }	 | j                  |      }|j                  }|s|S |S # t        $ r Y w xY wr?   )rH   rP   rI   )r   rQ   defaultrP   rR   s        r$   rU   zDistro._read_hostname   sH    	++H5D}}H N	  		s   ' 	33c                      y)Nz	127.0.1.1 r(   s    r$   _get_localhost_ipzDistro._get_localhost_ip   s    r%   c                 P    t        j                  || j                  |             y )N)tztz_file)r   set_etc_timezone_find_tz_file)r   rb   s     r$   set_timezonezDistro.set_timezone   s      B0B0B20FGr%   c                 b    |dk7  rt        d| d      | j                  j                  d       y )NupgradezUnable to handle z command)RuntimeErrorr   run_package_command)r   commandrB   pkgss       r$   package_commandzDistro.package_command   s3     i!27)8DEE$$Y/r%   c                 *    t        j                         S r?   )r   get_dpkg_architecturer(   s    r$   get_primary_archzDistro.get_primary_arch   s    ))++r%   layoutmodelvariantoptionsc                     dj                  ddd| dd| dd| dd| ddd	dg	      }t        j                  d
|dd       | j                  dd       y )N
z'# This file was generated by cloud-initrF   z
XKBMODEL=""zXKBLAYOUT="zXKBVARIANT="zXKBOPTIONS="zBACKSPACE="guess"z/etc/default/keyboardrG   w)rQ   contentmodeomoderestartzconsole-setup)joinr   rN   manage_service)r   rq   rr   rs   rt   contentss         r$   
set_keymapzDistro.set_keymap   s     999UG1%fXQ'wiq)wiq)#

 	,		
 	I7r%   )NLANGr?   )NN)__name__
__module____qualname__rV   r
   network_conf_fnNETWORK_FILE_HEADERrenderer_configsdhclient_lease_directorydhclient_lease_file_regexr   r)   r=   rA   rS   rX   rH   rU   r`   rf   rm   rp   rO   r   __classcell__)r#   s   @r$   r   r   !   s    &8)O (.-

 ,I61

  / 8	A	
/&b=4,5
	H0, 8  8S  83  8  8r%   r   c                    t         j                  j                  |       syd}	 t        j                  |       }ddg}|j                         D cg c]$  }|j                  d      r|j                         & }}||k(  rt        j                  |        d| z  }n|d| z  z   }t        j                  |       yc c}w # t        $ r |d| z  z   }Y .w xY w)	aO  Ubuntu cloud images previously included a 'eth0.cfg' that had
    hard coded content.  That file would interfere with the rendered
    configuration if it was present.

    if the file does not exist do nothing.
    If the file exists:
      - with known content, remove it and warn
      - with unknown content, leave it and warn
    Nz(Dynamic networking config may not apply.z	auto eth0ziface eth0 inet dhcp#zremoved %s with known contentsz* '%s' exists with user configured content.z" %s exists, but could not be read.)r.   r/   r0   r   rZ   
splitlines
startswithstripdel_file	Exceptionr1   warning)r/   bmsgr   known_contentsflinesmsgs          r$   r@   r@      s     77>>$5DA&&t,%'=>'224
ALL<MAGGI
 
 N"MM$2T9CELLC KK
  A9D@@As)   +B= B8&B88*B= 8B= =CCr   c                     d}| st        d| z        t        j                  j                  |       r<t	        j
                  |       }t	        j                  |      }|j                  |d      }|S )z.Read system default locale setting, if presentrF   zInvalid path: %s)r-   r.   r/   r0   r   rZ   load_shell_contentget)sys_pathr+   sys_vallocale_contentsys_defaultss        r$   r'   r'      sb    G+h677	ww~~h,,X6..~>""7B/Nr%   c                 x    t         j                  d|||        t        j                  dd|z   |d| gd       y)zUpdate system locale configz%Updating %s with locale setting %s=%szupdate-localez--locale-file==FcaptureN)r1   r2   r   r6   r   r+   s      r$   r5   r5     sB    II/7F 	IIx''	

 r%   c                     | j                         dv rt        j                  d||        yt        j                  d|        t        j                  d| gd       y)z
    Run locale-gen for the provided locale and set the default
    system variable `keyname` appropriately in the provided `sys_path`.

    )czc.utf-8posixz$%s=%s does not require rengenerationNzGenerating locales for %sz
locale-genFr   )r3   r1   r2   r   r   s      r$   r4   r4     sK     ||~22		8'6J II)62II|V$e4r%   )z"/etc/network/interfaces.d/eth0.cfg)r   )loggingr.   typingr   	cloudinitr   r   r   (cloudinit.distros.package_management.aptr   4cloudinit.distros.package_management.package_managerr   "cloudinit.distros.parsers.hostnamer	   cloudinit.net.netplanr
   	getLoggerr   r1   r   r,   r   r@   r'   r5   r4   r_   r%   r$   <module>r      sr     	  ) ) 8 O ; 8g!  '|8W^^ |8~@ !/ 5r%   