Ë
    x[hda  ã                   óÎ   — d dl Z d dlZ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
mZmZmZmZ d dlmZ d dlmZmZ  e j(                  e«      ZdZ G d„ d	e
j0                  «      Zy)
é    N)Údatetime)ÚAnyÚDictÚOptional)ÚdistrosÚhelpersÚ	lifecycleÚsubpÚutil)ÚHostnameConf)Ú
PER_ALWAYSÚ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                   óp  ‡ — e Zd 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d0d„Zdej                   fd„Zd„ Zd„ Zd„ Zd0d„Zd„ Zdedededefd„Zd„ Zd1d„Zddœd„Zed„ «       Zd efˆ fd!„Zˆ fd"„Z d#efˆ fd$„Z!ˆ fd%„Z"d0ˆ fd&„	Z#d2d'„Z$e%d(„ «       Z&e'dd)œd*ed+ed,efd-„«       Z(e%d.ed e)e   fd/„«       Z*ˆ xZ+S )3ÚDistrozpy3-pipz/usr/share/bkeymaps/z&/etc/profile.d/50-cloud-init-locale.shz/etc/network/interfacesz/etc/shadowÚ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   € Ü�‰×Ñ  d¨C°Ô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_locale8   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_locale>   s^   € ñ Ø×(Ñ(ˆFÙØ×(Ñ(ˆFð ØMØØ"Ø˜vÑ%Ø!Øð
ˆô 	�‰˜ §	¡	¨%Ó 0°%Õ8r"   Úpkglistc                 óJ   — | j                  «        | j                  d|¬«       y )NÚadd)Úpkgs)Úupdate_package_sourcesÚpackage_command)r   r2   s     r!   Úinstall_packageszDistro.install_packagesQ   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Úconfr:   s        r!   Ú_write_hostnamezDistro._write_hostnameU   sž   € Øˆð	ð ×+Ñ+¨HÓ5ˆDñ Ü Ó#ˆDØ×Ñ˜(Ô#Ü�‰˜¤# d£)¨UÕ3øô ò 
	Ü#'×#;Ñ#;Ø—	‘	Ð1°4ó$Ð ñ $Øä—‘Ø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_hostnamek   s)   € Ø×*Ñ*¨4×+@Ñ+@ÓAˆØ×%Ñ% |Ð4Ð4r"   c                 ób   — t        t        j                  |«      «      }|j                  «        |S rH   )r   r   Úload_text_fileÚparse)r   rD   rE   s      r!   r;   zDistro._read_hostname_confo   s%   € ÜœD×/Ñ/°Ó9Ó:ˆØ�
‰
ŒØˆr"   c                 ól   — d }	 | j                  |«      }|j                  }|s|S |S # t        $ r Y Œw xY wrH   )r;   rC   r<   )r   rD   ÚdefaultrC   rE   s        r!   rI   zDistro._read_hostnamet   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"   Ú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)r?   ÚerrorÚRuntimeErrorÚosÚpathr-   Úkeymap_pathÚisdirÚisfileÚwarningr
   )r   rU   rV   rW   rX   ÚmsgÚkeymap_layout_pathÚkeymap_variant_paths           r!   Ú
set_keymapzDistro.set_keymap‚   s  € ÙØ2ˆCÜ�I‰I�cŒNÜ˜sÓ#Ð#ÜŸW™WŸ\™\¨$×*:Ñ*:¸FÓCÐÜ�w‰w�}‰}Ð/Ô0à>Ø$ñ%ð ô �I‰I�cŒNÜ˜sÓ#Ð#ÙØ3ˆCÜ�I‰I�cŒNÜ˜sÓ#Ð#Ü Ÿg™gŸl™lØ ¨wÑ 6ó
Ðô �w‰w�~‰~Ð1Ô2à:Ø%ñ&ð ô �I‰I�cŒNÜ˜sÓ#Ð#ÙÜ�K‰KÐEÔFÙÜ�K‰KÐHÔIä�	‰	�> 6¨7Ð3Õ4r"   c                 óP   — t        j                  || j                  |«      ¬«       y )N)ÚtzÚtz_file)r   Úset_etc_timezoneÚ_find_tz_file)r   rg   s     r!   Úset_timezonezDistro.set_timezone¤   s   € Ü× Ñ  B°×0BÑ0BÀ2Ó0FÖ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Ú
isinstancerB   ÚlistÚextendr   Úexpand_package_listr
   )r   ÚcommandÚargsr5   Úcmdr2   s         r!   r7   zDistro.package_command§   s¦   € Øˆ<ØˆDàˆgˆà�
