+
    i>                     X   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
HtHtHt ]P                  ! ]4      tRtRtR.tRt ! R R]P*                  4      t ! R R	]4      t ! R
 R]4      t ! R R4      tR tR tR tRR ltRR ltR t ]t!]]PD                  33.t#R t$R# )    N)atomic_helpernetsourcessubputilziid-dsopennebulanobody
context.shc                   V   a  ] tR t^+t o RtR tR tR tR t]	R 4       t
R
R ltRtV tR	# )DataSourceOpenNebula
OpenNebulac                    \         P                  P                  WW#4       R V n        \        P
                  P                  VP                  R4      V n        R V n        R # )N
opennebula)	r   
DataSource__init__seedospathjoinseed_dirnetwork)selfsys_cfgdistropathss   &&&&H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyr   DataSourceOpenNebula.__init__/   s@    ##D6A	U^^\B    c                    \         P                  P                  V 4      pV: R V P                  : RV P                  : R2# )z [seed=z	][dsmode=])r   r   __str__r   dsmode)r   roots   & r   r    DataSourceOpenNebula.__str__5   s-    !!))$/,0$))T[[IIr   c                   R \         /pRpRp\        pRV P                  9   d   V P                  P                  R4      pV P                  .pVP                  \        4       4       V F  p \        P                  P                  V P                  4      '       d   \        W`P                  VR7      pMTVP                  R4      '       d>   \        P                  ! \        VV P                  R7      p\        P                   ! Wg4      pV'       g   K  Tp\(        P-                  RV4        M	  V'       g   R# VR	,          p	\        P.                  ! W.4      p	V P1                  VP                  R
4      V P                  P                  R4      .4      V n        V P2                  \4        P6                  8X  d   R# W0n        VP                  R4      V n        Wn        VP                  R4      V n        R#   \"         d     EK  \$         d   pThRp?i\        P&                   d    \(        P+                  RT4        EL7i ; i)zinstance-idN	parseuserasuserz/dev)r'   r   z%s was not mountablezfound datasource in %sFmetadataDSMODEr!   network-interfacesuserdataT) DEFAULT_IIDDEFAULT_PARSEUSERds_cfggetr   extendfind_candidate_devsr   r   isdirread_context_disk_dirr   
startswith	functoolspartialr   mount_cbNonContextDiskDirBrokenContextDiskDirMountFailedErrorLOGwarningdebugmergemanydict_determine_dsmoder!   r   DSMODE_DISABLEDr   r   r(   userdata_raw)
r   defaultsresultsr   r%   
candidatescdevpartially_applied_funcexcmds
   &         r   	_get_dataDataSourceOpenNebula._get_data9   s   !;/ &	$++%4Imm_
-/0D:77==//3kk)G __V,, .7->->-(#{{.*
 #mmDIG w		2D95 8  Z / ,,[["DKKOOH$=>
 ;;'111	{{#78#KK
3? % ' 	(( :2D9:s=   +AG12G1	=G11H> H>	H>
HH>#H>=H>c                j    V P                   V P                  9   d   RpMRpV: RV P                  : R2# )z/Return the subplatform metadata source details.zseed-dirzconfig-diskz ())r   r   )r   subplatform_types   & r   _get_subplatform%DataSourceOpenNebula._get_subplatformv   s-    ==DII%),,dii88r   c                :    V P                   e   V P                   # R # N)r   )r   s   &r   network_config#DataSourceOpenNebula.network_config~   s    <<#<<r   c                    Vf%   V P                   \        P                  8X  d   RpMRp\        P                  P	                  WV4      # )NTF)r!   r   DSMODE_NETWORKr   get_hostname)r   fqdn
resolve_ipmetadata_onlys   &&&&r   rV   !DataSourceOpenNebula.get_hostname   s=    {{g444!
"
!!..t:FFr   )r!   r(   r   r   r   rA   N)FFF)__name__
__module____qualname____firstlineno__dsnamer   r    rI   rN   propertyrR   rV   __static_attributes____classdictcell____classdict__s   @r   r   r   +   s@     FJ;z9  G Gr   r   c                       ] tR t^tRtR# )r8    Nr[   r\   r]   r^   ra   rf   r   r   r8   r8          r   r8   c                       ] tR t^tRtR# )r9   rf   Nrg   rf   r   r   r9   r9      rh   r   r9   c                   p   a  ] tR t^t o RR ltR tR tR tR tR t	R t
R	 tR
 tR tRR ltR tRtV tR# )OpenNebulaNetworkNc                   Wn         Vf   \        V4      p\        P                  ! \	        VP                  4       R R7       Uu. uF  pVNK  	  up4      V n        / V n        VP                  4        FR  w  rE\        P                  ! RV4      pV'       g   K&  VP                  ^4      V P                  VP                  4       &   KT  	  R # u upi )Nc                 <    \         P                  ! V ^,          4      # )   )r   natural_sort_key)ks   &r   <lambda>,OpenNebulaNetwork.__init__.<locals>.<lambda>   s    #"6"6qt"<r   )keyz
