Ë
    x[hyI  ã            
       ór  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZ ddlmZ ddlmZ ddl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 dd
lmZ ddlm Z m!Z! ddl"m#Z# e#Z$de ge$g dœZ%ee&d<   ddgddœZ' ed«      Z( G d„ d«      Z) ejT                  e+«      Z, G d„ de-«      Z. G d„ de
«      Z/ G d„ de/«      Z0 G d„ de/«      Z1 G d„ d e/«      Z2d!e3d"e!d#e4d$e/fd%„Z5d$ee6   fd&„Z7d$ee6   fd'„Z8d(„ Z9d$e:fd)„Z;d*„ Z<d$ee3e3f   fd+„Z=d,„ Z>d-e/d"e!fd.„Z?d/e3d0ed1ed2e4d$df
d3„Z@d4e0fd5e1fd6e2ffZAy)7zGrowpart: Grow partitionsé    N)ÚABCÚabstractmethod)Úsuppress)ÚPath)ÚOptionalÚTuple)Ú	lifecycleÚperformanceÚsubpÚ
temp_utilsÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROSÚDistro)Ú
PER_ALWAYSÚcc_growpart)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetaÚautoú/F)ÚmodeÚdevicesÚignore_growroot_disabledz/cc_growpart_keydatac                   ó   — e Zd ZdZdZdZdZy)ÚRESIZEÚSKIPPEDÚCHANGEDÚNOCHANGEÚFAILEDN)Ú__name__Ú
__module__Ú__qualname__r!   r"   r#   r$   © ó    ú>/usr/lib/python3/dist-packages/cloudinit/config/cc_growpart.pyr    r    /   s   „ Ø€GØ€GØ€HØ�Fr)   r    c                   ó   — e Zd Zy)ÚResizeFailedExceptionN)r%   r&   r'   r(   r)   r*   r,   r,   9   s   „ Ør)   r,   c                   óB   — e Zd Zdefd„Zededefd„«       Zed„ «       Z	y)ÚResizerÚdistroc                 ó   — || _         y ©N)Ú_distro)Úselfr/   s     r*   Ú__init__zResizer.__init__>   s	   € Øˆ�r)   r   Úreturnc                  ó   — y r1   r(   ©r3   r   s     r*   Ú	availablezResizer.availableA   s   € Ø03r)   c                  ó   — y r1   r(   )r3   ÚdiskdevÚpartnumÚpartdevÚfss        r*   ÚresizezResizer.resizeD   s   € Ø58r)   N)
r%   r&   r'   r   r4   r   ÚlistÚboolr8   r>   r(   r)   r*   r.   r.   =   s6   „ ð˜vó ð Ø3 Ð3¨$Ò3ó Ø3àÙ8ó Ù8r)   r.   c                   ó   — e Zd Zdefd„Zd„ Zy)ÚResizeGrowPartr   c                 ó²   — 	 t        j                   ddgddi¬«      j                  }t        j                  d|«      ry	 y# t         j                  $ r Y yw xY w)	NÚgrowpartz--helpÚLANGÚC©Ú
update_envz--update\s+TF)r   ÚstdoutÚreÚsearchÚProcessExecutionError)r3   r   Úouts      r*   r8   zResizeGrowPart.availableI   se   € ð	Ü—)‘)Ø˜XÐ&°F¸C°=ôç‰fð ô �y‰y˜¨Ô-Øð .ð
 øô ×)Ñ)ò 	ØØð	ús   ‚;A  Á AÁAc                 ó4  — t        ||«      }| j                  j                  «       }t        j                  |d¬«      5 }t
        j                  j                  |d«      }d|dœ}	t
        j                  j                  |«      st        j                  |d«       	 t        j                  dd||g|	¬«       	 t        j                  d||g|	¬«       	 d d d «       |t        ||«      fS # t        j                  $ rN}