‰
�9Ôá”J˜t¤SÔ)Ø�J‰J�tÕÙ”j ¤tÔ,Ø�J‰J�tÔáØ�J‰J�wÔà�iÒØ�J‰JÐ(¨-Ð8Ô9ä×*Ñ*¨7°DÓ9ˆØ�
‰
�7Ôô 	�	‰	�#˜uÖ%r"   F)Úforcec                ó|   — | j                   j                  d| j                  dg|rt        ¬«       y t        ¬«       y )Nzupdate-sourcesÚupdate)Úfreq)r   Úrunr7   r   r   )r   rx   s     r!   r6   zDistro.update_package_sourcesÀ   s>   € Ø�‰×ÑØØ× Ñ ØˆJÙ$”ð	 	õ 	
ô +7ð	 	õ 	
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&   € ð ×*Ò*Ø+3°UÐ*;ˆDÔ'à×*Ñ*Ð*r"   Úreturnc                 óR
  •— t        j                  |«      rt        j                  d|«       yd|v rt        j	                  d«       |d= t        j                  d«      rt        ‰| �   |fi |¤ŽS |j                  dd«      }dd	g}d
dddddœ}ddi}|j                  d«      }|r¤t        |t        «      r|j                  d«      }n,t        |t        «      rt        j                   d|› d�dd¬«       |D �cg c]  }|j#                  «       ‘Œ }}dj%                  |«      |d<   |j                  d«      r|j'                  |d   «       |rG|rE|D ]@  }	t        j(                  |	«      rŒ| j+                  |	«       t        j-                  d|	|«       ŒB d|v rt        |d   «      |d<   g ddddœ}
t/        |j1                  «       «      D ]„  \  }}||v r)|r't        |t        «      r|j3                  ||   |g«       Œ3||
v r2|r0t        |t        «      r |dk(  r|j                  d«      |
|<   Œc||
|<   Œi||v sŒn|sŒq|j'                  ||   «       Œ† |j                  d«      s|j                  d«      r|j'                  d«       |j'                  |«       t        j-                  d |«       	 t        j
                  |«       |
d   D ]1  }t        j-                  d"|«       	 t        j
                  d#||g«       Œ3 |
d%   rt        ‰| �q  ||
d%   d¬&«       |
d'   }|
d(   }d}| j:                  }	 t        j<                  |«      }d}|jA                  «       D ]  }|j                  d*«      }|d+   |k(  sŒ|} n |rÐd,}d,d-<   d,|d.<   d,|d/<   d0}|�RtC        jD                  |«      tC        jD                  d1«      z
  jF                  }t        |«      |d2<   |d,k7  r|d3z   }|d4z   }|�||d5<   |d,k7  r|d3z   }|d6z   }|jI                  |d*j%                  |«      «      }t        j-                  d7||«       	 t        jJ                  ||d8d¬9«       yt        j6                  t        d;||«       yc c}w # t
        j4                  $ r}t        j	                  d!|«       |‚d}~ww xY w# t
        j4                  $ r#}t        j6                  t        d$||«       |‚d}~ww xY w# t>        $ r}t        j	                  d)|«       |‚d}~ww xY w# tL        $ r"}t        j6                  t        d:|«       |‚d}~ww xY w)<zü
        Add a user to the system using standard tools

        On Alpine this may use either 'useradd' or 'adduser' depending
        on whether the 'shadow' package is installed.

        Returns False if user already exists, otherwise True.
        z!User %s already exists, skipping.FÚselinux_userz0Ignoring selinux_user parameter for Alpine LinuxÚuseraddÚcreate_groupsTÚadduserz-Dz-gz-hz-Gz-sú-u)ÚgecosÚhomedirÚprimary_groupÚshellÚuidÚsystemz-SÚgroupsú,z	The user z) has a 'groups' config value of type dictz22.3z=Use a comma-delimited string or array instead: group1,group2.)Ú
