
    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
  e j                  e      ZdZ G d dej                        Zy)    N)distroshelperssubputil)HostnameConf)PER_INSTANCEa7  # 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}

c                       e Zd ZdZdZdZdZdeediZdZ	dZ
d	 Zd
 Zd$dZdej                  fdZd Zd Zd Zd$dZd ZdedededefdZd Zd%dZd Zed        Zd&dZed        Ze ddd ed!ed"efd#       Z!y)'Distrozpy3-pipz/usr/share/bkeymaps/z&/etc/profile.d/50-cloud-init-locale.shz/etc/network/interfaceseni)eni_path
eni_headerz/var/lib/dhcpzdhclient\.leasesc                     t         j                  j                  | |||       t        j                  |      | _        d| _        d| _        d|d<   y )NzC.UTF-8alpinesshdssh_svcname)r   r
   __init__r   Runners_runnerdefault_localeosfamily)selfnamecfgpathss       :/usr/lib/python3/dist-packages/cloudinit/distros/alpine.pyr   zDistro.__init__)   sE    dC7 u-' #M    c                     | j                   S )zgThe default locale for Alpine Linux is different than
        cloud-init's DataSource default.
        )r   r   s    r   
get_localezDistro.get_locale3   s     """r   Nc                     |s| j                   }|s| j                  }ddddd|z  ddg}t        j                  |dj	                  |      d       y )	N#z?# This file is created by cloud-init once per new instance bootzexport CHARSET=UTF-8zexport LANG=%szexport LC_COLLATE=C 
  )r   locale_conf_fnr   
write_filejoin)r   localeout_fnliness       r   apply_localezDistro.apply_locale9   s^     ((F((F M"v%!
 			% 0%8r   pkglistc                 J    | j                          | j                  d|       y )Nadd)pkgs)update_package_sourcespackage_command)r   r,   s     r   install_packageszDistro.install_packagesL   s!    ##%U1r   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 createdr"   r$   )_read_hostname_confIOErrorr   get_cfg_option_bool_cfgLOGinfor   set_hostnamer&   str)r   hostnamefilenameconfr4   s        r   _write_hostnamezDistro._write_hostnameP   s    	 ++H5D #D(##d)U3  
	#'#;#;		14$  $N  
	s   A ABBc                 T    | j                  | j                        }| j                  |fS N)_read_hostnamehostname_conf_fn)r   sys_hostnames     r   _read_system_hostnamezDistro._read_system_hostnamef   s)    **4+@+@A%%|44r   c                 b    t        t        j                  |            }|j                          |S rB   )r   r   load_text_fileparse)r   r>   r?   s      r   r5   zDistro._read_hostname_confj   s%    D//9:

r   c                 l    d }	 | j                  |      }|j                  }|s|S |S # t        $ r Y w xY wrB   )r5   r=   r6   )r   r>   defaultr=   r?   s        r   rC   zDistro._read_hostnameo   sH    	++H5D}}H N	  		s   ' 	33c                      y)Nz	127.0.1.1 r   s    r   _get_localhost_ipzDistro._get_localhost_ipz   s    r   layoutmodelvariantoptionsc                    |s"d}t         j                  |       t        |      t        j                  j                  | j                  |      }t        j                  j                  |      s%d|z  }t         j                  |       t        |      |s"d}t         j                  |       t        |      t        j                  j                  |d|z        }t        j                  j                  |      s%d|z  }t         j                  |       t        |      |rt         j                  d       |rt         j                  d       t        j                  d||g       y )	NzKeyboard layout not specified.z,Keyboard layout directory %s does not exist.zKeyboard variant not specified.z
%s.bmap.gzz(Keyboard variant file %s does not exist.z+Keyboard model is ignored for Alpine Linux.z.Keyboard options are ignored for Alpine Linux.zsetup-keymap)r9   errorRuntimeErrorospathr'   keymap_pathisdirisfilewarningr   )r   rO   rP   rQ   rR   msgkeymap_layout_pathkeymap_variant_paths           r   
set_keymapzDistro.set_keymap}   s   2CIIcNs##WW\\$*:*:FCww}}/0>$%  IIcNs##3CIIcNs## ggllw 6
 ww~~12:%&  IIcNs##KKEFKKHI		>6734r   c                 P    t        j                  || j                  |             y )N)tztz_file)r   set_etc_timezone_find_tz_file)r   ra   s     r   set_timezonezDistro.set_timezone   s      B0B0B20FGr   c                    |g }dg}|j                  d       |r"t        |t              r|j                  |       n#|r!t        |t              r|j	                  |       |r|j                  |       |dk(  r|j	                  ddg       t        j                  d|      }|j	                  |       t        j                  |d       y )	Napkz--quietupgradez--update-cachez--availablez%s-%sF)capture)append
isinstancer<   listextendr   expand_package_listr   )r   commandargsr/   cmdr,   s         r   r1   zDistro.package_command   s    <Dg

9JtS)JJtjt,JJtJJwiJJ(-89**7D9

7 			#u%r   c                 `    | j                   j                  d| j                  dgt               y )Nzupdate-sourcesupdate)freq)r   runr1   r   r   s    r   r0   zDistro.update_package_sources   s-      J	 	 	
r   c                 D    | j                   s	ddg| _         | j                   S )z7Allow distro to determine the preferred ntp client listchronyntp)_preferred_ntp_clientsr   s    r   preferred_ntp_clientszDistro.preferred_ntp_clients   s&     **+3U*;D'***r   c                     |dg}|dk(  r|dgz  }|S 	 |j                  t        t        |      dz               |S # t        $ r}t	        d|d      |d }~ww xY w)Nz-dnow0<   z;power_state[delay] must be 'now' or '+m' (minutes). found 'z'.)rj   r<   int
ValueError	TypeError)r   modedelaymessagero   es         r   shutdown_commandzDistro.shutdown_command   sz     , E>uG s3u:?34   &+. s   &; 	AAAc                       y)z1
        Alpine uses OpenRC, not systemd
        FrM   rM   r   r   uses_systemdzDistro.uses_systemd   s    
 r   )rcsactionservice
extra_argsc          
      T   ddg}ddg}t        |      |dgz   t        |      |dgz   t        |      d|gz   t        |      d|gz   t        |      |dgz   t        |      |dgz   t        |      |dgz   t        |      |d	gz   d
}t        ||         }t        j                  |d|      S )a<  
        Perform the requested action on a service. This handles OpenRC
        specific implementation details.

        OpenRC has two distinct commands relating to services,
        'rc-service' and 'rc-update' and the order of their argument
        lists differ.
        May raise ProcessExecutionError
        z
rc-servicez	--nocolorz	rc-updatestopstartdelr.   restartstatus)r   r   disableenabler   reloadz
try-reloadr   T)ri   r   )rl   r   )	r   r   r   r   r   init_cmd
update_cmdcmdsrq   s	            r   manage_servicezDistro.manage_service   s     !+.!;/
Ngv%66(^w&88J'5'*:::&%)99H~)(<<8n';;x.GY+??8n'::	
 4< yyd44r   rB   )NN)poweroffr|   N)"__name__
__module____qualname__pip_package_namerX   r%   network_conf_fnNETWORK_FILE_HEADERrenderer_configsdhclient_lease_directorydhclient_lease_file_regexr   r   r+   r   PackageListr2   r@   rF   r5   rC   rN   r<   r_   re   r1   r0   propertyrz   r   staticmethodr   classmethodr   rM   r   r   r
   r
      s     (K=N/OO;NO
  / 3$#9&2(;(; 24,5
	 5  5S  53  5  5DH&2
 + +4   ?C55$'5695 5r   r
   )loggingrV   	cloudinitr   r   r   r   "cloudinit.distros.parsers.hostnamer   cloudinit.settingsr   	getLoggerr   r9   r   r
   rM   r   r   <module>r      sE     	 2 2 ; +g! j5W^^ j5r   