|
j                  d	k7  r(t        j                  t        d
||«       t!        |
«      |
‚||fcY d }
~
cd d d «       S d }
~
ww xY w# t        j                  $ r-}
t        j                  t        d||«       t!        |
«      |
‚d }
~
ww xY w# 1 sw Y   Œ¾xY w)NT)ÚdirÚ	needs_exerD   rF   )rE   ÚTMPDIRiÀ  z	--dry-runrG   é   z&Failed growpart --dry-run for (%s, %s)zFailed: growpart %s %s)Úget_sizer2   Úget_tmp_exec_pathr   ÚtempdirÚosÚpathÚjoinÚexistsÚmkdirr   rL   Ú	exit_coder   ÚlogexcÚLOGr,   )r3   r:   r;   r<   r=   ÚbeforeÚtmp_dirÚtmpdÚgrowpart_tmpÚmy_envÚes              r*   r>   zResizeGrowPart.resizeU   sj  € Ü˜' 2Ó&ˆð —,‘,×0Ñ0Ó2ˆÜ×Ñ G°tÔ<ð 	6ÀÜŸ7™7Ÿ<™<¨¨jÓ9ˆLØ!¨\Ñ:ˆFÜ—7‘7—>‘> ,Ô/Ü—‘˜ uÔ-ð(Ü—	‘	Ø ¨g°wÐ?Ø%õð6Ü—	‘	˜: w°Ð8ÀVÖL÷-	6ð6 œ ¨"Ó-Ð.Ð.øô# ×-Ñ-ò 	(Ø—;‘; !Ò#Ü—K‘KÜØ@ØØô	ô 0°Ó2¸Ð9Ø Ð'Ô'÷'	6ñ 	6ûð	(ûô ×-Ñ-ò 6Ü—‘œCÐ!9¸7ÀGÔLÜ+¨AÓ.°AÐ5ûð6ú÷/	6ð 	6úsT   ¾AFÂC'Â6EÃ'EÃ::EÄ4EÄ5FÅEÅFÅFÅ(FÆFÆFÆFN©r%   r&   r'   r?   r8   r>   r(   r)   r*   rB   rB   H   s   „ ð
 ó 
ó!/r)   rB   c                   ó"   — e Zd ZdZdefd„Zd„ Zy)ÚResizeGrowFSaÃ  
    Use FreeBSD ``growfs`` service to grow root partition to fill available
    space, optionally adding a swap partition at the end.

    Note that the service file warns us that it uses ``awk(1)``, and as
    such requires ``/usr`` to be present. However, cloud-init is installed
    into ``/usr/local``, so we should be fine.

    We invoke the ``growfs`` with ``service growfs onestart``, so it
    doesn't need to be enabled in ``rc.conf``.
    r   c                 óP   — t         j                  j                  d«      xr |dgk(  S )z'growfs only works on the root partitionz/etc/rc.d/growfsr   )rV   rW   Úisfiler7   s     r*   r8   zResizeGrowFS.available†   s"   € ä�w‰w�~‰~Ð0Ó1ÒF°gÀ#ÀÑ6FÐFr)   c                 óô   — t        ||«      }	 | j                  j                  dd¬«       |t        ||«      fS # t        j                  $ r+}t        j                  t        d«       t        |«      |‚d }~ww xY w)NÚonestartÚgrowfs)ÚactionÚservicezFailed: service growfs onestart)	rS   r2   Úmanage_servicer   rL   r   r\   r]   r,   )r3   r:   r;   r<   r=   r^   rc   s          r*   r>   zResizeGrowFS.resizeŠ   sr   € Ü˜' 2Ó&ˆð	2Ø�L‰L×'Ñ'¨zÀ8Ð'ÔLð
 œ ¨"Ó-Ð.Ð.øô	 ×)Ñ)ò 	2Ü�K‰KœÐ>Ô?Ü'¨Ó*°Ð1ûð	2ús   Ž9 ¹A7Á&A2Á2A7N)r%   r&   r'   Ú__doc__r?   r8   r>   r(   r)   r*   rf   rf   y   s   „ ñ