deprecatedÚdeprecated_versionÚextra_messager‹   z created group '%s' for user '%s'r�   N)r�   Ú
expiredateÚinactiveÚpasswdÚno_create_homez-HzAdding user %szFailed to create user %szAdding user to group %sÚaddgroupz!Failed to add user %s to group %sr–   )Úhashedr”   r•   ú&Failed to read %s file, file not foundú:r   r(   é   é   é   zpassword agingz
1970-01-01é   z & zacct expiration dateé   zinactivity periodzUpdating %s for user %sÚw©ÚomodeÚpreserve_modeúFailed to update %s filezFailed to update %s for user %s)'r   Úis_userr?   r@   ra   r
   ÚwhichÚsuperÚadd_userÚpopÚgetrq   rB   ÚsplitÚdictr	   Ú	deprecateÚstripr-   rp   Úis_groupÚcreate_groupÚdebugÚsortedÚitemsrs   ÚProcessExecutionErrorÚlogexcÚ
set_passwdÚ	shadow_fnrN   ÚFileNotFoundErrorÚ
splitlinesr   ÚfromisoformatÚdaysÚreplacer,   r<   )r   r   Úkwargsr†   Úadduser_cmdÚadduser_optsÚadduser_flagsr�   ÚgÚgroupÚunsupported_busybox_valuesÚkeyÚvalÚeÚ
addn_groupr”   r•   Úshadow_contentsÚshadow_fileÚoriginal_lineÚlineÚnew_line_partsÚupdate_typer¼   Ú	__class__s                           €r!   r©   zDistro.add_userÐ   s‚  ø€ ô �<‰<˜ÔÜ�H‰HÐ8¸$Ô?Øà˜VÑ#Ü�K‰KÐJÔKØ�~Ð&ô �:‰:�iÔ Ü‘7Ñ# DÑ3¨FÑ3Ð3àŸ
™
 ?°DÓ9ˆà  $Ð'ˆð ØØ!ØØñ
ˆð " 4Ð(ˆð —‘˜HÓ%ˆÙÜ˜&¤#Ô&ØŸ™ cÓ*‘Ü˜F¤DÔ)Ü×#Ñ#Ø!*¨4¨&ð 1#ð  #à'-ð#4õ	ð *0Ö0 A�a—g‘g•iÐ0ˆFÐ0ð  #Ÿx™x¨Ó/ˆF�8Ñà�z‰z˜/Ô*Ø—‘˜f _Ñ5Ô6á™VØò O�Ü—}‘} UÕ+Ø×%Ñ% eÔ,Ü—I‘IÐ@À%ÈÕNðOð �F‰?Ü  u¡Ó.ˆF�5‰Mð ØØØñ	6
Ð"ô ˜vŸ|™|›~Ó.ò 	7‰HˆC�Ø�lÑ"¡s¬z¸#¼sÔ/CØ×"Ñ" L°Ñ$5°sÐ#;Õ<àÐ1Ñ1ÙÜ˜s¤CÔ(ð ˜(’?Ø69·i±iÀ³nÐ.¨sÒ3à69Ð.¨sÒ3Ø˜Ò%ª#Ø×"Ñ" =°Ñ#5Õ6ð	7ð& �:‰:Ð&Ô'¨6¯:©:°hÔ+?Ø×Ñ˜tÔ$ð 	×Ñ˜4Ô ô 	�	‰	Ð" DÔ)ð	Ü�I‰I�kÔ"ð 5Øñ
ò 
	ˆJô �I‰IÐ/°Ô<ðÜ—	‘	˜: t¨ZÐ8Õ9ð
	ð & hÒ/ô ‰GÑØÐ0°Ñ:À4ð ô ð& 0°Ñ=ˆ