^(.+)_MAC$)contextget_physical_nics_by_maccollectionsOrderedDictsorteditemsifacescontext_devnamerematchgrouplower)r   rt   r   system_nics_by_macrp   vms   &&&&   r   r   OpenNebulaNetwork.__init__   s    %!9&!A!--  &,,.<A 
  "MMODA*Aq23''!*$$QWWY/ $s   C
c                    R P                  VP                  R4      R,           Uu. uF  p\        \        V^4      4      NK  	  up4      # u upi ).::   NN)r   splitstrint)r   maccs   && r   mac2ipOpenNebulaNetwork.mac2ip   s<    xx#))C.2DE2DQSBZ2DEFFEs   Ac                0   / pV P                  VR R4      P                  4       pVP                  V P                  P	                  RR4      P                  4       4       V'       d   W2R&   V P                  VRR4      P                  4       pV'       d   WBR&   V# )dns DNS	addressessearch_domainsearch)	get_fieldr   r0   rt   r/   )r   devnameserversr   r   s   &&   r   get_nameservers!OpenNebulaNetwork.get_nameservers   s    nnS%,224

4<<##E2.4467'*$sOR@FFH$1!r   c                &    V P                  VR 4      # )mtur   r   r   s   &&r   get_mtuOpenNebulaNetwork.get_mtu   s    ~~c5))r   c                F    V P                  VR V P                  V4      4      # )ip)r   r   )r   r   r   s   &&&r   get_ipOpenNebulaNetwork.get_ip   s    ~~c4S)9::r   c                    . pV P                  VR 4      pV'       d   VP                  V4       V P                  VR4      pV'       d   VP                  V4       V# )ip6ip6_ula)r   append)r   r   
addresses6r   r   s   &&   r   get_ip6OpenNebulaNetwork.get_ip6   sO    
nnS%(c"..i0g&r   c                (    V P                  VR R4      # )ip6_prefix_length64r   r   s   &&r   get_ip6_prefix OpenNebulaNetwork.get_ip6_prefix   s    ~~c#6==r   c                &    V P                  VR 4      # )gatewayr   r   s   &&r   get_gatewayOpenNebulaNetwork.get_gateway   s    ~~c9--r   c                H    V P                  VR V P                  VR4      4      # )ip6_gatewaygateway6r   r   s   &&r   get_gateway6OpenNebulaNetwork.get_gateway6   s'     ~~sJ ?
 	
r   c                (    V P                  VR R4      # )maskz255.255.255.0r   r   s   &&r   get_maskOpenNebulaNetwork.get_mask   s    ~~c6?;;r   c                    V P                   P                  RP                  VV34      P                  4       4      pVR9   d   V# T# )zreturn the field name in context for device dev.

context stores <dev>_<NAME> (example: eth0_DOMAIN).
an empty string for value will return default._)Nr   )rt   r/   r   upper)r   r   namedefaultvals   &&&& r   r   OpenNebulaNetwork.get_field   sL    
 llHH
 eg
 +w44r   c                h   / p^VR&   / VR&   / pV P                   P                  4        EF{  w  r4VP                  4       pV P                  P	                  W44      p/ pRV/VR&   . VR&   V P                  V4      p\        \        P                  ! V4      4      pVR,          P                  V P                  WS4      R,           V,           4       V P                  V4      p	V	'       dG   V P                  V4      p
VR,          P                  V	 Uu. uF  qR,           V
,           NK  	  up4       V P                  V4      pV'       d   WR&   V P                  V4      pV'       d   WR&   V P!                  V4      pV'       d   WR	&   V P#                  V4      pV'       d   WR
&   WbV&   EK~  	  W!R&   V# u upi )r   version	ethernets
macaddressr}   r   /gateway4r   r   r   )rz   ry   r   r{   r/   r   r   r   ipv4_mask_to_net_prefixr   r   r   r   r0   r   r   r   r   )r   netconfr   r   r   c_devdevconfr   prefixr   prefix6ir   r   r   r   s   &               r   gen_confOpenNebulaNetwork.gen_conf   s   	!	))+HC))+C ((,,S6EG !-c2GG $&GK =='D44T:;FK ''E(?#(E(NO e,J--e4$++0:;
1Ww&&
;
 &&u-G&-
# ((/H&.
# ..u5K)4& ,,u%C!$$cN] ,`  )5 <s   F/
)rt   r{   rz   rQ   )r[   r\   r]   r^   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   s   @r   rk   rk      sG     =,G	*;>.
<5 7 7r   rk   c                     . p R FK  p\         P                  ! V4      pVP                  4        V F  pW09  g   K  V P                  V4       K  	  KM  	  V # )z=
Return a list of devices that may contain the context disk.
)zLABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)r   find_devs_withsortr   )combinedfdevsds       r   r1   r1   &  sO     H=""1%		A "  > Or   c                     R RV .# )sudoz-urf   users   &r   switch_user_cmdr   5  s    D$r   c                 .    \         P                  ! R4      # )zDprint the shell environment variables within delimiters to be parsedz
        printf "%s\0" _start_
        [ $0 != 'sh' ] && set -o posix
        set
        [ $0 != 'sh' ] && set +o posix
        printf "%s\0" _start_
        )textwrapdedentrf   r   r   
