ó
    x[hda  ã                   óÎ   • S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJr  S SK	J
r
JrJrJrJr  S SKJr  S SKJrJr  \ R(                  " \5      rSr " S S	\
R0                  5      rg)
é    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                   óœ  ^ • \ rS rSrSrSrSrSrSrS\\	S.0r
S	rS
rS rS rS2S jrS\R"                  4S jrS rS rS rS2S jrS rS\S\S\S\4S jrS rS3S jrSS.S jr\S  5       rS!\4U 4S" jjr U 4S# jr!S$\4U 4S% jjr"U 4S& jr#S2U 4S' jjr$S4S( jr%\&S) 5       r'\(SS*.S+\S,\S-\4S. jj5       r)\&S/\S!\*\   4S0 j5       r+S1r,U =r-$ )5ÚDistroé    z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                 ó    • [         R                  R                  XX#5        [        R                  " U5      U l        SU l        SU l        SUS'   g )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   ÚDistro.__init__.   sA   € Ü�‰×Ñ ¨CÔ7ô —’ uÓ-ˆŒØ'ˆÔØ ˆŒØ#ˆˆMÒó    c                 ó   • U R                   $ )zWThe default locale for Alpine Linux is different than
cloud-init's DataSource default.
)r   ©r   s    r"   Ú
get_localeÚDistro.get_locale8   s   € ð ×"Ñ"Ð"r$   Nc                 ó¶   • U(       d  U R                   nU(       d  U R                  nSSSSSU-  SS/n[        R                  " USR	                  U5      S5        g )	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_localeÚDistro.apply_locale>   s^   € ö Ø×(Ñ(ˆFÞØ×(Ñ(ˆFð ØMØØ"Ø˜vÑ%Ø!Øð
ˆô 	�Š˜ §	¡	¨%Ó 0°%Õ8r$   Úpkglistc                 óD   • U R                  5         U R                  SUS9  g )NÚadd)Úpkgs)Úupdate_package_sourcesÚpackage_command)r   r6   s     r"   Úinstall_packagesÚDistro.install_packagesQ   s!   € Ø×#Ñ#Ô%Ø×Ñ˜U¨ÐÒ1r$   c                 óT  • S n U R                  U5      nU(       d  [        S5      nUR                  U5        [        R                  " U[        U5      S5        g ! [         aC    [        R                  " U R                  SS5      nU(       a   Nz[
        R                  S5         g f = f)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_hostnameÚDistro._write_hostnameU   s™   € Øˆð	ð ×+Ñ+¨HÓ5ˆDö Ü Ó#ˆDØ×Ñ˜(Ô#Ü�Š˜¤# d£)¨UÕ3øô ó 
	Ü#'×#;Ò#;Ø—	‘	Ð1°4ó$Ð ö $Ùä—‘ØNôñ ð
	ús   „A Á3B'ÂB'Â&B'c                 óT   • U R                  U R                  5      nU R                  U4$ ©N)Ú_read_hostnameÚhostname_conf_fn)r   Úsys_hostnames     r"   Ú_read_system_hostnameÚDistro._read_system_hostnamek   s)   € Ø×*Ñ*¨4×+@Ñ+@ÓAˆØ×%Ñ% |Ð4Ð4r$   c                 ód   • [        [        R                  " U5      5      nUR                  5         U$ rN   )r   r   Úload_text_fileÚparse)r   rI   rJ   s      r"   r@   ÚDistro._read_hostname_confo   s%   € ÜœD×/Ò/°Ó9Ó:ˆØ�
‰
ŒØˆr$   c                 óx   • S n U R                  U5      nUR                  nU(       d  U$ U$ ! [         a     Nf = frN   )r@   rH   rA   )r   rI   ÚdefaultrH   rJ   s        r"   rO   ÚDistro._read_hostnamet   sH   € Øˆð	Ø×+Ñ+¨HÓ5ˆDØ—}‘}ˆHö ØˆNØˆøô	 ó 	Ùð	ús   „, ¬
9¸9c                 ó   • g)Nz	127.0.1.1© r&   s    r"   Ú_get_localhost_ipÚDistro._get_localhost_ip   s   € Ør$   ÚlayoutÚmodelÚvariantÚoptionsc                 ó  • U(       d"  Sn[         R                  U5        [        U5      e[        R                  R                  U R                  U5      n[        R                  R                  U5      (       d%  SU-  n[         R                  U5        [        U5      eU(       d"  Sn[         R                  U5        [        U5      e[        R                  R                  USU-  5      n[        R                  R                  U5      (       d%  SU-  n[         R                  U5        [        U5      eU(       a  [         R                  S5        U(       a  [         R                  S5        [        R                  " SX/5        g )	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)rD   ÚerrorÚRuntimeErrorÚosÚpathr0   Úkeymap_pathÚisdirÚisfileÚwarningr
   )r   r_   r`   ra   rb   ÚmsgÚkeymap_layout_pathÚkeymap_variant_paths           r"   Ú
set_keymapÚDistro.set_keymap‚   s!  € ÞØ2ˆCÜ�I‰I�cŒNÜ˜sÓ#Ð#ÜŸW™WŸ\™\¨$×*:Ñ*:¸FÓCÐÜ�w‰w�}‰}Ð/×0Ñ0à>Ø$ñ%ð ô �I‰I�cŒNÜ˜sÓ#Ð#ÞØ3ˆCÜ�I‰I�cŒNÜ˜sÓ#Ð#Ü Ÿg™gŸl™lØ ¨wÑ 6ó
Ðô �w‰w�~‰~Ð1×2Ñ2à:Ø%ñ&ð ô �I‰I�cŒNÜ˜sÓ#Ð#ÞÜ�K‰KÐEÔFÞÜ�K‰KÐHÔIä�	Š	�> 6Ð3Õ4r$   c                 óJ   • [         R                  " XR                  U5      S9  g )N)ÚtzÚtz_file)r   Úset_etc_timezoneÚ_find_tz_file)r   rr   s     r"   Úset_timezoneÚDistro.set_timezone¤   s   € Ü× Ò  B×0BÑ0BÀ2Ó0FÓGr$   c                 óÈ  • Uc  / nS/nUR                  S5        U(       a'  [        U[        5      (       a  UR                  U5        O-U(       a&  [        U[        5      (       a  UR	                  U5        U(       a  UR                  U5        US:X  a  UR	                  SS/5        [
        R                  " SU5      nUR	                  U5        [        R                  " USS9  g )	NÚapkz--quietÚupgradez--update-cachez--availablez%s-%sF)Úcapture)ÚappendÚ
isinstancerG   ÚlistÚextendr   Úexpand_package_listr
   )r   ÚcommandÚargsr9   Úcmdr6   s         r"   r;   Ú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                ót   • U R                   R                  SU R                  S/U(       a  [        O[        S9  g )Nzupdate-sourcesÚupdate)Úfreq)r   Úrunr;   r   r   )r   r…   s     r"   r:   ÚDistro.update_package_sourcesÀ   s1   € Ø�‰×ÑØØ× Ñ ØˆJÞ$•¬,ð	 	ò 	
r$   c                 óN   • U R                   (       d	  SS/U l         U R                   $ )z7Allow distro to determine the preferred ntp client listÚchronyÚntp)Ú_preferred_ntp_clientsr&   s    r"   Úpreferred_ntp_clientsÚDistro.preferred_ntp_clientsÈ   s&   € ð ×*×*Ø+3°UÐ*;ˆDÔ'à×*Ñ*Ð*r$   Úreturnc                 ó@  >• [         R                  " U5      (       a  [        R                  SU5        gSU;   a  [        R	                  S5        US	 [
        R                  " S5      (       a  [        TU ]   " U40 UD6$ UR                  SS5      nSS	/nS
SSSSS.nSS0nUR                  S5      nU(       a³  [        U[        5      (       a  UR                  S5      nO/[        U[        5      (       a  [        R                   " SU S3SSS9  U Vs/ s H  oˆR#                  5       PM     nnSR%                  U5      US'   UR                  S5      (       a  UR'                  US   5        U(       aT  U(       aM  U HG  n	[         R(                  " U	5      (       a  M   U R+                  U	5        [        R-                  SX‘5        MI     SU;   a  [        US   5      US'   / SSSS.n
[/        UR1                  5       5       H¢  u  p¼Xµ;   a3  U(       a,  [        U[        5      (       a  UR3                  X[   U/5        M=  Xº;   a=  U(       a6  [        U[        5      (       a!  US:X  a  UR                  S5      X«'   My  XÊU'   M  X¶;   d  M†  U(       d  M�  UR'                  Xk   5        M¤     UR                  S5      (       d  UR                  S5      (       a  UR'                  S5        UR'                  U5        [        R-                  S U5         [
        R
                  " U5        U
S    H2  n[        R-                  S"U5         [
        R
                  " S#X/5        M4     U
S%   (       a  [        TU ]q  XS%   SS&9  U
S'   nU
S(   nSnU R:                  n [         R<                  " U5      nSnURA                  5        H!  nUR                  S*5      nUS+   U:X  d  M  Un  O   U(       aÔ  S,nS,WS-'   S,US.'   S,US/'   S0nUbU  [B        RD                  " U5      [B        RD                  " S15      -
  RF                  n[        U5      US2'   US,:w  a  US3-   nUS4-   nUb  UUS5'   US,:w  a  US3-   nUS6-   nURI                  US*R%                  U5      5      n[        R-                  S7UU5         [         RJ                  " UUS8SS99  g[         R6                  " [        S;UU5        gs  snf ! [
        R4                   a  n[        R	                  S!U5        UeSnAff = f! [
        R4                   a#  n[         R6                  " [        S$X5        UeSnAff = f! [>         a  n[        R	                  S)U5        UeSnAff = f! [L         a#  n[         R6                  " [        S:U5        UeSnAff = f)<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_userrD   rE   rk   r
   ÚwhichÚsuperÚadd_userÚpopÚgetr}   rG   ÚsplitÚdictr	   Ú	deprecateÚstripr0   r|   Úis_groupÚcreate_groupÚdebugÚsortedÚitemsr   ÚProcessExecutionErrorÚlogexcÚ
set_passwdÚ	shadow_fnrU   ÚFileNotFoundErrorÚ
splitlinesr   ÚfromisoformatÚdaysÚreplacer/   rA   )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¸   ÚDistro.add_userÐ   sp  ø€ ô �<Š<˜×ÑÜ�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—g‘g–i©ˆFÐ0ð  #Ÿx™x¨Ó/ˆF�8Ñà�z‰z˜/×*Ñ*Ø—‘˜f _Ñ5Ô6æžVÛ�Ü—}’} U×+Ó+Ø×%Ñ% eÔ,Ü—I‘IÐ@À%ÖNñ  ð �F‹?Ü  u¡Ó.ˆF�5‰Mð ØØØñ	6
Ð"ô ˜vŸ|™|›~Ö.‰HˆCØÓ"¦s¬z¸#¼s×/CÑ/CØ×"Ñ" LÑ$5°sÐ#;Ö<àÓ1ÞÜ˜s¤C×(Ñ(ð ˜(“?Ø69·i±iÀ³nÐ.Ó3à69¨sÓ3ØÕ%¯#¨#Ø×"Ñ" =Ñ#5Ö6ñ /ð& �:‰:Ð&×'Ñ'¨6¯:©:°h×+?Ñ+?Ø×Ñ˜tÔ$ð 	×Ñ˜4Ô ô 	�	‰	Ð" DÔ)ð	Ü�IŠI�kÔ"ð 5Øô
ˆJô �I‰IÐ/°Ô<ðÜ—	’	˜: tÐ8Ö9ñ
ð & h×/ô ‰GÑØ°Ñ:À4ð ñ ð& 0°Ñ=ˆ
Ø-¨jÑ9ˆàˆØ—n‘nˆð	Ü"×1Ò1°+Ó>ˆOð ˆØ#×.Ñ.Ö0ˆDØ!ŸZ™Z¨›_ˆNØ˜aÑ  DÕ(Ø $�Ùñ	 1ö àˆ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ôð �ûð	ûôF !ó 	Ü�K‰KÐ@À+ÔNØˆGûð	ûôb ó Ü—’œCÐ!;¸[ÔIØ�ûðúsf   ÄSÌS Ì=TÎU ÒU0 ÓT	Ó,TÔT	ÔUÔ T>Ô>UÕ
U-ÕU(Õ(U-Õ0
VÕ:VÖVc                 óŒ  >• [         R                  R                  S5      (       a  S[         R                  " S5      ;  a  [        TU ]  U5      $ SSU/n [        R                  " USS/S9u  p4[        R                  " SU5      (       a  g	g! [        R                   a#  n[        R                  " [        S
U5        UeSnAff = f)z<
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)rf   rg   ÚislinkÚreadlinkr·   Úlock_passwdr
   ÚreÚsearchrÄ   r   rÅ   rD   )r   r   rƒ   Ú_outÚerrrÖ   rÞ   s         €r"   rè   ÚDistro.lock_passwdª  s¬   ø€ ô �w‰w�~‰~Ø÷
ñ 
àœRŸ[š[Ð):Ó;Ó;Ü‘7Ñ& tÓ,Ð,à˜˜tÐ$ˆð	ÜŸ)š) C¨a°¨VÑ4‰KˆTÜ�yŠyÐ-¨s×3Ñ3Øð 4øä×)Ñ)ó 	Ü�KŠKœÐEÀtÔLØˆGûð	úó   Á5B ÂCÂ B>Â>Cr   c                 óŒ  >• [         R                  R                  S5      (       a  S[         R                  " S5      ;  a  [        TU ]  U5      $ SSU/n [        R                  " USS/S9u  p4[        R                  " SU5      (       a  g	g! [        R                   a#  n[        R                  " [        S
U5        UeSnAff = f)z=
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)rf   rg   ræ   rç   r·   Úunlock_passwdr
   ré   rê   rÄ   r   rÅ   rD   )r   r   rƒ   Ú_rì   rÖ   rÞ   s         €r"   rð   ÚDistro.unlock_passwdÆ  s¬   ø€ ô �w‰w�~‰~Ø÷
ñ 
àœRŸ[š[Ð):Ó;Ó;Ü‘7Ñ(¨Ó.Ð.à˜˜tÐ$ˆð	Ü—Y’Y˜s¨¨A¨Ñ/‰FˆAÜ�yŠyÐ/°×5Ñ5Øð 6øä×)Ñ)ó 	Ü�KŠKœÐDÀdÔKØˆGûð	úrî   c                 ój  >• [         R                  R                  S5      (       a  S[         R                  " S5      ;  a  [        TU ]  U5      $ S nU R                  n [        R                  " U5      nS nUR                  5        H7  nUR                  S5      nUS   U:X  d  M  [        R                  SU5        Un  O   U(       av  WS   S:w  aV  SUS'   UR                  USR!                  U5      S	5      n[        R                  S
U5         [        R"                  " UUSSS9  g [        R                  SU5        g [        R&                  " [        SU5        g ! [         a  n[        R                  SU5        UeS nAff = f! [$         a#  n[        R&                  " [        SU5        UeS nAff = f)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)rf   rg   ræ   rç   r·   Úexpire_passwdrÇ   r   rU   rÈ   rD   rk   rÉ   r»   rÁ   rÌ   r0   r/   rA   rÅ   )	r   ÚuserrØ   rÙ   rÖ   rÚ   rÛ   rÜ   rÞ   s	           €r"   rö   ÚDistro.expire_passwdä  sŽ  ø€ ô �w‰w�~‰~Ø÷
ñ 
àœRŸ[š[Ð):Ó;Ó;Ü‘7Ñ(¨Ó.Ð.ð ˆØ—n‘nˆð	Ü"×1Ò1°+Ó>ˆOð ˆØ#×.Ñ.Ö0ˆDØ!ŸZ™Z¨›_ˆNØ˜aÑ  DÕ(Ü—	‘	ÐCÀTÔJØ $�Ùñ 1ö ð
 ˜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 ÄF Å
FÅ%E=Å=FÆ
F2ÆF-Æ-F2c                 ó”  >• [         R                  " S5      (       a  [        TU ]  X5      $ SU/nU(       d  / n[        R
                  " U5      (       a  [        R                  SU5        O- [         R                   " U5        [        R                  SU5        [        U5      S:”  al  U He  n[        R                  " U5      (       d  [        R                  SUU5        M7  [         R                   " SXA/5        [        R                  SXA5        Mg     g g ! [         R                   a    [        R                  " [        SU5         N®f = f)	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¿   rD   rk   rE   rÄ   rÅ   Úlenrµ   )r   r   ÚmembersÚgroup_add_cmdÚmemberrÞ   s        €r"   rÀ   ÚDistro.create_group  s	  ø€ ô �:Š:�j×!Ñ!Ü‘7Ñ'¨Ó6Ð6à# TÐ*ˆÞØˆGô �=Š=˜×ÑÜ�K‰KÐBÀDÕIðDÜ—	’	˜-Ô(Ü—‘Ð/°Ô6ô
 ˆw‹<˜!ÓÛ!�Ü—|’| F×+Ñ+Ü—K‘Kð1àØô	ñ ä—	’	˜: vÐ4Ô5Ü—‘Ð8¸&ÖGò "ð øô	 ×-Ñ-ó DÜ—’œCÐ!<¸dÖCðDús   Á,,D Ä0EÅEc                 ó¾   • US/nUS:X  a  US/-  nU$  UR                  [        [        U5      S-  5      5        U$ ! [         a  n[	        SU< S35      UeS nAff = f)Nz-dÚnowrõ   é<   z;power_state[delay] must be 'now' or '+m' (minutes). found 'z'.)r|   rG   ÚintÚ
ValueErrorÚ	TypeError)r   ÚmodeÚdelayÚmessager�   rÖ   s         r"   Úshutdown_commandÚDistro.shutdown_command@  sz   € ð ˜�,ˆð �E‹>à˜�uÑˆGð ˆðØ—‘œs¤3 u£:°¡?Ó3Ô4ð ˆøô ó Ýã&+ð.óð ðûðús   ”&< ¼
AÁAÁAc                  ó   • g)z!
Alpine uses OpenRC, not systemd
Fr\   r\   r$   r"   Úuses_systemdÚDistro.uses_systemdZ  s   € ð
 r$   rä   ÚactionÚserviceÚ
extra_argsc          
      óN  • SS/nSS/n[        U5      US/-   [        U5      US/-   [        U5      SU/-   [        U5      SU/-   [        U5      US/-   [        U5      US/-   [        U5      US/-   [        U5      US	/-   S
.n[        Xq   5      n[        R                  " USUS9$ )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Údelr8   ÚrestartÚstatus)r  r  ÚdisableÚenabler  Úreloadz
try-reloadr  T)r{   rå   )r~   r
   )	r   r  r  rå   r  Úinit_cmdÚ
update_cmdÚcmdsrƒ   s	            r"   Úmanage_serviceÚ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                 óD  • [         R                  R                  U 5      nU R                  S5      (       Ga«  [         R                  " [         R
                  " U 5      R                  5      n[         R                  " [         R
                  " U 5      R                  5      n[         R                  " S5       nU GH  nUR                  R                  S5      (       d  M&  [         R                  " UR                  5      n[
        R                  " UR                  5      (       d  Mm  [         R                  " [         R
                  " UR                  5      R                  5      U:X  d  M±  [         R                  " [         R
                  " UR                  5      R                  5      U:X  d  Mõ  [         R                  R                  UR                  5      n  O   SSS5        UR                  S5      (       a  [        R                  SX5        U$ g! , (       d  f       N== f)zô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)rf   rg   ÚrealpathÚ
startswithÚmajorÚstatÚst_rdevÚminorÚscandirr   ÚlstatÚS_ISBLKÚst_moderD   rÁ   )r  r!  r#  r&  ÚitÚdeventryÚress          r"   Úget_mapped_deviceÚDistro.get_mapped_device}  s`  € ô —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Ó6Ü Ÿhšh x§}¡}Ó5˜ÜŸ<š<¨¯©×4Ó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'   Â5%HÃAHÄ%A HÅ)A HÆ--HÈ
H)rŽ   r   r   r   rN   )NN)Úpoweroffr  N).Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úpip_package_namerh   r.   Únetwork_conf_fnrÇ   ÚNETWORK_FILE_HEADERÚrenderer_configsÚdhclient_lease_directoryÚdhclient_lease_file_regexr   r'   r4   r   ÚPackageListr<   rK   rR   r@   rO   r]   rG   ro   rv   r;   r:   Úpropertyr�   Úboolr¸   rè   rð   rö   rÀ   r	  Ústaticmethodr  Úclassmethodr  r   r.  Ú__static_attributes__Ú__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   )Úloggingrf   ré   r$  r   Útypingr   r   r   Ú	cloudinitr   r   r	   r
   r   Ú"cloudinit.distros.parsers.hostnamer   Úcloudinit.settingsr   r   Ú	getLoggerr1  rD   r7  r   r\   r$   r"   Ú<module>rH     sR   ðó Û 	Û 	Û Ý ß &Ñ &ç =Õ =Ý ;ß 7à×Ò˜Ó!€ðÐ ôF
ˆW�^‰^õ F
r$   