Ø-¨jÑ9ˆàˆØ—n‘nˆð	Ü"×1Ñ1°+Ó>ˆOð ˆØ#×.Ñ.Ó0ò 	ˆDØ!ŸZ™Z¨›_ˆNØ˜aÑ  DÓ(Ø $�Ùð		ñ àˆKð !#ˆN˜1Ñà "ˆN˜1Ñà "ˆN˜1ÑØ*ˆKàÐ%ô ×*Ñ*¨:Ó6Ü×,Ñ,¨\Ó:ñ;ç‘$ð ô %(¨£I�˜qÑ!Ø "Ò$Ø"-°Ñ"5�KØ)Ð,BÑB�ØÐ#Ø$,�˜qÑ!Ø "Ò$Ø"-°Ñ"5�KØ)Ð,?Ñ?�ð .×5Ñ5Ø˜sŸx™x¨Ó7óˆOô �I‰IÐ/°¸dÔCðÜ—‘Ø ¸È4õð ô �K‰KÜÐ6¸ÀTôð
 ùòC 1øôl ×)Ñ)ò 	Ü�K‰KÐ2°DÔ9ØˆGûð	ûô ×-Ñ-ò Ü—‘ÜÐ<¸dÀJôð �ûð	ûôF !ò 	Ü�K‰KÐ@À+ÔNØˆGûð	ûôb ò Ü—‘œCÐ!;¸[ÔIØ�ûðúsf   Ã6Q!Ê(Q& ËRÌ)S Ð*S; Ñ&RÑ9RÒRÒSÒ,S
Ó
SÓ	S8ÓS3Ó3S8Ó;	T&ÔT!Ô!T&c                 ór  •— t         j                  j                  d«      rdt        j                  d«      vrt        ‰| �  |«      S dd|g}	 t        j                  |ddg¬«      \  }}t        j                  d|«      ry	y# t        j                  $ r"}t        j                  t        d
|«       |‚d}~ww xY w)zL
        Lock the password of a user, i.e., disable password logins
        ú/usr/bin/passwdÚbbsuidr–   z-lr   é   ©Úrcszis already lockedTz&Failed to disable password for user %sN)r\   r]   ÚislinkÚreadlinkr¨   Úlock_passwdr
   ÚreÚsearchrµ   r   r¶   r?   )r   r   rw   Ú_outÚerrrÇ   rÏ   s         €r!   rØ   zDistro.lock_passwdª  s¦   ø€ ô �w‰w�~‰~Øô
àœRŸ[™[Ð):Ó;Ñ;Ü‘7Ñ& tÓ,Ð,à˜˜tÐ$ˆð	ÜŸ)™) C¨a°¨VÔ4‰KˆT�3Ü�y‰yÐ-¨sÔ3Øð 4øä×)Ñ)ò 	Ü�K‰KœÐEÀtÔLØˆGûð	úó   Á2B ÂB6ÂB1Â1B6r   c                 ór  •— t         j                  j                  d«      rdt        j                  d«      vrt        ‰| �  |«      S dd|g}	 t        j                  |ddg¬«      \  }}t        j                  d|«      ry	y# t        j                  $ r"}t        j                  t        d
|«       |‚d}~ww xY w)zM
        Unlock the password of a user, i.e., enable password logins
        rÑ   rÒ   r–   rˆ   r   rÓ   rÔ   zis already unlockedTz%Failed to unlock password for user %sN)r\   r]   rÖ   r×   r¨   Úunlock_passwdr
   rÙ   rÚ   rµ   r   r¶   r?   )r   r   rw   Ú_rÜ   rÇ   rÏ   s         €r!   rß   zDistro.unlock_passwdÆ  s¦   ø€ ô �w‰w�~‰~Øô