ðG ó Gó/r)   rf   c                   ó   — e Zd Zdefd„Zd„ Zy)ÚResizeGpartr   c                 ó¸   — 	 t        j                   ddgddiddg¬«      j                  }t        j                  d|«      ry		 y
# t         j                  $ r Y y
w xY w)NÚgpartÚhelprE   rF   r   rR   )rH   Úrcszgpart recover TF)r   ÚstderrrJ   rK   rL   )r3   r   Úerrs      r*   r8   zResizeGpart.available–   sl   € ð	Ü—)‘)Ø˜&Ð!¨v°s¨mÀ!ÀQÀôç‰fð ô �y‰yÐ*¨CÔ0Øð 1ð
 øô ×)Ñ)ò 	ØØð	ús   ‚>A ÁAÁAc                 óÐ  — 	 t        j                   dd|g«       t        ||«      }	 t        j                   ddd||g«       |t        ||«      fS # t         j                  $ r@}|j                  dk7  r't        j                  t
        d|«       t        |«      |‚Y d}~Œƒd}~ww xY w# t         j                  $ r-}t        j                  t
        d||«       t        |«      |‚d}~ww xY w)	a9  
        GPT disks store metadata at the beginning (primary) and at the
        end (secondary) of the disk. When launching an image with a
        larger disk compared to the original image, the secondary copy
        is lost. Thus, the metadata will be marked CORRUPT, and need to
        be recovered.
        rs   Úrecoverr   zFailed: gpart recover %sNr>   z-izFailed: gpart resize -i %s %s)r   rL   r[   r   r\   r]   r,   rS   )r3   r:   r;   r<   r=   rc   r^   s          r*   r>   zResizeGpart.resize¢   sÖ   € ð	6Ü�I‰I�w 	¨7Ð3Ô4ô ˜' 2Ó&ˆð	2Ü�I‰I�w ¨$°¸ÐAÔBð
 œ ¨"Ó-Ð.Ð.øô ×)Ñ)ò 	6Ø�{‰{˜aÒÜ—‘œCÐ!;¸WÔEÜ+¨AÓ.°AÐ5ô  ûð	6ûô ×)Ñ)ò 	2Ü�K‰KœÐ<¸gÀwÔOÜ'¨Ó*°Ð1ûð	2ús.   ‚A §B% ÁB"Á"6BÂB"Â%C%Â8(C Ã C%Nrd   r(   r)   r*   rq   rq   •   s   „ ð
 ó 
ó/r)   rq   r   r/   r   r5   c                 ó6  — d }| dk(  r;t         D ]#  \  }} ||«      }|j                  |¬«      sŒ!|} n |st        d«      ‚|S i }t         D ]
  \  }}	|	||<   Œ | |vrt        d| z  «      ‚ ||    |«      }
