Ë
    x[hi*  ã                   óà   — 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   ø€ Ü‰Ñ˜˜s EÔ*ð !ˆŒØ'ˆÔØ!ˆÔÜ—?‘? 4§<¡<°Ó5ˆŒØ7;·x±x°jˆÕó    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Ó!5ˆDÔð #'×"4Ò"4ˆD×Ñð	
Ø:>×:MÑ:Mð	
r%   c                 ól  — |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        |||| j                  ¬«       n"t        j                  d|| j                  |«       |r!t        |||| j                  ¬«       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)ÚkeynameÚinstall_functionz9System has '%s=%s' requested '%s', skipping regeneration.N)ÚLOCALE_CONF_FNÚ
ValueErrorr)   ÚosÚpathÚexistsr   ÚLOGÚdebugr   ÚlowerÚregenerate_localeÚinstall_packagesÚ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   s9  € ñ Ü#ˆFáÜÐ>Ó?Ð?ð Ÿ™Ó)ˆÜŸ™Ÿ™¨Ó/ˆØ#×1Ñ1Ð1ÐÙÜ�I‰IðJäØ×#Ñ#õ	ô �I‰IØ0Ø×"Ñ"Üôð �L‰L‹N˜m×1Ñ1Ó3Ñ3ò  Ø!Ð!ò àð 	ð
 'Ð&ÒH¨*ÒHÐ8Hˆ	áÜØØØØ!%×!6Ñ!6ö	ô �I‰IØKØØ×"Ñ"Øô	ñ ÜØØØØ!%×!6Ñ!6õ	ð "&ˆDÕð r%   c                 ó6   •— t        «        t        ‰| �  |i |¤ŽS ©N)Ú_maybe_remove_legacy_eth0r   Ú_write_network_state)r   ÚargsÚkwargsr#   s      €r$   rC   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Ú_cfgr2   Úinfor	   Úset_hostnameÚ
write_fileÚstr)r   ÚhostnameÚfilenameÚconfrG   s        r$   Ú_write_hostnamezDistro._write_hostnameŒ   sž   € Øˆð	ð ×+Ñ+¨HÓ5ˆDñ Ü Ó#ˆDØ×Ñ˜(Ô#Ü�‰˜¤# d£)¨UÕ3øô ò 
	Ü#'×#;Ñ#;Ø—	‘	Ð1°4ó$Ð ñ $Øä—‘ØNôñ ñ ð
	ús   „A ÁABÂBc                 óT   — | j                  | j                  «      }| j                  |fS rA   )Ú_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 rA   )r	   r   Úload_text_fileÚparse)r   rS   rT   s      r$   rJ   zDistro._read_hostname_conf¦   s%   € ÜœD×/Ñ/°Ó9Ó:ˆØ�
‰
ŒØˆr%   c                 ól   — d }	 | j                  |«      }|j                  }|s|S |S # t        $ r Y Œw xY wrA   )rJ   rR   rK   )r   rS   ÚdefaultrR   rT   s        r$   rW   zDistro._read_hostname«   sH   € Øˆð	Ø×+Ñ+¨HÓ5ˆDØ—}‘}ˆ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   rd   s     r$   Úset_timezonezDistro.set_timezoneº   s   € Ü× Ñ  B°×0BÑ0BÀ2Ó0FÖ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   ÚcommandrD   Úpkgss       r$   Úpackage_commandzDistro.package_command½   s3   € ð �iÒÜÐ!2°7°)¸8ÐDÓEÐEØ�‰×$Ñ$ YÕ/r%   c                 ó*   — t        j                  «       S rA   )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-initrH   z
XKBMODEL="ú"zXKBLAYOUT="zXKBVARIANT="zXKBOPTIONS="zBACKSPACE="guess"z/etc/default/keyboardrI   Úw)rS   ÚcontentÚmodeÚomodeÚrestartzconsole-setup)Újoinr   rP   Úmanage_service)r   rs   rt   ru   rv   Úcontentss         r$   Ú
set_keymapzDistro.set_keymapÇ   s‚   € ð —9‘9à9ØØ˜U˜G 1Ð%Ø˜f˜X QÐ'Ø˜w˜i qÐ)Ø˜w˜i qÐ)ØØ#Øð
ó
ˆô 	�‰Ø,ØØØõ		
ð 	×Ñ˜I Õ7r%   )NÚLANGrA   )NN)Ú__name__Ú
__module__Ú__qualname__rX   r
   Únetwork_conf_fnÚNETWORK_FILE_HEADERÚrenderer_configsÚdhclient_lease_directoryÚdhclient_lease_file_regexr   r)   r?   rC   rU   rZ   rJ   rW   rb   rh   ro   rr   rQ   r‚   Ú__classcell__)r#   s   @r$   r   r   !   s³   ø„ Ø&Ðà8Ø)ñ€Oð (¨Ñ.Ø-ñ