varprinterr   9  s    ??	 r   c                8   RV P                  4       9   d   \        P                  R4       \        4       RV ,          ,           \        4       ,           R,           p. pVe   \	        V4      pVP                  RR.4       \        P                  ! W2R7      P                  p/ pVP                  R4      R	,          pV^ ,          V^,          r\        R
 \        P                  ! V4       4       4      p	\        R \        P                  ! V4       4       4      p
\        V	P                  4       4      P                  \        V
P                  4       4      4       FB  pV\        9   d   K  V
P                  V4      pVf   K'  WP                  V4      8w  g   K>  WV&   KD  	  V# )a$  run content and return environment variables which changed

WARNING: the special variable _start_ is used to delimit content

a context.sh that defines this variable might break in unexpected
ways

compatible with posix shells such as dash and ash and any shell
which supports `set -o posix`
s   _start_ zYUser defined _start_ variable in context.sh, this may breakcloud-init in unexpected ways.z{
%s

:
} > /dev/null

shz-e)dataz_start_ :rn   NNc              3   F   "   T F  qP                  R ^R7      x  K  	  R# 5i=)maxsplitNr   .0variables   & r   	<genexpr>%parse_shell_config.<locals>.<genexpr>}  s"      8KHsQ''8K   !c              3   F   "   T F  qP                  R ^R7      x  K  	  R# 5ir   r   r   s   & r   r   r     s"      8JHsQ''8Jr   )encoder;   r<   r   r   r0   r   stdoutr   dictshlexsetkeysunionEXCLUDED_VARSr/   )contentr'   bcmdcmdoutputretsectionsbeforeafterpre_envpost_envrs   values   &&           r   parse_shell_configr  F  sc    ))-	
$ 	
''
1	2
,	 	 	 Cf%JJd|YYs&--F C ||M*2.H
 QK!E 8=F8K G  8=E8J H 7<<>"((X]]_)=>-S!++c*:!:H ? Jr   c                D   / p\          FM  p\        P                  P                  W4      p\        P                  P	                  V4      '       g   KI  WSV&   KO  	  V'       g   \        V : RR: 24      h/ pRRR/ /pRV9   d`   Ve    \        P                  ! V4        \        P                  P                  V R4      p	\        P                  ! V	4      p