|
j                  |¬«      r|
}|st        d| z  «      ‚|S )Nr   )r   zNo resizers availablezunknown resize mode %szmode %s not available)ÚRESIZERSr8   Ú
ValueErrorÚ	TypeError)r   r/   r   Úresize_classÚ_nameÚresizerÚcurÚmmapÚkÚvÚmclasss              r*   Úresizer_factoryr†   »   s×   € Ø€LØˆv‚~Ü&ò 	‰NˆE�7Ù˜&“/ˆCØ�}‰} Wˆ}Õ-Ø"�Ùð		ñ ÜÐ4Ó5Ð5ð" Ðð ˆÜò 	‰DˆAˆqØˆD�ŠGð	ð �tÑÜÐ4°tÑ;Ó<Ð<à��d‘˜FÓ#ˆØ×Ñ GÐÔ,Ø!ˆLáÜÐ4°tÑ;Ó<Ð<àÐr)   c                 ó¦  — d }	 t        j                  | t         j                  «      }t        j                  |dt         j                  «      |rt        j
                  |«       S S # t        $ rE |dk(  r%t        | «      cY |rt        j
                  |«       S S Y |rt        j
                  |«       y y w xY w# |rt        j
                  |«       w w xY w)Nr   Úzfs)rV   ÚopenÚO_RDONLYÚlseekÚSEEK_ENDÚcloseÚFileNotFoundErrorÚget_zfs_size)Úfilenamer=   Úfds      r*   rS   rS   Ù   s¯   € Ø	€Bð	Ü�W‰W�XœrŸ{™{Ó+ˆÜ�x‰x˜˜AœrŸ{™{Ó+ñ Ü�H‰H�R�Lð øô ò Ø�Š;Ü Ó)Ñ)ñ Ü�H‰H�R�Lð ð áÜ�H‰H�R�Lð ðûñ
 Ü�H‰H�R�Lð ús*   „AA% Á%B3Á>B6 ÂB6 Â2B3Â3B6 Â6Cc                 ó  — | j                  d«      d   }	 t        j                  dddd|g«      \  }}t        |j                  «       «      S # t        j                  $ r!}t        j	                  d||«       Y d }~y d }~ww xY w)Nr   r   ÚzpoolÚgetz	-HpovalueÚsizezFailed: zpool get size %s: %s)Úsplitr   rL   r]   ÚdebugÚintÚstrip)Údatasetr“   r•   Ú_rc   s        r*   r�   r�   ç   sv   € Ø�M‰M˜#Ó˜qÑ!€EðÜ—)‘)˜W e¨[¸&À%ÐHÓI‰ˆˆaô ˆt�z‰z‹|ÓÐøô ×%Ñ%ò Ü�	‰	Ð1°5¸!Ô<Üûðús   –A ÁB ÁA;Á;B c                 óp  — | j                  d«      r| d fS t        j                  | «      }|st        d«      ‚|d   }|d   }t        j                  «       }|dk(  rY|sWt        j
                  t        j                  «       «      }|€.t        j                  j                  |«      r|d fS t        d«      ‚||fS )Nú/dev/z,Could not determine device of '%s' % dev_entr   rR   z	/dev/rootz!Unable to find device '/dev/root')
Ú
startswithr   Úget_mount_infor|   Úis_containerÚrootdev_from_cmdlineÚget_cmdlinerV   rW   rY   )ÚdeventÚresultÚdevr=   Ú	containers        r*   Ú
devent2devr§   ñ   s´   € Ø×Ñ˜Ô!Ø�tˆ|Ðä× Ñ  Ó(€FÙÜÐGÓHÐHØ
�‰)€CØ	�‰€Bä×!Ñ!Ó#€Ið ˆkÒ¡)Ü×'Ñ'¬×(8Ñ(8Ó(:Ó;ˆØˆ;Ü�w‰w�~‰~˜cÔ"ð ˜D�yÐ ÜÐ@ÓAÐAØ�ˆ7€Nr)   c                 ó  — t        j                  d«      st        j                  d«       y	 t        j                   dd| g«       t        t         j                  «      5  t        j                   dd	|g«       t        j                  d
| «       	 ddd«       y# t         j                  $ rP}|j
                  dk(  rt        j                  d| «       n t        j                  d|j
                  «       Y d}~yd}~ww xY w# 1 sw Y   yxY w)zŒ
    Check if a device is an encrypted device. blockdev should have
    a /dev/dm-* path whereas partition is something like /dev/sda1.
    Ú
cryptsetupz6cryptsetup not found. Assuming no encrypted partitionsFÚstatusé   z#Determined that %s is not encryptedzZReceived unexpected exit code %s from cryptsetup status. Assuming no encrypted partitions.NÚisLukszDetermined that %s is encryptedT)r   Úwhichr]   r—   rL   r[   Úwarningr   )ÚblockdevÚ	partitionrc   s      r*   Úis_encryptedr±   	  sØ   € ô
 �:‰:�lÔ#Ü�	‰	ÐJÔKØðÜ�	‰	�< ¨8Ð4Ô5ô 