ð
 ,¨IÑ6Ø1Øñ
ñ
Ðð  /ÐØ 8Ðô	Aò	
ó9&ôv=ò4ò,5òó
	òòHó0ò,ð 8 ð  8¨Sð  8¸3ð  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/   r0   r1   r   r\   Ú
splitlinesÚ
startswithÚstripÚdel_fileÚ	Exceptionr2   Úwarning)r0   Úbmsgr�   Úknown_contentsÚfÚlinesÚmsgs          r$   rB   rB   ê   s×   € ô �7‰7�>‰>˜$ÔØà5€DðAÜ×&Ñ& tÓ,ˆØ%Ð'=Ð>ˆà'×2Ñ2Ó4ö
Ø¸A¿L¹LÈÕ<MˆA�G‰G�Ið
ˆð 
ð �NÒ"Ü�M‰M˜$ÔØ2°TÑ9‰CàÐEÈÑLÑLˆCô ‡K�K�Õùò
øô ò AØÐ9¸DÑ@Ñ@Šð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 presentrH   zInvalid path: %s)r.   r/   r0   r1   r   r\   Úload_shell_contentÚget)Úsys_pathr+   Úsys_valÚlocale_contentÚsys_defaultss        r$   r'   r'   
  sb   € à€GÙÜÐ+¨hÑ6Ó7Ð7ä	‡w�w‡~�~�hÔÜ×,Ñ,¨XÓ6ˆÜ×.Ñ.¨~Ó>ˆØ×"Ñ" 7¨BÓ/ˆà€Nr%   c                 ó´   — t         j                  d||| «       t        j                  d«      s	 |dg«       t        j                  dd|z   |›d| ›�gd¬«       y)	zUpdate system locale configz%Updating %s with locale setting %s=%szupdate-localeÚlocalesz--locale-file=ú=F©ÚcaptureN)r2   r3   r   Úwhich©r8   r�   r+   r,   s       r$   r7   r7     sZ   € ô ‡I�IØ/°¸7ÀFôô �:‰:�oÔ&Ù˜)˜Ô%Ü‡I�IàØ˜xÑ'Ú¡Ð'ð	
ð
 ör%   c                 óò   — | j                  «       dv rt        j                  d|| «       yt        j                  d«      s	 |dg«       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
locale-genr¢   zGenerating locales for %sFr¤   )r4   r2   r3   r   r¦   r§   s       r$   r5   r5   +  sa   € ð ‡|�|ƒ~Ð2Ñ2Ü�	‰	Ð8¸'À6ÔJØô �:‰:�lÔ#Ù˜)˜Ô%Ü‡I�IÐ)¨6Ô2Ü‡I�Iˆ|˜VÐ$¨eÖ4r%   )z"/etc/network/interfaces.d/eth0.cfg)rƒ   N)Úloggingr/   Útypingr   Ú	cloudinitr   r   r   Ú(cloudinit.distros.package_management.aptr   Ú4cloudinit.distros.package_management.package_managerr   Ú"cloudinit.distros.parsers.hostnamer	   Úcloudinit.net.netplanr
   Ú	getLoggerr„   r2   rˆ   r-   r   rB   r'   r7   r5   ra   r%   r$   ú<module>r³      sw   ðó Û 	Ý ç )Ñ )Ý 8Ý OÝ ;Ý 8à€g×Ñ˜Ó!€ðÐ ð '€ôF8ˆW�^‰^ô F8óRð@ !/¸ó ð 8<óô&5r%   