\        WR	7      pM\        R4      hV'       g   V# WgR&   RpRV9   d   RpM	RV9   d   RpV'       dh   VP#                  V4      P%                  4       pV Uu. uF1  p\'        V4      '       g   K  VP)                  R4      '       d   K/  VNK3  	  upVR,          R&   R F  pW9   g   K  Wn,          VR,          R&    M	  RV9   d   VR,          VR&   MRV9   d   VR,          VR&   RV9   dJ   VP#                  RVP#                  R4      4      pVR8X  d"    \*        P,                  ! VR,          4      VR&   V Uu. uF$  p\4        P6                  ! RV4      '       g   K"  VNK&  	  ppV'       d   \9        Wa4      pVP;                  4       VR&   V#   \         d"   p\        RP                  TR7      4      ThRp?ii ; i  \        P                   d   p\        R
T,          4      ThRp?i\          d   p\        RT,          4      ThRp?ii ; iu upi   \.         d    \0        P3                  R4        EL i ; iu upi )z
read_context_disk_dir(source_dir):
read source_dir and return a tuple with metadata dict and user-data
string populated.  If not a valid dir, raise a NonContextDiskDir
z: zno files foundr+   Nr(   r	   z'configured user '{user}' does not existr   r&   zError processing context.sh: %szError reading context.sh: %szMissing context.shSSH_KEYSSH_PUBLIC_KEY#zpublic-keyszlocal-hostname	USER_DATAUSERDATAUSERDATA_ENCODINGUSER_DATA_ENCODINGbase64z"Failed base64 decoding of userdataz^ETH\d+_IP.*$r*   )SET_HOSTNAMEHOSTNAME	PUBLIC_IP	IP_PUBLICETH0_IP)CONTEXT_DISK_FILESr   r   r   isfiler8   pwdgetpwnamKeyErrorr9   formatr   load_text_filer  r   ProcessExecutionErrorIOErrorr/   
splitlineslenr4   r   b64d	TypeErrorr;   r<   r|   r}   rk   r   )
source_dirr   r'   foundaffnrt   rC   er   r   ssh_key_varlineslinerp   encodingipaddr_keysonets   &&&               r   r3   r3     s    E WW\\*)77>>""I !
 J8H IJJG4R0GuV$	77<<
L9D))$/G(@G   455!J KG	W	$&K(335".
"Tc$iD8LDDU.

M* O<4;JGJ 01 O g%k2
	w	%j1
 W;;-A!B
 xB&3&8&89L&M
# &Gg2BA)F11gKG 1(,$%NO  *=DD# E  	 )) 	&1Q7  	#.!4	*.
2  B@AB Hss   I1 AJ  ;K1K1,K19 K6 LL1J<JJ K.5KK.K.K))K.6 LLc           	          \         P                  ! 4       p\        VP                  4        UUu. uF+  w  r#V P                  P                  V4      '       g   K(  W#3NK-  	  upp4      # u uppi rQ   )r   get_interfaces_by_macr   ry   
networkingis_physical)r   r   r   ns   &   r   ru   ru     sQ    $$&D JJLMLDAF,=,=,I,I!,L!LM Ms   %A'
A'
c                 8    \         P                  ! V \        4      # rQ   )r   list_from_dependsdatasources)dependss   &r   get_datasource_listr7    s    $$Wk::r   )EPOCHREALTIMEEPOCHSECONDSRANDOMLINENOSECONDSr   SRANDOM__vrQ   )%rv   r5   loggingr   r  r|   r   r   	cloudinitr   r   r   r   r   	getLoggerr[   r;   r,   r-   r  r   r   r   	Exceptionr8   r9   rk   r1   r   r   r  r3   ru   DataSourceOpenNebulaNetDEP_FILESYSTEMr5  r7  rf   r   r   <module>rE     s       	 
 	   = =!  "^ 	`G7-- `GF		 		9 	M M` 
DN]@ /  G2245;r   