”$×,Ñ,Ó	-ñ Ü�	‰	�< ¨9Ð5Ô6Ü�	‰	Ð3°XÔ>Ø÷ð øô ×%Ñ%ò 	Ø�;‰;˜!ÒÜ�I‰IÐ;¸XÕFä�K‰KðGà—‘ôô
 ûð	ú÷ð ús$   ­B Á0C=ÂC:Â*AC5Ã5C:Ã=Dc                 ó  — ddd| g}t        j                   |«      d   }|j                  d«      st        d|› �«      ‚	 d|j                  d«      d	   j                  d
«      d   › �S # t        $ r}t        d|› d|› d�«      |‚d }~ww xY w)NÚdmsetupÚdepsz--options=devnamer   z1 dependz5Expecting '1 dependencies' from 'dmsetup'. Received: r�   z: (rR   ú)zRan `z$`, but received unexpected stdout: `ú`)r   rž   ÚRuntimeErrorr–   Ú
IndexError)r¯   ÚcommandÚdeprc   s       r*   Úget_underlying_partitionr»   $  s­   € Ø˜&Ð"5°xÐ@€GÜ�y‰y˜Ó! !Ñ$€Cð �>‰>˜*Ô%ÜØCÀCÀ5ÐIó
ð 	
ðØ�s—y‘y Ó'¨Ñ*×0Ñ0°Ó5°aÑ8Ð9Ð:Ð:øÜò ÜØ�G�9Ð@ÀÀÀQÐGó
àð	ûðús   ¿(A( Á(	B	Á1BÂB	c                 óx  — t         j                  «       st        j                  dfS 	 t	        j
                  dt         › �«      5  t         j                  «       5 }t        j                  |«      }ddd«       ddd«       d   }t        j                  |«      }|d   }	 t        j                  ddd	d
| g|¬«       	 t        j                  ddd|t        |«      g«       	 t         j%                  «        t        j*                  d| › d�fS # 1 sw Y   ŒœxY w# 1 sw Y   Œ xY w# t        $ r}t        d«      |‚d}~ww xY w# t        j                  $ r }t         j#                  d|«       Y d}~ŒŽd}~ww xY w# t        $ r t'        j(                  t         d«       Y Œ¦w xY w# 	 t        j                  ddd|t        |«      g«       n6# t        j                  $ r }t         j#                  d|«       Y d}~nd}~ww xY w	 t         j%                  «        w # t        $ r t'        j(                  t         d«       Y w w xY wxY w)záUse 'cryptsetup resize' to resize LUKS volume.

    The loaded keyfile is json formatted with 'key' and 'slot' keys.
    key is base64 encoded. Example:
    {"key":"XFmCwX2FHIQp0LBWaLEMiHIyfxt1SGm16VvUAVledlY=","slot":5}
    zNo encryption keyfile foundzReading NÚkeyÚslotzZCould not load encryption key. This is expected if the volume has been previously resized.r©   z
--key-fileú-r>   )ÚdataÚluksKillSlotz--batch-modez<Failed to kill luks slot after resizing encrypted volume: %sz8Failed to remove keyfile after resizing encrypted volumez'Successfully resized encrypted volume 'ú')ÚKEYDATA_PATHrY   r    r!   r
   ÚTimedr‰   ÚjsonÚloadÚbase64Ú	b64decodeÚ	Exceptionr·   r   ÚstrrL   r]   r®   Úunlinkr   r\   r"   )r¯   r°   ÚfÚkeydatar½   Údecoded_keyr¾   rc   s           r*   Úresize_encryptedrÏ   5  s%  € ô ×ÑÔ Ü—‘Ð =Ð>Ð>ðÜ×ÑØ”|�nÐ%ó