àœRŸ[™[Ð):Ó;Ñ;Ü‘7Ñ(¨Ó.Ð.à˜˜tÐ$ˆð	Ü—Y‘Y˜s¨¨A¨Ô/‰FˆAˆsÜ�y‰yÐ/°Ô5Øð 6øä×)Ñ)ò 	Ü�K‰KœÐDÀdÔKØˆGûð	úrÝ   c                 óB  •— t         j                  j                  d«      rdt        j                  d«      vrt        ‰| �  |«      S d }| j                  }	 t        j                  |«      }d }|j                  «       D ]5  }|j                  d«      }|d   |k(  sŒt        j                  d|«       |} n |rwd   dk7  rXd|d<   |j                  |dj!                  |«      d	«      }t        j                  d
|«       	 t        j"                  ||dd¬«       y t        j                  d|«       y t        j&                  t        d|«       y # t        $ r}t        j                  d|«       |‚d }~ww xY w# t$        $ r"}t        j&                  t        d|«       |‚d }~ww xY w)NrÑ   rÒ   rš   r›   r   z'Found /etc/shadow line matching user %sé   Ú0rÓ   zExpiring password for user %sr¡   Tr¢   r¥   z'Password for user %s is already expiredzFailed to set 'expire' for %s)r\   r]   rÖ   r×   r¨   Úexpire_passwdr¸   r   rN   r¹   r?   ra   rº   r¬   r²   r½   r-   r,   r<   r¶   )	r   ÚuserrÉ   rÊ   rÇ   rË   rÌ   rÍ   rÏ   s	           €r!   rä   zDistro.expire_passwdä  sŽ  ø€ ô �w‰w�~‰~Øô
àœRŸ[™[Ð):Ó;Ñ;Ü‘7Ñ(¨Ó.Ð.ð ˆØ—n‘nˆð	Ü"×1Ñ1°+Ó>ˆOð ˆØ#×.Ñ.Ó0ò 	ˆDØ!ŸZ™Z¨›_ˆNØ˜aÑ  DÓ(Ü—	‘	ÐCÀTÔJØ $�Ùð	ñ ð
 ˜aÑ  CÒ'ð %(�˜qÑ!Ø"1×"9Ñ"9Ø! 3§8¡8¨NÓ#;¸Qó#�ô —	‘	Ð9¸4Ô@ð	Ü—O‘OØ#Ø'Ø!Ø&*ö	ô —	‘	ÐCÀTÕJä�K‰KœÐ<¸dÕCøôQ !ò 	Ü�K‰KÐ@À+ÔNØˆGûð	ûôD ò Ü—K‘K¤Ð%?ÀÔMØ�Gûðús0   ÁE
 Ã=E3 Å
	E0ÅE+Å+E0Å3	FÅ<FÆFc                 ó\  •— t        j                  d«      rt        ‰| �  ||«      S d|g}|sg }t	        j
                  |«      rt        j                  d|«       n,	 t        j                   |«       t        j                  d|«       t        |«      dkD  rd|D ]^  }t	        j                  |«      st        j                  d||«       Œ0t        j                   d||g«       t        j                  d||«       Œ` y y # t         j                  $ r t	        j                  t        d|«       Y Œ£w xY w)	NÚgroupaddr˜   z(Skipping creation of existing group '%s'zCreated new group %szFailed to create group %sr   zCUnable to add group member '%s' to group '%s'; user does not exist.zAdded user '%s' to group '%s')r
   r§   r¨   r±   r   r°   r?   ra   r@   rµ   r¶   Úlenr¦   )r   r   ÚmembersÚgroup_add_cmdÚmemberrÏ   s        €r!   r±   zDistro.create_group  s  ø€ ô �:‰:�jÔ!Ü‘7Ñ'¨¨gÓ6Ð6à# TÐ*ˆÙØˆGô �=‰=˜ÔÜ�K‰KÐBÀDÕIðDÜ—	‘	˜-Ô(Ü—‘Ð/°Ô6ô
 ˆw‹<˜!ÒØ!ò H�Ü—|‘| FÔ+Ü—K‘Kð1àØô	ð ä—	‘	˜: v¨tÐ4Ô5Ü—‘Ð8¸&À$ÕGñHð øô	 ×-Ñ-ò DÜ—‘œCÐ!<¸dÖCðDús   Á+C: Ã:.D+Ä*D+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Únowrã   é<   z;power_state[delay] must be 'now' or '+m' (minutes). found 'z'.)rp   rB   ÚintÚ
ValueErrorÚ	TypeError)r   ÚmodeÚdelayÚmessageru   rÇ   s         r!   Úshutdown_commandzDistro.shutdown_command@  sz   € ð ˜�,ˆð �EŠ>à˜�uÑˆGð ˆðØ—‘œs¤3 u£:°¡?Ó3Ô4ð ˆøô ò Ýâ&+ð.óð ðûðús   “&; »	AÁAÁAc                   ó   — y)z1
        Alpine uses OpenRC, not systemd
        FrS   rS   r"   r!   Úuses_systemdzDistro.uses_systemdZ  s   € ð
 r"   rÔ   Ú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Údelr4   ÚrestartÚstatus)rü   rý   ÚdisableÚenablerÿ   Úreloadz
try-reloadr   T)ro   rÕ   )rr   r
   )	r   rø   rù   rÕ   rú   Úinit_cmdÚ
update_cmdÚcmdsrw   s	            r!   Úmanage_servicezDistro.manage_servicea  sÌ   € ð ! +Ð.ˆØ! ;Ð/ˆ
ä˜“N g¨vÐ%6Ñ6Ü˜(“^ w°Ð&8Ñ8Ü˜JÓ'¨5°'Ð*:Ñ:Ü˜:Ó&¨%°Ð)9Ñ9Ü˜H“~¨°)Ð(<Ñ<Ü˜8“n¨°Ð';Ñ;Ü˜x›.¨G°YÐ+?Ñ?Ü˜8“n¨°Ð':Ñ:ñ	
ˆô �4˜‘<Ó ˆÜ�y‰y˜ d°Ô4Ð4r"   Úblockdevc                 óð  — t         j                  j                  | «      }| j                  d«      �r�t        j                  t        j
                  | «      j                  «      }t        j                  t        j
                  | «      j                  «      }t        j                  d«      5 }|D �]  }|j                  j                  d«      sŒ t        j                  |j                  «      }t        j                  |j                  «      sŒ_t        j                  t        j
                  |j                  «      j                  «      |k(  sŒŸt        j                  t        j
                  |j                  «      j                  «      |k(  sŒßt         j                  j                  |j                  «      } n ddd«       |j                  d«      rt        j                  d| |«       |S y# 1 sw Y   Œ4xY w)a  Returns underlying block device for a mapped device.

        If it is mapped, blockdev will usually take the form of
        /dev/mapper/some_name

        If blockdev is a symlink pointing to a /dev/dm-* device, return
        the device pointed to. Otherwise, return None.
        z/dev/mapperz/dev/zdm-Nz/dev/dm-z$%s is a mapped device pointing to %s)r\   r]   ÚrealpathÚ
startswithÚmajorÚstatÚst_rdevÚminorÚscandirr   ÚlstatÚS_ISBLKÚst_moder?   r²   )r  r
  r  r  ÚitÚdeventryÚress          r!   Úget_mapped_devicezDistro.get_mapped_device}  sb  € ô —7‘7×#Ñ# HÓ-ˆà×Ñ˜}Õ-ô —H‘HœRŸW™W XÓ.×6Ñ6Ó7ˆEÜ—H‘HœRŸW™W XÓ.×6Ñ6Ó7ˆEô —‘˜GÓ$ð &¨Ø "ó &�HØ—}‘}×/Ñ/°Õ6Ü Ÿh™h x§}¡}Ó5˜ÜŸ<™<¨¯©Õ4ä "§¡¬¯©°·±Ó)?×)GÑ)GÓ HØ#(ó!)ä$&§H¡H¬R¯W©W°X·]±]Ó-C×-KÑ-KÓ$LØ#(ó%)ô ,.¯7©7×+;Ñ+;¸H¿M¹MÓ+J Ù %ð&÷&ð ×Ñ˜zÔ*Ü�I‰IØ6¸À(ôð ˆOØ÷'&ð &ús$   Â+"G,Ã>G,Ä?G,Å?G,Æ,G,Ç,G5rH   )NN)Úpoweroffrí   N),Ú__name__Ú
__module__Ú__qualname__Úpip_package_namer^   r+   Únetwork_conf_fnr¸   ÚNETWORK_FILE_HEADERÚrenderer_configsÚdhclient_lease_directoryÚdhclient_lease_file_regexr   r%   r1   r   ÚPackageListr8   rF   rL   r;   rI   rT   rB   re   rk   r7   r6   Úpropertyr�   Úboolr©   rØ   rß   rä   r±   rõ   Ústaticmethodr÷   Úclassmethodr  r   r  Ú__classcell__)rÏ   s   @r!   r   r       s_  ø„ Ø ÐØ(€KØ=€NØ/€OØ€Ià˜OÐ;NÑOðÐð
  /ÐØ 3Ðò$ò#ó9ð&2¨×(;Ñ(;ó 2ò4ò,5òó
	òð 5 ð  5¨Sð  5¸3ð  5Èó  5òDHó&ð2 /4ô 
ð ñ+ó ð+ðX¨$õ Xôtð8 #õ ô<7Dõr!HóFð4 ñó ðð à?Cò5Øð5Ø$'ð5Ø69ò5ó ð5ð6 ð( Cð (¨H°S©Mò (ó ô(r"   r   )Úloggingr\   rÙ   r  r   Útypingr   r   r   Ú	cloudinitr   r   r	   r
   r   Ú"cloudinit.distros.parsers.hostnamer   Úcloudinit.settingsr   r   Ú	getLoggerr  r?   r  r   rS   r"   r!   ú<module>r.     sT   ðó Û 	Û 	Û Ý ß &Ñ &ç =Õ =Ý ;ß 7à€g×Ñ˜Ó!€ðÐ ôF
ˆW�^‰^õ F
r"   