ñ 	#ä×ÑÓð	#à"#Ü—i‘i “lˆG÷	#÷ 	#ð �e‰nˆÜ×&Ñ& sÓ+ˆØ�v‰ˆðÜ�	‰	Ø˜<¨¨h¸ÐAØõ	
ð
	Ü�I‰Ià Ø"Ø"ØÜ˜“Iðôð	Ü×ÑÔ!ô 	�‰Ø
1°(°¸1Ð=ðð ÷S	#ð 	#ú÷ 	#ð 	#ûô ò Üð6ó
ð ð	ûðûô, ×)Ñ)ò 	Ü�K‰KØNØ÷ñ ûð	ûô ò 	Ü�K‰KÜÐOöð	ûð#	Ü�I‰Ià Ø"Ø"ØÜ˜“Iðõøô ×)Ñ)ò 	Ü�K‰KØNØ÷ñ ûð	úð
	Ü×ÑÕ!øÜò 	Ü�K‰KÜÐOöð	ýsË   ¨D" ÁDÁD
Á/DÁ7'D" ÂF Â<#D? Ã E5 Ä
D	ÄDÄDÄD" Ä"	D<Ä+D7Ä7D<Ä?E2ÅE-Å-E2Å5#FÆFÆH9Æ #GÇH9ÇG7ÇG2Ç-H9Ç2G7Ç7H9Ç;HÈH9È#H6È3H9È5H6È6H9c                 ó  — g }	 | j                  ||||«      \  }}||k(  r+|j                  |t        j                  d|›d|›d�f«       |S |�|€9d}	|�|€
d|›d|›d�}	nd|z  }	|j                  |t        j                  |	f«       |S d}	|�|€d|›d|›d|›d	|›�}	nd|›d|›d	|›�}	|j                  |t        j                  |	f«       	 |S # t
        $ r6}
|j                  |t        j                  d
|›d|›d|
›�f«       Y d }
~
|S d }
~
ww xY w)Nzno change necessary (z, rµ   Ú z	changed (z) size, new size is unknownz&changed (%s) size, new size is unknownz) from z to zfailed to resize: disk=z, ptnum=z: )r>   Úappendr    r#   r"   r,   r$   )r€   r£   ÚdiskÚptnumr¯   r=   ÚinfoÚoldÚnewÚmsgrc   s              r*   Ú_call_resizerrÙ   n  s;  € Ø€Dð(
Ø—>‘> $¨¨x¸Ó<‰ˆˆSØ�#Š:Ø�K‰KàÜ—O’OÚ6:ºEÐBðôðL €Kð? ˆ[˜C˜KØˆCØÐ E¡MâÚð‘ð
 ?ÀÑI�Ø�K‰K˜¤§¡°Ð5Ô6ð, €Kð) ˆCØÐ E¡MâÚÚÙð	‘øò 7?ÂÁSÐI�Ø�K‰K˜¤§¡°Ð5Õ6ð €Køô !ò 
Ø�‰àÜ—’Ú=AÂ5É!ÐLð÷	
ð 	
ð €Kûð
ús%   „AC Á;C ÂAC Ã	DÃ+DÄDr€   c           	      ó¶  — t        j                   |«      }g }|�r»|j                  d«      }d }d }	 t        |«      \  }}t        j                  d|«       |dk(  r$t        | t        «      r|t        | |||||«      z  }Œf	 t        j                  |«      }
t        j                  |
j                   «      sEt        j"                  |
j                   «      s&|j	                  |t
        j                  d|z  f«       Œà|j%                  |«      }|rŸ	 t'        |«      }t)        ||«      r_||D �cg c]  }|d   ‘Œ	 c}vr&|j+                  d|«       |j+                  d|«       �ŒFt-        ||«      \  }}|j	                  |||f«       n&|j	                  |t
        j                  d|› d	�f«       �Œ’	 |j3                  |«      \  }}|t        | |||||«      z  }|r�Œ»|S # t        $ r0}	|j	                  |t
        j                  d|	z  f«       Y d }	~	�Œôd }	~	ww xY w# t        $ r3}	|j	                  |t
        j                  d|›d|	›�f«       Y d }	~	�Œ3d }	~	ww xY wc c}w # t.        $ r2}	|j	                  |t
        j0                  d
|› d|	› �f«       Y d }	~	Œæd }	~	ww xY w# t4        t        f$ r3}	|j	                  |t
        j                  d|›d|	›�f«       Y d }	~	�Œ»d }	~	ww xY w)Nr   zunable to convert to device: %szgrowpart found fs=%srˆ   z	stat of 'z
' failed: zdevice '%s' not a block devicezResizing mapped device (z!) skipped as it is not encrypted.zResizing encrypted device (z
) failed: zdevice_part_info()ÚcopyÚpopr§   r|   rÒ   r    r!   r]   r—   Ú
isinstancerf   rÙ   rV   ÚstatÚOSErrorÚS_ISBLKÚst_modeÚS_ISCHRÚget_mapped_devicer»   r±   ÚinsertrÏ   rÉ   r$   Údevice_part_infor}   )r€   r   r/   rÕ   r£   rÓ   rÔ   r¯   r=   rc   ÚstatretÚunderlying_blockdevr°   Úxrª   Úmessages                   r*   Úresize_devicesrê   œ  sà  € ä�i‰i˜Ó €GØ€Dâ
Ø—‘˜Q“ˆØˆØˆð
	Ü% fÓ-‰LˆH�bô 	�	‰	Ð(¨"Ô-ð �Š;œ: g¬|Ô<Ø”M '¨6°4¸ÀÈ"ÓMÑMˆDØð
	Ü—g‘g˜hÓ'ˆGô �|‰|˜GŸO™OÔ,´T·\±\Ø�O‰Oô6
ð �K‰KàÜ—N‘NØ4°xÑ?ðôð à$×6Ñ6°xÓ@ÐÙð%ä4°XÓ>�	ÜÐ 3°YÔ?Ø °tÖ(<°!¨¨1«Ò(<Ñ<ð  Ÿ™ q¨&Ô1ØŸ™ q¨)Ô4Ù Ü&6°xÀÓ&K‘O�F˜GØ—K‘Kà"Ø"Ø#ðõð —K‘Kà"Ü"ŸN™NØ6°x°jð A6ð 6ðôñ$ ð
	Ø ×1Ñ1°(Ó;‰KˆD�%ð 	”˜g v¨t°U¸HÀbÓIÑIˆóU ðX €KøôK ò 	Ø�K‰KàÜ—N‘NØ5¸Ñ9ðôõ ûð	ûô, ò 	Ø�K‰KàÜ—N’NÚ19¹1Ð=ðôõ ûð	üò8 )=øô4 ò Ø—‘àÜŸ™Ø5°h°Z¸zÈ!ÈÐMð÷ñ ûðûô œ:Ð&ò 	Ø�K‰KàÜ—N’NÚ9AÁ1ÐEðôõ ûð	úsx   ±G Á?H ÄI Ä(IÄ4(I ÅA
I Æ+J Ç	HÇ!%HÈHÈ	IÈ(IÉIÉI É	JÉ!(JÊJÊKÊ%(KËKÚnameÚcfgÚcloudÚargsc                 ó’  — d|vr#t         j                  dt        «       t        |d<   |j                  d«      }t	        |t
        «      st         j                  d«       y |j                  dd«      }t        j                  |«      r8|dk7  rt        j                  d|› d�d	d
¬«       t         j                  d|«       y t        j                  |j                  dd«      «      rJt        j                  j                  d«      r+t         j                  d«       t         j                  d«       y t        j                  |ddg«      }t        |«      st         j                  d«       y 	 t!        ||j"                  |¬«      }t)        j*                  d«      5  t-        |||j"                  «      }	d d d «       	D ]I  \  }
}}|t.        j0                  k(  rt         j3                  d|
|«       Œ2t         j                  d|
||«       ŒK y # t$        t&        f$ r(}t         j                  d||«       |dk7  r|‚Y d }~y d }~ww xY w# 1 sw Y   Œ’xY w)NrD   z.No 'growpart' entry in cfg.  Using default: %sz#'growpart' in config was not a dictr   r   Úoffz"Growpart's 'mode' key with value 'rÂ   z22.2zUse 'off' instead.)Ú
deprecatedÚdeprecated_versionÚextra_messagezgrowpart disabled: mode=%sr   Fz/etc/growroot-disabledz0growpart disabled: /etc/growroot-disabled existsz&use ignore_growroot_disabled to ignorer   r   zgrowpart: empty device list)r/   r   z,growpart unable to find resizer for '%s': %szResizing devicesz'%s' resized: %sz'%s' %s: %s)r]   r—   ÚDEFAULT_CONFIGr”   rÝ   Údictr®   r   Úis_falser	   Ú	deprecaterV   rW   rh   Úget_cfg_option_listÚlenr†   r/   r|   r}   r
   rÄ   rê   r    r"   rÕ   )rë   rì   rí   rî   Úmycfgr   r   r€   rc   ÚresizedÚentryrl   rØ   s                r*   Úhandlerý     sç  € Ø˜ÑÜ�	‰	Ø<¼nô	
ô )ˆˆJ‰à�G‰G�JÓ€EÜ�eœTÔ"Ü�‰Ð9Ô:Øà�9‰9�V˜VÓ$€DÜ‡}�}�TÔØ�5Š=Ü×ÑØ?À¸vÀQÐGØ#)Ø2õô
 	�	‰	Ð.°Ô5Øä‡}�}�U—Y‘YÐ9¸5ÓAÔBÜ�7‰7�>‰>Ð2Ô3Ü�I‰IÐHÔIÜ�I‰IÐ>Ô?Øä×&Ñ& u¨i¸#¸Ó?€GÜˆwŒ<Ü�	‰	Ð/Ô0ØðÜ! $¨u¯|©|ÀWÔMˆô 
×	Ñ	Ð-Ó	.ñ AÜ  ¨'°5·<±<Ó@ˆ÷Aà%ò 9Ñˆˆv�sØ”V—^‘^Ò#Ü�H‰HÐ'¨°Õ4ä�I‰I�m U¨F°CÕ8ñ	9øô œ	Ð"ò Ü�	‰	Ð@À$ÈÔJØ�6Š>ØˆGÜûð	ú÷Að Aús$   Å'H ÆH=ÈH:ÈH5È5H:È=IrD   rk   rs   )Bro   rÇ   rÛ   rÅ   ÚloggingrV   Úos.pathrJ   rÞ   Úabcr   r   Ú
contextlibr   Úpathlibr   Útypingr   r   Ú	cloudinitr	   r
   r   r   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr   r   Úcloudinit.settingsr   r   r   Ú__annotations__rô   rÃ   r    Ú	getLoggerr%   r]   rÉ   r,   r.   rB   rf   rq   rÊ   r?   r†   r˜   rS   r�   r§   r@   r±   r»   rÏ   rÙ   rê   rý   r{   r(   r)   r*   ú<module>r     s´  ðò  ã Û Û Û Û 	Û Û 	Û ß #Ý Ý ß "ç DÕ DÝ !Ý #Ý .ß 1Ý )à€	à
Øˆ}ØØ!ñ	€€jó ð ØˆuØ %ñ€ñ Ð*Ó+€÷ñ ð €g×Ñ˜Ó!€ô	˜Iô 	ô9ˆcô 9ô./�Wô ./ôb/�7ô /ô8#/�'ô #/ðL˜#ð  vð ¸ð Àó ð<˜h s™mó ð˜X c™]ó òð0¨ó ò6ð"6¨U°3¸°8©_ó 6òr+ð\q˜Gð q°fó qðh09�ð 09˜6ð 09¨%ð 09°tð 09Àó 09ðh �Ð Øˆ|ÐØˆkÐð�r)   