
    W'Fg                       S SK r S SKrS SKrS SKrS SKrS SKr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  SSKJr  SSKJrJrJrJrJrJr  SSKJr  SSKJrJr  SS	KJr  SS
KJr  SSK J!r!J"r"  SSK#J$r$  SSK%J&r&  \RN                  " S5      r( " S S\)5      r*Sq+S r,S r-/ r. " S S\ R^                  5      r0SS jr1S r2SS jr3SS jr4S r5SS jr6SS jr7S r8S r9S r:S r;S  r<S! r=SS" jr>S# r?SS$ jr@S% rAS& rBS' rCS( rDSS) jrES* rFS+ rGS, rHS- rIS. rJS/ rKSS0 jrL    SS1 jrMS2 rNSS3 jrOSS4 jrPS5 rQS6 rRSS7 jrSS8 rTS9 rUSS: jrVS; rWS< rXS= rYS> rZ " S? S@5      r[\[" 5       r\ " SA SB\)5      r] " SC SD\)5      r^SE r_SF r` " SG SH\a5      rb " SI SJ\bSK9rc " SL SM\c5      rdSN re " SO SP\c5      rf " SQ SR\c5      rg " SS ST\c5      rhSU riSV rj " SW SX\c5      rkSY rl " SZ S[\c5      rm " S\ S]5      rnS^ ro " S_ S`\c5      rpSa rq " Sb Sc\c5      rrSd rs " Se Sf\)5      rt " Sg Sh\c5      ruSi rvSj rw " Sk Sl\)5      rxSm ry " Sn So\c5      rz " Sp Sq\c5      r{ " Sr Ss\c5      r| " St Su\c5      r} " Sv Sw\c5      r~ " Sx Sy\c5      r " Sz S{\c5      r " S| S}\c5      r " S~ S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r SS jrSS jrSS jrS rS rS r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\c5      r " S S\c5      r " S S\c5      r " S S\c5      rS rS rS r " S S\c5      r " S S\c5      rSS jrS rS rS rg)    N   )xmlutil)BuildConfig)VirtinstConnection)DeviceDeviceController
DeviceDiskDeviceGraphicsDeviceHostdevDeviceInterface)Guest)logreset_logging)
NodeDevice)OSDB)StoragePoolStorageVolume)UnattendedData)CloudInitDatavirt-viewerc                   &    \ rS rSrS rS rS rSrg)_GlobalState*   c                 .    SU l         S U l        0 U l        g NF)quiet
all_checks_validation_checksselfs    '/usr/share/virt-manager/virtinst/cli.py__init___GlobalState.__init__+   s    
"$    c                      X R                   U'   g N)r   )r    	checknamevals      r!   set_validation_check!_GlobalState.set_validation_check1   s    -0	*r$   c                 l    U R                   b  U R                   $ U R                  R                  US5      $ NT)r   r   get)r    r'   s     r!   get_validation_check!_GlobalState.get_validation_check4   s1    ??&??" &&**9d;;r$   )r   r   r   N)__name__
__module____qualname____firstlineno__r"   r)   r.   __static_attributes__ r$   r!   r   r   *   s    %1<r$   r   c                      [         $ r&   )_globalstater5   r$   r!   get_global_stater8   ?   s    r$   c                      [        5       qg r&   )r   r7   r5   r$   r!   _reset_global_stater:   C   s	    >Lr$   c                   "    \ rS rSrSrSrS rSrg)VirtHelpFormatterO   z
Subclass the default help formatter to allow printing newline characters
in --help output. The way we do this is a huge hack :(

Inspiration: http://groups.google.com/group/comp.lang.python/browse_thread/thread/6df6e6b541a15bc2/09f28e26af0699b1
Nc                    ^ ^^ UUU 4S jn[        T5      S:w  a  [        T5      S:w  a  U" 5       $  TS   nSU;   a  UR                  5       $ U" 5       $ ! [         a
    U" 5       s $ f = f)Nc                  L   > [         R                  R                  " T/T Q70 TD6$ r&   )argparseRawDescriptionHelpFormatter_split_lines)argskwargsr    s   r!   return_default6VirtHelpFormatter._split_lines.<locals>.return_defaultZ   s/    77DD''%' 'r$   r      
)len
splitlines	Exception)r    rC   rD   rE   texts   ```  r!   rB   VirtHelpFormatter._split_linesY   sl    	' v;!D	Q!##	$7Dt|((!## 	$!##	$s   A A A('A(r5   )r0   r1   r2   r3   __doc__oldwraprB   r4   r5   r$   r!   r<   r<   O   s     G$r$   r<   c                     [        S5      nU(       a  [        S5      S-   U-   n[        R                  " X[        US9nUR	                  SS[
        R                  S9  U$ )Nz1See man page for examples and full option syntax.z?Use '--option=?' or '--option help' to see available suboptionsrH   )usagedescriptionformatter_classepilogz	--versionversion)actionrU   )_r@   ArgumentParserr<   add_argumentr   rU   )rQ   rR   introspection_epilogrT   parsers        r!   setupParserr\   j   ss    BCF # $&*+-34 $$)F I + 3 3  5 Mr$   c                  T    [        5         SS Kn U R                  U R                  SS9  g )Nr   z%(message)s)levelformat)r   loggingbasicConfigDEBUG)r`   s    r!   earlyLoggingrc   z   s!    OgmmMBr$   c                   ^ [        5         U[        5       l        [        R                  " 5       n[
        R                  R                  X@S-   5      n[        R                  " 5       (       a  S nS n U(       at  [
        R                  " U[
        R                  5      (       dJ  [
        R                  R                  U5      (       a  [        SU-  5      e [
        R                  " US5        U(       a\  [
        R                  R                  U5      (       a8  [
        R                  " U[
        R                  5      (       d  [        SU-  5      eSnS	U -   S
-   nSn	SS Kn
SS Kn
[+        5         ["        R,                  " U
R.                  5        U(       aT  U
R0                  R3                  USSS5      nUR5                  U
R7                  X5      5        ["        R8                  " U5        U
R;                  [<        R>                  5      nT(       a=  UR-                  U
R.                  5        UR5                  U
R7                  UU5      5        OtU(       d  U(       dd  [        5       R                  (       a  U
R@                  nOU
RB                  nUR-                  U5        UR5                  U
R7                  U	5      5        OS nU(       a  ["        R8                  " U5        U4S jnU[<        l"        ["        RF                  " S[H        RJ                  SR                  [<        RL                  5      5        g ! [         a  n[        SU< SU< 35      S eS nAff = f! [          a$  n["        R$                  " SU5        S n S nAGN1S nAff = f)Nz.logzNo write access to directory %si  zCould not create directory : zNo write access to logfile %szError setting up logfile: %sz%a, %d %b %Y %H:%M:%Sz[%(asctime)s z? %(process)d] %(levelname)s (%(module)s:%(lineno)d) %(message)sz%(levelname)-8s %(message)sr   aei      c           
         > [         R                  " SSR                  [        R                  " XU5      5      5        T(       d  [
        R                  " XU5        g g )NzUncaught exception:
%s )r   debugjoin	tracebackformat_exceptionsys__excepthook__)typr(   tbdebug_stdouts      r!   exception_log#setupLogging.<locals>.exception_log   sF    		+ggi882FG	I s, r$   z)Version %s launched with command line: %s )'r:   r8   r   r   get_app_cache_dirospathrk   r   in_testsuiteaccessW_OKexistsRuntimeErrormakedirsIOErrorrK   r   warningr`   logging.handlersr   setLevelrb   handlersRotatingFileHandlersetFormatter	Formatter
addHandlerStreamHandlerrn   stderrERRORWARN
excepthookrj   r   rU   argv)appnamerr   do_quietcli_appvi_dirlogfilee
dateFormat
fileFormatstreamErrorFormatr`   fileHandlerstreamHandlerr^   rs   s    `             r!   setupLoggingr      s   '113Fggll6V#34G"))FBGG44ww~~f%%"#Dv#MNN:FE*
 GGNN7##		'277++>HII
 )J!G+ /F FJ5OLL&&::T;+  j5	7{#))#**5Mw}}-""7#4#4Z5?$A 	B	##MMELLEu%""7#4#45F#GH}%- #CN II9!!388CHH#57w  :"$*A$/ 059::  2A6s>   1A#M L1 ,A#M 1
M;MMM 
N!N  Nc                     U(       a  U$ [         R                  " SU =(       d    S5        [        U 5      nUR                  [        S 5        [         R                  " SUR
                  5        U$ )NzRequesting libvirt URI %sdefaultzReceived libvirt URI %s)r   rj   r   open_openauth_cburi)r   conns     r!   getConnectionr      sN    II)C,<9>c"DIIlD!II'2Kr$   c                 8   U  H  nUu  p4pVnU[         R                  [         R                  4;   nU(       d  [        R                  " SU5          g[        R
                  " SU5        US-  nU(       a  SS Kn	U	R                  U5      n
O[        U5      n
XS'   M     g)NzNo prompt for auth credtype=%szopenauth_cb prompt=%sre   r   )libvirtVIR_CRED_PASSPHRASEVIR_CRED_NOECHOPROMPTr   errorrj   getpassinput)creds_cbdatacredcredtypeprompt
_challenge
_defresult_resultnoechor   ress              r!   r   r      s    <@9*'++W-J-JL LII6A		)62$//&)C-C R% & r$   c                     [         R                  " SR                  [        R                  " 5       5      5        [         R
                  " U 5        [        R                  " 5       S   b  [         R                  " SSS9  U(       a  [        5         gg)z.
Convenience function when failing in cli app
ri   r   NTexc_info)	r   rj   rk   rl   format_stackr   rn   r   
_fail_exit)msgdo_exits     r!   failr      sY     IIbggi,,./0IIcN
||~a$		"t$ r$   c                     U(       a  [         R                  " U 5        U(       d   [        5       R                  (       a  U(       d  [	        U 5        g g r&   )r   rj   r8   r   print)r   do_forcedo_logs      r!   print_stdoutr     s-    		#')//vc
 8>r$   c                 `    [         R                  " U 5        [        U [        R                  S9  g )N)file)r   rj   r   rn   r   )r   s    r!   print_stderrr     s    IIcN	#CJJr$   c                  0    [         R                  " S5        g Nr   )rn   exitr5   r$   r!   r   r     s    HHQKr$   c                 R    SU R                   R                  < SU R                  < 3$ )Nzvirsh --connect z start )r   r   name)guests    r!   virsh_start_cmdr     s    -2ZZ^^UZZHIr$   c                 t    [        U 5      n[        [        S5      U-  5        [        R                  " S5        g )NzDomain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  %s
otherwise, please restart your installation.r   )r   r   rW   rn   r   )r   virshcmds     r!   install_failr     s;    u%H	 9 	: =E	EF
 HHQKr$   c                 @    U (       a  [         R                  " S5        g g )Nz%--prompt mode is no longer supported.)r   r   )r   s    r!   
set_promptr   '  s    ;< r$   c                     [         R                  " X5      nUR                  (       d  g [        S5      XR                  UR                  S.-  n[
        R                  " U5        g )Nz%(path)s may not be accessible by the hypervisor. You will need to grant the '%(user)s' user search permissions for the following directories: %(dirs)s)rx   userdirs)r	   check_path_searchfixlistrW   r   r   r   )r   rx   
searchdatar   s       r!   r   r   -  sX    --d9J	 . 	/ 
8J8JK	L 
 KKr$   c                     [        5       R                  U5      nU(       a  [        U [        S5      U-  -   5        [        R
                  " SX5        U(       a  [        R                  " U 5        gg)z=
Handle printing a message with an associated --check option
z4 (Use --check %s=off or --check all=off to override)z(Skipping --check %s error condition '%s'N)r8   r.   r   rW   r   rj   r   )r   r'   warn_on_skipdo_checks       r!   _optional_failr   9  se      !66yAHSA + ,.78 9 	: II8C r$   c                      [         R                  " X5        g! [         a  n[        [	        U5      S5         SnAgSnAff = f)z
There's legitimate use cases for creating/cloning VMs with duplicate
MACs, so we do the collision check here but allow it to be skipped
with --check
N
mac_in_use)r   check_mac_in_userK   r   str)r   macaddrr   s      r!   validate_macr   H  s9    -((7 -s1v|,,-s    
A=Ac                    ^ ^^ T R                  5       mU UU4S jnU U4S jnU 4S jnU" 5         U" 5         U" 5         [        T R                  T5        g )Nc                     > T(       d  g[         R                  " T R                  T5      (       d  g[        [	        S5      T-  S5        g)zB
Prompt if disk file already exists and preserve mode is not used
Nz*This will overwrite the existing path '%s'path_exists)r	   path_definitely_existsr   r   rW   )devrx   warn_overwrites   r!   check_path_exists(validate_disk.<locals>.check_path_existsX  s>     004@@:;dB	r$   c                  p   > TR                  5       n U (       d  g[        S5      TU S.-  n[        US5        g)z)
Check if disk is inuse by another guest
Nz:Disk %(path)s is already in use by other guests %(names)s.)rx   namespath_in_use)is_conflict_diskrW   r   )r   r   r   rx   s     r!   check_inuse_conflict+validate_disk.<locals>.check_inuse_conflictd  s;     $$&MNE*+sM*r$   c                  `   > TR                  5       u  pU (       d  U(       a  [        USSS9  ggg)z3
Check if specified size exceeds available storage
	disk_sizeF)r   N)is_size_conflictr   )isfatalerrmsgr   s     r!   check_size_conflict*validate_disk.<locals>.check_size_conflictp  s-     ..066;UC "wr$   )get_source_pathr   r   )r   r   r   r   r   rx   s   ``   @r!   validate_diskr   U  sC     D

+D chh%r$   c                 H   [         R                  " SSR                  U5      5        SR                  U Vs/ s H  n[        R                  " U5      PM     sn5      n[        U SU0-  5        [        R                  " 5       (       a  S/n[        R                  " 5       nU(       a  U$  [        R                  " US   U5        [        R                  " S5        g s  snf ! [         a  n[        SU< SU< 35         S nAN>S nAff = f! [        R                  " S5        f = f)	NzRunning: %sru   commandz	/bin/testr   zError launching re   r   )r   rj   rk   shlexquoter   r   ry   rw   forkexecvprK   r   _exit)messagerC   aargstrchildr   s         r!   _run_consoler    s    IImSXXd^,XXt4t!u{{1~t45FIv../}GGIE
		$q'4  	! 5  4$2334 	s/    C)C 
D)D<D	 DD	 	D!c                     SSU R                   R                  SU R                  /n[        S5      nU R	                  5       (       d  U R                  5       (       a  UR                  S5        [        X!5      $ )Nr   	--connectz--waitz.Running graphical console command: %(command)sz--attach)r   r   r   rW   has_glhas_listen_noneappendr  r   rC   r   s      r!   _gfx_consoler    sa    ejj"D @AG ||~~..00J&&r$   c                 x    SSU R                   R                  SU R                  /n[        S5      n[	        X!5      $ )Nvirshr  consolez)Running text console command: %(command)s)r   r   r   rW   r  r  s      r!   _txt_consoler    s:    uzz#D ;<G&&r$   c                      SS K n [        5       R                  =(       d    [        R                  " 5       nU R
                  R                  US9$ )Nr   )r   )virtinst.progressr8   r   r   ry   progress
make_meter)virtinstr   s     r!   	get_meterr    s;    %%?)=)=)?E''e'44r$   c                 x    [         R                  nU(       a  U[         R                  -  nU R                  U5      $ r&   )r   VIR_DOMAIN_XML_SECUREVIR_DOMAIN_XML_INACTIVEXMLDesc)domaininactiveflagss      r!   get_xmldescr    s/    ))E000>>%  r$   c                     [        U5        SnSn[        [        R                  " X15      5      n S n U R                  U5      nWR!                  5       S   nS n[#        U [%        U5      S	9n	U[        R&                  :w  a  U	n[#        U [%        USS
9S	9n	XYU4$ ! [         a    Sn Nf = f! [         aT    [        R                  " SSS9  U(       a  U R                  [        U5      5      n NU(       a  U R                  U5      n Ne f = f! [        R                   a.  n[        [        S5      U[        U5      S.-  5         S nAGNS nAff = f)NTFz7[a-fA-F0-9]{8}[-]([a-fA-F0-9]{4}[-]){3}[a-fA-F0-9]{12}$zError looking up domain by namer   z-Could not find domain '%(domain)s': %(error)s)r  r   r   parsexml)r  )int
ValueErrorboolrematchlookupByNamerK   r   rj   
lookupByIDlookupByUUIDStringr   libvirtErrorr   rW   r   infor   r  VIR_DOMAIN_SHUTOFF)
r   domstrisintuuidreisuuidr  r   stateactive_xmlobjinactive_xmlobjs
             r!   get_domain_and_guestr0    sM   F GF"((6*+F
	&&v.F  KKM!EMD;v+>?O***'$Vd;= ]33C    	II7$GV5008	  Q>?!a&C  	 	sR   B D B+ B('B(+A D	+D -D	D D		D E #E		Ec                 <    [        S5      U US.-  n[        U5        g )Nz7Cannot use %(option1)s and %(option2)s at the same time)option1option2)rW   r   )r2  r3  r   s      r!   fail_conflictingr4    s)     E
FJ C 	Ir$   c                  P    [         [        [        [        [        [
        [        /-   $ r&   )VIRT_PARSERSParserCheckParserLocationParserUnattendedParserInstallParserCloudInitParserOSVariantr5   r$   r!   _get_completer_parsersr=    s"    ;m_  r$   c                    / n[        5        H`  nUS   R                  UR                  :X  d  M"  [        UR                  S S9 H%  nUR                  UR                  5       S-   5        M'     Mb     U R                  S5      nU HA  nUR                  S5      nUS:  d  M  US US-    U;   d  M*  UR                  US US-    5        MC     U$ )NrV   c                 "    U R                  5       $ r&   )nonregex_cliname)ps    r!   <lambda>'_virtparser_completer.<locals>.<lambda>  s    0B0B0Dr$   key=,r   r   )
r=  destcli_arg_namesorted	_virtargsr  r@  splitfindremove)prefixrD   sub_optionsparserclassvirtargentered_optionsoptionposs           r!   _virtparser_completerrV    s    K-/(  K$<$<<!+"7"7&DF""7#;#;#=#CDF 0 ll3'O!kk#7via(K7via01 " r$   c                 \    US:X  a  gUR                  SS5      S   nU R                  U5      $ )a;  
:param suboption: The virtarg.cliname we are checking for a match
:param current_input: The user typed string we are checking against.
    So if the user types '--disk path=foo,dev<TAB>',
    current_input=='path=foo,dev'

For debugging here, 'export _ARC_DEBUG=1'. Now exceptions/printing
will be shown on stderr
ri   TrG  r   r   )rsplit
startswith)	suboptioncurrent_inputcurrent_options      r!   _completer_validatorr]    s9      #))#q1"5N//r$   c                 X   S[         R                  ;  a  g SS KnSS Kn[	        5        Vs/ s H  o3R                  5       PM     nnU R                   H)  nUR                   H  nXd;   d  M
  [        Ul	          M'     M+     S[        0n[        R                  " 5       (       a6  SS Kn " S SUR                  5      n	U	" 5       US'   [        R                   US'   [         R"                  n
[        R                  " 5       (       a  S nUn
UR$                  R&                  R)                  [         S	U
5          UR*                  " U 40 UD6   S S S 5        g s  snf ! [,         a:    [        R                  " 5       (       a  US   R/                  5       n[1        U5        e f = f! , (       d  f       g = f)
N_ARGCOMPLETEr   	validatorc                   (   ^  \ rS rSrU 4S jrSrU =r$ )autocomplete.<locals>.MyStreami,  c                 r   > [        U5      [        L a  UR                  S5      n[        TU ]  " U/UQ70 UD6$ )Nzutf-8)typebytesdecodesuperwrite)r    r   rC   rD   	__class__s       r!   rh  $autocomplete.<locals>.MyStream.write0  s6    9%**W-Cw}S:4:6::r$   r5   )r0   r1   r2   r3   rh  r4   __classcell__ri  s   @r!   MyStreamrb  ,  s    ; ;r$   rm  output_streamexit_methodc                  "    [         R                  $ r&   )rn   r   )rC   rD   s     r!   fake_fdopen_cb$autocomplete.<locals>.fake_fdopen_cb;  s    ::r$   fdopen)rw   environargcompleteunittest.mockr=  cli_flag_name_actionsoption_stringsrV  	completerr]  r   ry   ioStringIOrn   r   rs  mockpatchobjectautocomplete
SystemExitgetvaluer   )r[   ru  unittestpclassparsernamesrV   optrD   r{  rm  fake_fdopenrq  outputs                r!   r  r    sk   RZZ' *+-+ /5'')+  - //((C!#8  ) " /0F	;r{{ 	; #+* #} ))K	$				#	#B+	>	$$V6v6 
?	>?-D  	##%%099;f		 
?	>s$   E0F2EAFF
F)c                 |    US:X  a  U R                  SSS[        S5      S9  g U R                  SS[        S5      S9  g )Nzvirt-xmlz-cr  URIz&Connect to hypervisor with libvirt URI)metavarhelp)rY   rW   )r[   invokers     r!   add_connect_optionr  M  sP    *D+u?@ 	 	B 	K?@ 	 	Br$   c           	      L   U(       a@  U R                  SSS[        R                  S9  U R                  SSS[        R                  S9  U(       a6  U R                  SS[        S5      S	9  U R                  S
SSS[        S5      S9  U(       a  U R                  SS[        S5      S9  U(       a  U R                  SS[        S5      S9  U(       a^  SS[        S5      S.nU(       a  SUS'   SUS'   OSUS'   U R                   " S-0 UD6  U(       a  U R                  SS[        R                  S9  U(       a  U R                  S SS![        S"5      S#9  U(       a  U R                  S$S%[        S&5      S9  U R                  S'S(S[        S)5      S9  U R                  S*S+S[        S,5      S9  g ).Nz--prompt
store_trueFrV   r   r  z--forcez--autoconsoler   zlConfigure guest console auto connect. Example:
--autoconsole text
--autoconsole graphical
--autoconsole none)r   r  z--noautoconsoleautoconsolestore_constnonez7Don't automatically try to connect to the guest console)rH  rV   constr  z
--norebootz*Don't boot guest after completing install.rV   r  z	--replacezCDon't check name collision, overwrite any guest with the same name.xmlonlyz<Print the generated domain XML rather than create the guest.)rH  r   r  ?nargsallr  rV   z--print-stepxmlstep)rH  r  z	--dry-rundryzKRun through install process, but do not create devices or define the guest.rV   rH  r  z--checkr  zUEnable or disable validation checks. Example:
--check path_in_use=off
--check all=offz-qz--quietzSuppress non-error outputz-dz--debugzPrint debugging information)z--print-xml)rY   r@   SUPPRESSrW   )	grpr   replaceprintxml	printstepnorebootdryrunnoautoconsoleprint_kwargss	            r!   add_misc_optionsr  V  s    L %H,=,= 	 	?< %H,=,= 	 	? ) ( ) 	 	*
 	* LM 	 	O lJK 	 	M \ ) * 	 	+   
 $'L!$)L!%1L"7,7 ^)&&  ( \ D E 	 	F 8 % & 	 	' T9\56  8T9\78  :r$   c                 `    [         R                  5         U R                  SS[        S5      S9  g )Nz
--metadatar  zConfigure guest metadata. Ex:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"r  )ParserMetadataregisterrY   rW   r  s    r!   add_metadata_optionr    s3    \( > ?  @r$   c                     [         R                  5         U R                  SS[        S5      S9  U(       a&  U R                  SS[        S[
        R                  S9  g g )	Nz--memoryr  zeConfigure guest memory allocation. Ex:
--memory 1024 (in MiB)
--memory memory=1024,currentMemory=512
r  z-rz--ram	oldmemory)rd  rH  r  )ParserMemoryr  rY   rW   r  r@   r  )r  
backcompats     r!   add_memory_optionr    s`    Z : ;  < wS{"" 	 	$ r$   c                 b   [         R                  5         [        R                  5         U R                  SS[	        S5      S9  SnU(       a  SnU R                  SS[	        S5      U-   S9  U(       a>  U R                  S	S
[
        R                  S9  U R                  S[
        R                  S9  g g )Nz--vcpusr  zNumber of vCPUs to configure for your guest. Ex:
--vcpus 5
--vcpus 5,maxvcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2r  z--cpu host-modelz--cpu host-model,clearxml=yesz--cpuzICPU model and features. Ex:
--cpu coreduo,+x2apic
--cpu host-passthrough
z--check-cpur  z--cpusetr  )	ParserCPUr  
ParserVCPUrY   rW   r@   r  )r  r  editexampleextramsgs       r!   vcpu_cli_optionsr    s    Yx 5 6  7 "H2WX * +-56  7
 |&// 	 	1(*;*;< r$   c                 `    [         R                  5         U R                  SS[        S5      S9  g )Nz
--graphicsr  zoConfigure guest display settings. Ex:
--graphics spice
--graphics vnc,port=5901,listen=0.0.0.0
--graphics none
r  )ParserGraphicsr  rY   rW   devgs    r!   add_gfx_optionr    s2    l8 ! "  #r$   c                 b    [         R                  5         U R                  SSS[        S5      S9  g )Nz-wz	--networkr  zConfigure a guest network interface. Ex:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network helpr  )ParserNetworkr  rY   rW   r  s    r!   add_net_optionr    s4    dK     r$   c                    [         R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [
        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  S	S[        S
5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  U R                  SSS[        R                  S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         S[        S5      S.nU(       a  SUS'   U R                  " S50 UD6  U(       a   U R                  SSS[        R                  S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [         R                  5         U R                  SS[        S 5      S9  ["        R                  5         U R                  S!S[        S"5      S9  [$        R                  5         U R                  S#S[        S$5      S9  [&        R                  5         U R                  S%S[        S&5      S9  [(        R                  5         U R                  S'S[        S(5      S9  [*        R                  5         U R                  S)S[        S*5      S9  [,        R                  5         U R                  S+S[        S,5      S9  [.        R                  5         U R                  S-S[        S.5      S9  [0        R                  5         U R                  S/S[        S05      S9  [2        R                  5         U R                  S1S[        S25      S9  [4        R                  5         U R                  S3S[        S45      S9  g )6Nz--controllerr  zxConfigure a guest controller device. Ex:
--controller type=usb,model=qemu-xhci
--controller type=scsi,model=virtio-scsi
r  z--inputzKConfigure a guest input device. Ex:
--input tablet
--input keyboard,bus=usbz--serialzConfigure a guest serial devicez
--parallelz!Configure a guest parallel devicez	--channelz'Configure a guest communication channelz	--consolez>Configure a text console connection between the guest and hostz	--hostdevzGConfigure physical USB/PCI/etc host devices to be shared with the guestz--host-devicehostdevr  z--filesystemz{Pass host directory to the guest. Ex: 
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=templatez&Configure guest sound device emulationr  r  z	--soundhwsoundz--audioz.Configure host audio backend for sound devicesz
--watchdogz!Configure a guest watchdog devicez--videozConfigure guest video hardware.z--smartcardzDConfigure a guest smartcard device. Ex:
--smartcard mode=passthroughz
--redirdevzYConfigure a guest redirection device. Ex:
--redirdev usb,type=tcp,server=192.168.1.1:4000z--memballoonzBConfigure a guest memballoon device. Ex:
--memballoon model=virtioz--tpmz0Configure a guest TPM device. Ex:
--tpm /dev/tpmz--rngz4Configure a guest RNG device. Ex:
--rng /dev/urandomz--panicz3Configure a guest panic device. Ex:
--panic defaultz--shmemz?Configure a guest shared memory device. Ex:
--shmem name=shmem0z--memdevzCConfigure a guest memory device. Ex:
--memdev dimm,target.size=1024z--vsockzMConfigure guest vsock sockets. Ex:
--vsock cid.auto=yes
--vsock cid.address=7z--iommuzDConfigure an IOMMU device. Ex:
--iommu model=intel,driver.aw_bits=48)z--sound)ParserControllerr  rY   rW   ParserInputParserSerialParserParallelParserChannelParserConsoleParserHostdevr@   r  ParserFilesystemParserSoundParserAudioParserWatchdogParserVideoParserSmartcardParserRedirParserMemballoon	ParserTPM	ParserRNGParserPanicParserShMemParserMemdevParserVsockParserIommu)r  sound_back_compatsound_kwargss      r!   add_device_optionsr    s   nX < =  > i * +  , j<=  ?l8>?  Ak(DE  Gk( 0 1  2 k( 9 :  ; 	ohY!**  , nX < =  >
  :;L  #W0<0+hW"" 	 	$ iKL  N l8>?  Ai<=  ?mH : ;  < l8 M N  O nX 7 8  9 gh , -  . gh 0 1  2 i - .  / i 1 2  3 j < =  > i 3 4  5 i C D  Er$   c                    [         R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SSS[        S5      S9  [
        R                  5         U R                  SS[        S	5      S9  [        R                  5         U R                  S
S[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  [         R                  5         U R                  SS[        S5      S9  ["        R                  5         U R                  S S[        S!5      S9  [$        R                  5         U R                  S"S#S[        S$5      S9  g )%Nz--iothreadsr  z7Set domain <iothreads> and <iothreadids> configuration.r  z
--seclabelz
--securityz"Set domain seclabel configuration.z	--keywrapzFSet guest to perform the S390 cryptographic key management operations.z	--cputunez+Tune CPU parameters for the domain process.z
--numatunez(Tune NUMA policy for the domain process.z	--memtunez*Tune memory policy for the domain process.z--blkiotunez)Tune blkio policy for the domain process.z--memorybackingzRSet memory backing policy for the domain process. Ex:
--memorybacking hugepages=onz
--featureszQSet domain <features> XML. Ex:
--features acpi=off
--features apic=on,apic.eoi=onz--clockzKSet domain <clock> XML. Ex:
--clock offset=localtime,rtc_tickpolicy=catchupz--pmz&Configure VM power management featuresz--eventsz(Configure VM lifecycle management policyz
--resourcez,Configure VM resource partitioning (cgroups)z	--sysinfoznConfigure SMBIOS System Information. Ex:
--sysinfo host
--sysinfo bios.vendor=MyVendor,bios.version=1.2.3,...
z--qemu-commandlinez}Pass arguments directly to the QEMU emulator. Ex:
--qemu-commandline='-display gtk,gl=on'
--qemu-commandline env=DISPLAY=:0.1z--launchSecurityz--launchsecurityzSConfigure VM launch security (e.g. SEV memory encryption). Ex:
--launchSecurity sev)ParserIOThreadsr  rY   rW   ParserSeclabelParserKeyWrapParserCputuneParserNumatuneParserMemtuneParserBlkiotuneParserMemoryBackingParserFeaturesParserClockParserPMParserEventsParserResourceParserSysinfoParserQemuCLIParserLaunchSecurity)gengs    r!   add_guest_xml_optionsr  ?  s   mHHI  K lL34  6 k( , -  . k(<=  ? l89:  < k(;<  > mH:;  =   "' . /  0 l8 0 1  2
 i A B  C fX78  : j9:  < l8=>  @ k( I J  K
 *8 5 6  7
 !!#(*<X & '  (r$   c                     [         R                  5         U R                  SS[        S5      S9  [        R                  5         U R                  SS[        S5      S9  g )Nz--bootr  zbConfigure guest boot settings. Ex:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (for containers)r  z--idmapz]Enable user namespace for LXC container. Ex:
--idmap uid.start=0,uid.target=1000,uid.count=10)
ParserBootr  rY   rW   ParserIdmap)insgs    r!   add_boot_optionsr    sg    hx 9 :  ;
 i B C  Dr$   c                     [         R                  5         SnU(       a  US-  nU R                  SS[        S5      U-   S9  g )Nri   z
--disk cache=  (unset cache)z--diskr  zSpecify storage with various options. Ex.
--disk size=10 (new 10GiB image in default location)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?r  )
ParserDiskr  rY   rW   )stogr  editmsgs      r!   add_disk_optionr    sO    G33hx   %	%  &r$   c                     U R                  [        S5      5      nU(       a  [        S5      nO[        S5      nUS-  nU[        S5      -  nUR                  SSUS9  U$ )	Nz
OS optionsz$The OS being installed in the guest.zThe OS installed in the guest.rH   zThis is used for deciding optimal defaults like VirtIO.
Example values: fedora29, rhel7.0, win10, ...
Use '--osinfo list' to see a full list.z--os-variantz--osinfor  )add_argument_grouprW   rY   )r[   virtinstallosgr   s       r!   add_os_variant_optionr    sj    

#
#AlO
4C67014KC1 7 8 8C ^Zc:Jr$   c                 b    [         R                  5         U R                  SS/ [        S5      S9  g )Nz--xmlr  zPerform raw XML XPath options on the final XML. Example:
--xml ./cpu/@mode=host-passthrough
--xml ./devices/disk[2]/serial=new-serial
--xml xpath.delete=./clockr  )	ParserXMLr  rY   rW   r  s    r!   add_xml_optionr    s4    WXr 0 1  2r$   c                 ^    / SQn/ SQnU =(       d    SR                  5       n X;   a  gX;   a  gg )N)yyes1trueton)nno0falsefoffri   TF)lower)stvaluesfvaluess      r!   _raw_on_off_convertr    s/    2G3G	
bA|	
r$   c                 ^    Uc  g [        U5      nUb  U$ [        [        S5      SU 0-  5        g )Nz%(key)s must be 'yes' or 'no'rE  )r  r   rW   )rE  r(   s     r!   _on_off_convertr    s5    
{
c
"C

*	+ucl	:;r$   c                   0    \ rS rSrSrS rS rS rS rSr	g)	_SuboptCheckerClassi  zF
Used by the test suite to ensure we actually test all cli suboptions
c                 @    [        5       U l        [        5       U l        g r&   )set_all_seenr   s    r!   r"   _SuboptCheckerClass.__init__  s    E	U
r$   c                 :    U R                   R                  U5        g r&   )r  addr    r   s     r!   add_all_SuboptCheckerClass.add_all  s    		dr$   c                 :    U R                   R                  U5        g r&   )r  r  r  s     r!   add_seen_SuboptCheckerClass.add_seen  s    

tr$   c                 4    U R                   U R                  -
  $ r&   r  r  r   s    r!   
get_unseen_SuboptCheckerClass.get_unseen  s    yy4::%%r$   r&  N)
r0   r1   r2   r3   rN   r"   r   r#  r'  r4   r5   r$   r!   r  r    s    &r$   r  c                   @    \ rS rSrSr   S
S jrS rS rS rS r	S	r
g)_VirtCLIArgumentStatici  a  
Helper class to hold all of the static data we need for knowing
how to parse a cli subargument, like --disk path=, or --network mac=.

@cliname: The command line option name, 'path' for path=FOO
@propname: The virtinst API attribute name the cliargument maps to.
@cb: Rather than set a virtinst object property directly, use
    this callback instead. It should have the signature:
    cb(parser, inst, val, virtarg)

@ignore_default: If the value passed on the cli is 'default', don't
    do anything.
@can_comma: If True, this option is expected to have embedded commas.
    After the parser sees this option, it will iterate over the
    option string until it finds another known argument name:
    everything prior to that argument name is considered part of
    the value of this option, '=' included. Should be used sparingly.
@is_onoff: The value expected on the cli is on/off or yes/no, convert
    it to true/false.
@lookup_cb: If specified, use this function for performing match
    lookups.
@find_inst_cb: If specified, this can be used to return a different
    'inst' to check and set attributes against. For example,
    DeviceDisk has multiple seclabel children, this provides a hook
    to lookup the specified child object.
Nc
                     Xl         X l        X@l        XPl        X`l        Xpl        Xl        Xl        X0l        / U l	        U R                  (       d'  U R                  (       d  [        R                  " S5      eU R                  (       d3  U R                  S:X  a#  [        R                  " SU R                   -  5      eU R                  S:X  a  S U l        [        R                  U R                  U R                   5      5        g )Nz!propname or cb must be specified.r   a  cliname=%s propname is None but lookup_cb is not specified. Even if a 'cb' is passed, 'propname' is still used for device lookup for virt-xml --edit.

If cb is just a converter function for a single propname, then set both propname and cb. If this cliname is truly not backed by a single propname, set lookup_cb=None or better yet implement a lookup_cb. This message is here to ensure propname isn't omitted without understanding the distinction.)clinamepropnamecb	can_commaignore_defaultis_onoff	lookup_cbfind_inst_cb_parent_cliname_aliasesr   DevError_SuboptCheckerr   _testsuite_argcheck_name)
r    r,  r-  parent_clinamer.  r/  r0  r1  r2  r3  s
             r!   r"   _VirtCLIArgumentStatic.__init__	  s      ", "(-}}TWW""#FGG}}2!5""# &*\\2	3 	3 >>R!DNt<<T\\JKr$   c                 V    U R                   (       d  SU-  $ SU R                   < SU< 3$ )Nzsharedoption %s--ru   )r4  )r    r,  s     r!   r8  /_VirtCLIArgumentStatic._testsuite_argcheck_name+  s,    ##$w.. $ 00'::r$   c                 ~    Xl         U R                    H'  n[        R                  U R                  U5      5        M)     g r&   )r5  r7  r   r8  )r    aliasesaliass      r!   set_aliases"_VirtCLIArgumentStatic.set_aliases0  s.    ]]E""4#@#@#GH #r$   c                 :    U R                   R                  SS5      $ )Nz[0-9]*ri   )r,  r  r   s    r!   r@  '_VirtCLIArgumentStatic.nonregex_cliname5  s    ||##Hb11r$   c                 2   U R                   /[        R                  " U R                  5      -    He  nSU;   a+  [        R
                  " SUR                  SS5      -  U5      nOX!:H  nU(       d  MA  [        R                  U R                  U5      5          g   g)z
Return True if the passed user string matches this
VirtCLIArgument. So for an option like --foo bar=X, this
checks if we are the parser for 'bar'
[z^%s$.z\.TF)
r,  r   listifyr5  r!  r"  r  r7  r#  r8  )r    userstrr,  rets       r!   
match_name!_VirtCLIArgumentStatic.match_name8  s|     ~(FFGg~hhvU(CCWM)s''(E(Eg(NO G r$   )
r5  r4  r/  r.  r,  r3  r0  r1  r2  r-  )NNFFr   N)r0   r1   r2   r3   rN   r"   r8  rA  r@  rK  r4   r5   r$   r!   r*  r*    s.    6 %)05,0 LD;
I
2r$   r*  c                   *    \ rS rSrSrS rS rS rSrg)_VirtCLIArgumentiI  zu
A class that combines the static parsing data _VirtCLIArgumentStatic
with actual values passed on the command line.
c                     Uc  [        SU-  5      eUS:X  a  SnUR                  (       a  [        X#5      nX0l        X l        Xl        UR                  U l        UR                  U l        g)zS
Instantiate a VirtCLIArgument with the actual key=val pair
from the command line.
NzOption '%s' had no value set.ri   )r}   r1  r  r(   rE  _virtargr-  r,  )r    rR  rE  r(   s       r!   r"   _VirtCLIArgument.__init__O  sd    
 ; >DEE"9C!#+C  ((r$   c                    U R                   S:X  a  U R                  R                  (       a  gU R                  R                  (       a&  U R                  R                  UX R                   U SS9n U R                  (       a   [
        R                  " X R                  5        U R                  R                  (       a(  U R                  R                  XU R                   U 5        g[
        R                  " X R                  U R                   5        g! [         a,    SU< SU R                  < 3n[
        R                  " U5      Sef = f)z
Process the cli param against the pass inst.

So if we are VirtCLIArgument for --disk device=, and the user
specified --disk device=foo, we were instantiated with
key=device val=foo, so set inst.device = foo
r   NTcan_editzobj=z does not have member=)r(   rP  r0  r3  r-  r   get_prop_pathAttributeErrorr6  r.  set_prop_path)r    r[   instr   s       r!   parse_param_VirtCLIArgument.parse_paramh  s     88y T]]%A%A==%%==--f.2HHd7; . =D	2}}%%dMM:
 ==MMV488T:!!$txx@  	26:DMMJC""3'T1	2s   /1D 6Ec                    U R                   (       dJ  U R                  R                  (       d/  [        [	        S5      [        USS5      U R                  S.-  5      eU R                  R                  (       a.  U R                  R                  UX R                  U SS9nU(       d  gU R                  R                  (       a'  U R                  R                  UX R                  U 5      $ [        R                  " X R                   5      nUR                  UR                  UR                  5       S9n[        R                  " X@R                   U R                  5        [        R                  " X@R                   5      nX5:H  $ )a  
See if the passed value matches our Argument, like via virt-xml

So if this Argument is for --disk device=, and the user
specified virt-xml --edit device=floppy --disk ..., we were
instantiated with key=device val=floppy, so return
'inst.device == floppy'
zRDon't know how to match device type '%(device_type)s' property '%(property_name)s'DEVICE_TYPEri   )device_typeproperty_nameFrS  r  )r-  rP  r2  r}   rW   getattrrE  r3  r(   r   rU  ri  r   get_xmlrW  )r    r[   rX  xmlvalsetterclivals         r!   lookup_param_VirtCLIArgument.lookup_param  s$    }}T]]%<%< 1 2 'mR @"&((,,- - ==%%==--f.2HHd7< . >D ==""==**6+/4A A &&t]];		DLLNCfmmTXX>&&v}}=r$   )rP  r,  rE  r-  r(   N)	r0   r1   r2   r3   rN   r"   rY  rd  r4   r5   r$   r!   rN  rN  I  s    
'2A8" r$   rN  c                     [         R                   " U =(       d    SSS9nSUl        SUl        SUl        / n[	        U5       H4  nSU;   a  UR                  SS5      u  pEOUnSnUR                  XE45        M6     U$ )z
Parse the command string into an ordered list of tuples. So
a string like --disk path=foo,size=5,path=bar will end up like

[("path", "foo"), ("size", "5"), ("path", "bar")]
ri   T)posixrG  rF  r   N)r   
commenters
whitespacewhitespace_splitlistrL  r  )optstrargsplitterrJ  r  r,  r(   s         r!   parse_optstr_tuplesrn    s~     ++fl$7KK K#'K 
CK #:99S!,LGSGC

G>" ! Jr$   c                   ^^
^ [         R                  " 5       n[        U 5      mU4S jm
U
U4S jn[        T5       H*  u  nu  pgUc  U(       d    OUR	                  S5      U4TU'   M,     T(       aY  TR	                  S5      u  pgT
" U5      nU(       d  XsU'   M/  UR
                  (       a  U" Xg/5      n	U	S   nU	S   nXsU'   T(       a  MY  U$ )z
Parse the passed argument string into an OrderedDict WRT
the passed list of VirtCLIArguments and their special handling.

So for --disk path=foo,size=5, optstr is 'path=foo,size=5', and
we return {"path": "foo", "size": "5"}
c                 L   > T H  nUR                  U 5      (       d  M  Us  $    g r&   )rK  )r,  rR  virtargss     r!   _lookup_virtarg._parse_optstr_to_dict.<locals>._lookup_virtarg  s#    G!!'**  r$   c                    > T(       aX  TS   u  pT" U5      (       a   U $ TR                  S5        U S==   SU-   -  ss'   U(       a  U S==   SU-   -  ss'   T(       a  MX  U $ )Nr   r   rG  rF  )pop)commaoptr,  r(   rr  	opttupless      r!   _consume_comma_arg1_parse_optstr_to_dict.<locals>._consume_comma_arg  si    $Q<LGw''  MM!QK3=(KsSy( i r$   r   r   )collectionsOrderedDictrn  	enumerateru  r/  )rl  rq  remove_firstoptdictrx  idxr,  r(   rR  rv  rr  rw  s    `        @@r!   _parse_optstr_to_dictr    s     %%'G#F+I
"  )3^g?,&**1-w7	#  4
  }}Q'!'*"G)7.9HqkG1+C ) Nr$   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )
_InitClassi  zMetaclass for providing the _virtcli_class_init function.

This allows the customisation of class creation. Similar to
'__init_subclass__' (see https://www.python.org/dev/peps/pep-0487/),
but without giving us an explicit dep on python 3.6

c                 ~  > [        U5      S:w  a  [        T	U ]  " U /UQ76 $ UnUu  pEnUR                  S5      n[	        U[
        R                  5      (       a  [        S5      e[        T	U ]	  XXV5      nUR                  5         UR                  (       a(  [        R                  " SU< SUR                  < 35      eU$ )N   _virtcli_class_initz*_virtcli_class_init must be a @classmethodzclass=z leftover aliases=)rI   rg  __new__r-   
isinstancetypesFunctionTyper}   r  r?  r   r6  )
clsrC   rD   dummyr   basesnsinitr    ri  s
            r!   r  _InitClass.__new__   s    t9>7?3...Rvv+,dE..//@B Bws%4  " <<""6:DLLIK Kr$   r5   )r0   r1   r2   r3   rN   r  r4   rk  rl  s   @r!   r  r    s     r$   r  c                       \ rS rSrSrSrSrSrSrSr	/ r
0 rSr\S 5       r\S 5       r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       rSS jrS rS rS rS rS rS rS rS rSr g)VirtCLIParseri  a-  
Parse a compound arg string like --option foo=bar,baz=12. This is
the desired interface to VirtCLIArgument and VirtCLIOptionString.

A command line argument like --disk just extends this interface
and calls add_arg a bunch to register subarguments like path=,
size=, etc. See existing impls examples of how to do all sorts of
crazy stuff.

Class parameters:
@guest_propname: The property name in the Guest class that tracks
    the object type that backs this parser. For example, the --sound
    option maps to DeviceSound, which on the guest class is at
    guest.devices.sound, so guest_propname = "devices.sound"
@remove_first: List of parameters to peel off the front of the
    option string, and store in the optdict. So:
    remove_first=["char_type"] for --serial pty,foo=bar
    maps to {"char_type", "pty", "foo": "bar"}
@stub_none: If the parsed option string is just 'none', make it a no-op.
    This helps us be backwards compatible: for example, --rng none is
    a no-op, but one day we decide to add an rng device by default to
    certain VMs, and --rng none is extended to handle that. --rng none
    can be added to users command lines and it will give the expected
    results regardless of the virt-install version.
@cli_arg_name: The command line argument this maps to, so
    "hostdev" for --hostdev
r   NTc           	          U R                   (       dK  / U l         U R                  (       a3  [        SSSU R                  SSS9nU R                   R	                  U5        U R
                  nUR                  SS5      (       a  Sn[        XU/UQ70 UD6nUR                  U R                  ;   aH  UR                  [        R                  " U R                  R                  UR                  5      5      5        U R                   R	                  U5        g)z
Add a VirtCLIArgument for this class.

:param skip_testsuite_tracking: Special argument handled here. If True,
    if means the argument is shared among multiple cli commands.
    Don't insist that each instance has full testsuite coverage.
clearxmlNTr.  r2  r1  skip_testsuite_trackingF)rK  supports_clearxmlr*  _clearxml_cbr  rI  ru  r,  r?  rA  r   rH  )r  r,  r-  rC   rD   clearxmlvirtargr9  rR  s           r!   add_argVirtCLIParser.add_arg9  s     }}CM$$"8d''4!## $$_5))::/77!N(N !!!??ckk)0P QRW%r$   c                 @    SU R                   R                  SS5      -   $ )Nr<  rW   -)rI  r  r  s    r!   rw  VirtCLIParser.cli_flag_nameU  s     c&&..sC888r$   c                     S n[        SU R                  5       -  5        [        U R                  US9 H  n[        SUR                  -  5        M     [        S5        g)z;
Print out all _param names, triggered via ex. --disk help
c                     SnU R                   S:X  a  SnU R                   R                  S5      (       a  SnU R                   R                  S5      (       a  SnXR                   -   $ )Nri   r  r  zaddress.r  xpath2)r,  rY  )rR  rO  s     r!   _sortkey3VirtCLIParser.print_introspection.<locals>._sortkey^  sY    F*,))*55))'22OO++r$   z%s options:rD  z  %sri   N)r   rw  rJ  rK  r,  )r  r  args      r!   print_introspection!VirtCLIParser.print_introspectionY  sL    
	, 	mc//112#--X6C&3;;&' 7b	r$   c                 f    U R                   (       d  g[        R                  " XR                   5      $ )zu
For the passed obj, return the equivalent of
getattr(obj, cls.guest_propname), but handle '.' in the guest_propname
N)guest_propnamer   rU  )r  objs     r!   lookup_propVirtCLIParser.lookup_propm  s'     !!$$S*<*<==r$   c                 D    U R                  U5      n[        U[        5      $ r&   )r  r  rk  )r  r  rX  s      r!   prop_is_listVirtCLIParser.prop_is_listw  s    s#$%%r$   c                 D    U [         ;  a  [         R                  U 5        g g r&   )r6  r  r  s    r!   r  VirtCLIParser.register|  s     l"$ #r$   c                     g)z-This method also terminates the super() chainNr5   r  s    r!   r  !VirtCLIParser._virtcli_class_init      r$   c                 N    U (       a  U R                   (       a  [        U 5        g g g r&   )r  _add_xpath_args)subclasss    r!   _virtcli_class_init_common(VirtCLIParser._virtcli_class_init_common  s    //H% 08r$   c                     Xl         X l        X0l        U R                   U R                  :X  a  SU l         [	        U R                   U R
                  [        R                  " U R                  5      S S  5      U l	        g )Nri   )
rl  r   editingOPTSTR_EMPTYr  rK  r   rH  r}  r~  )r    rl  r   r  s       r!   r"   VirtCLIParser.__init__  sZ    
;;$+++DK,T[[0A0A B1 EGr$   c                     U R                   (       d  [        SU R                  5       -  5      eUSLa  gUR                  SU R                  ;   S9  g)z6
Callback that handles virt-xml clearxml=yes|no magic
z!Don't know how to clearxml for %sTNrG  )
leave_stub)r  r}   rw  clearrl  r    rX  r(   rR  s       r!   r  VirtCLIParser._clearxml_cb  sQ     ""B#113 4 5 5d? 	

sdkk1
3r$   c                    ^^ UU4S jnU$ )au  
Create a callback used for find_inst_cb command line lookup.

:param cliarg: The cliarg string that is followed by an index.
    Example, for --disk seclabel[0-9]* mapping, this is 'seclabel'
:param list_propname: The property name on the virtinst object that
    this parameter maps too. For the seclabel example, we want
    disk.seclabels, so this value is 'seclabels'
c                   > UnSn[         R                  " ST-  UR                  5      nU(       a  [        UR	                  5       S   5      nU(       au  [        [        R                  " U T5      5      US-   :  aN  [        R                  " U T5      R                  5         [        [        R                  " U T5      5      US-   :  a  MN   [        R                  " U T5      U   $ ! [         a    U(       d   g e f = f)Nr   z%s(\d+)r   )
r!  searchrE  r  groupsrI   r   rU  add_new
IndexError)	rX  r(   rR  rT  ignorenumregcliarglist_propnames	          r!   r.  ,VirtCLIParser._make_find_inst_cb.<locals>.cb  s    FC))J/=C#**,q/*'//mDEqQ))$>FFH '//mDEqQ,,T=A#FF s   
C$ $C97C9r5   )r    r  r  r.  s    `` r!   _make_find_inst_cb VirtCLIParser._make_find_inst_cb  s    	  	r$   c           	          / nU R                    Hg  n[        UR                  5       5       HG  nUR                  U5      (       d  M  [	        UXAR                  U5      5      nUR                  U5        MI     Mi     U$ )za
Convert the passed optdict to a list of instantiated
VirtCLIArguments to actually interact with
)rK  rk  keysrK  rN  ru  r  )r    r~  rJ  virtargstaticrE  arginsts         r!   _optdict_to_param_list$VirtCLIParser._optdict_to_param_list  si    
 !^^MGLLN+ ++C00.}/2KK4DFGJJw'	 , , 
r$   c                     U(       a@  [        [        S5      U R                  5       [        UR	                  5       5      S.-  5        gg)z
Used to check if there were any unprocessed entries in the
optdict after we should have emptied it. Like if the user
passed an invalid argument such as --disk idontexist=foo
z*Unknown %(optionflag)s options: %(string)s)
optionflagstringN)r   rW   rw  rk  r  )r    r~  s     r!   _check_leftover_opts"VirtCLIParser._check_leftover_opts  s@     ?@#'#5#5#7#GLLN355 6 r$   c                     U R                   R                  5       nU R                  U5       H  nUR                  X5        M     U R	                  U5        U$ )zZ
Subclasses can hook into this to do any pre/post processing
of the inst, or self.optdict
)r~  copyr  rY  r  )r    rX  r~  params       r!   _parseVirtCLIParser._parse  sN    
 ,,##%009Ed) : 	!!'*r$   c           	         U R                   (       d  gU R                  (       a  U R                   S:X  a  gSnU R                  (       aT  U(       dM  U R                  U R                  5      nU R                  U R                  5      nU(       a  UR                  5       n/ n U R                  USL =(       a    U R                  =(       d    U5      n[        R                  " U5       H  nU R                  (       d!  [        US5      (       a  UR                  5         U(       d  M>  [        U[        5      (       a  U R                  R                  U5        Mp  U R                  R!                  U5        M     U[        R                  " U5      -  nU$ ! ["         ag  n[$        R&                  " SXR                   SS9  [)        [+        S5      U R-                  5       U R                   [/        U5      S	.-  5         SnAU$ SnAff = f)
ab  
Main entry point. Iterate over self._virtargs, and serialize
self.optdict into 'inst'.

For virt-xml, 'inst' is the virtinst object we are editing,
ex. a DeviceDisk from a parsed Guest object.
For virt-install, 'inst' is None, and we will create a new
inst for self.guest_propname, or edit a singleton object in place
like Guest.features/DomainFeatures
Nr  Fvalidate#Exception parsing inst=%s optstr=%sTr   -Error: %(cli_flag_name)s %(options)s: %(err)srw  optionserr)rl  	stub_noner  r  r   r  newr  r   rH  r  hasattrr  r  r   
add_device	add_childrK   r   rj   r   rW   rw  r   )r    rX  
new_objectrJ  objsr  r   s          r!   parseVirtCLIParser.parse  s~    {{>>dkkV3
t##DJJ/D**4::6Jxxz	=;;tt|:

BdCDt,||Z(@(@LLN!c6**JJ))#.JJ((- - 7??4((C 
  	=II;d<BC&*&8&8&: $CF<< = = 
	=s   C-F 
G?AG::G?c           	      T   / n[         R                  " U R                  U R                  5      5      n U Hz  nU R                  R                  5       nSnU R                  U5       H  nUR                  X5      nUSL d  M  Sn  O   U(       a  UR                  U5        U R                  U5        M|     U$ ! [         ah  n[        R                  " SWU R                  SS9  [        [        S5      U R!                  5       U R                  [#        U5      S.-  5         SnAU$ SnAff = f)z
Given a passed option string, search the guests' child list
for all objects which match the passed options.

Used only by virt-xml --edit lookups
TFr  r   r  r  N)r   rH  r  r   r~  r  r  rd  r  r  rK   r   rj   rl  r   rW   rw  r   )	r    rJ  objlistrX  r~  validr  paramretr   s	            r!   lookup_child_from_option_string-VirtCLIParser.lookup_child_from_option_string  s    //$"2"24::">?	=,,++-!88AE$11$=H5( %	 B
 JJt$))'2  $ 
  	=II;d<BC&*&8&8&: $CF<< = = 
	=s   A	B5  3B5 5
D'?AD""D'c                     g)zDo nothing callbackNr5   r  s       r!   noset_cbVirtCLIParser.noset_cb8  r  r$   )r  r   r~  rl  )NN)!r0   r1   r2   r3   rN   r  r  r}  r  rI  rK  r?  r  classmethodr  rw  r  r  r  r  r  staticmethodr  r"   r  r  r  r  r  r  r  r  r4   r5   r$   r!   r  r    s    6 LNLILIG& &6 9 9  & > > & & % %
 < < & &
G4*8	6
,\>"r$   r  )	metaclassc                   D   ^  \ rS rSrSrSrSr\S 5       rU 4S jr	Sr
U =r$ )r   i@  z`
Parser to set values on XMLManualAction instances, which are tracked
in XMLBuilder.xml_actions
xmlFc                     [         R                  U 5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  S	S
SS9  g )Nzxpath.deletexpath_deleteTr/  	xpath.set	xpath_setzxpath.createxpath_createzxpath.valuexpath_valuer  r  r  r  s    r!   r  ParserXML._virtcli_class_initH  sX    005NNdCK=NNdCM=DAr$   c                 \  > U R                   R                  R                  5       nU R                  R	                  S5      (       d3  U R
                  R                  5         U R                  U R
                  S'   [        TU ]!  U5        U R                   R                  R                  U5        g)z[
Parse --xml option string into XMLManualAction instances and append
to guest.xml_actions.
zxpath.r  N)
r   xml_actionsr  rl  rY  r~  r  rg  r  r  r    rX  ri  s     r!   r  ParserXML.parseP  sz    
 zz%%))+ {{%%h//LL (,DLL%d

%%d+r$   r5   )r0   r1   r2   r3   rN   rI  r  r  r  r  r4   rk  rl  s   @r!   r   r   @  s3     LB B, ,r$   r   c                 h   ^  S nU 4S jnU" SSSSUS9  U" SS	SSUS9  U" S
SSSUS9  U" SSSSUS9  g)z3
Add xpath.* subarguments to XML based CLI options
c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nr  r	  r  r    rC   rD   r  r  r.  s         r!   find_xpath_cb&_add_xpath_args.<locals>.find_xpath_cbe  s,    %$$V;4"6""r$   c                  4   > SUS'   TR                   " U 0 UD6  g NTr  r  rC   rD   r  s     r!   _add_arg!_add_xpath_args.<locals>._add_argl      ,0()T$V$r$   zxpath[0-9]*.deleter   TN)r/  r2  r3  zxpath[0-9]*.setr  zxpath[0-9]*.creater  zxpath[0-9]*.valuer  r5   )r  r  r  s   `  r!   r  r  a  sc    #% !>dHdH!>dH -dHr$   c                   @   ^  \ rS rSrSrSr\S 5       rU 4S jrSr	U =r
$ )ParserConvertToQ35i~  convert_to_q35Fc                 R    [         R                  U 5        U R                  SS5        g )Nnum_pcie_root_portsr  r  s    r!   r  &ParserConvertToQ35._virtcli_class_init  s     005)+@Ar$   c                    >  " S S5      nU" 5       n[         TU ]  U5        U R                  R                  " S0 UR                  D6  g )Nc                       \ rS rSrSrSrg)2ParserConvertToQ35.parse.<locals>.ConvertToQ35Datai  Nr5   )r0   r1   r2   r3   r  r4   r5   r$   r!   ConvertToQ35Datar!    s    "&r$   r"  r5   )rg  r  r   r  __dict__)r    rX  r"  ri  s      r!   r  ParserConvertToQ35.parse  s<    	' 	'  !d

!!2DMM2r$   r5   r0   r1   r2   r3   rI  r  r  r  r  r4   rk  rl  s   @r!   r  r  ~  s,    #LB B
3 3r$   r  c                   @   ^  \ rS rSrSrSr\S 5       rU 4S jrSr	U =r
$ )ParserConvertToVNCi  convert_to_vncFc                 R    [         R                  U 5        U R                  SS5        g )Nzqemu-vdagentqemu_vdagentr  r  s    r!   r  &ParserConvertToVNC._virtcli_class_init  s    005NN3r$   c                    >  " S S5      nU" 5       n[         TU ]  U5        U R                  R                  " S0 UR                  D6  g )Nc                       \ rS rSrSrSrg)2ParserConvertToVNC.parse.<locals>.ConvertToVNCDatai  Nr5   )r0   r1   r2   r3   r*  r4   r5   r$   r!   ConvertToVNCDatar.    s    Lr$   r/  r5   )rg  r  r   r(  r#  )r    rX  r/  ri  s      r!   r  ParserConvertToVNC.parse  s<    	  	   !d

!!2DMM2r$   r5   r%  rl  s   @r!   r'  r'    s*    #L4 43 3r$   r'  c                   ,    \ rS rSrSrSr\S 5       rSrg)r9  i  
unattendedFc                    [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS	5        U R                  S
S5        g )Nprofilezadmin-password-fileadmin_password_filez
user-login
user_loginzuser-password-fileuser_password_filezproduct-keyproduct_keyz	reg-login	reg_loginr  r  s    r!   r  $ParserUnattended._virtcli_class_init  sh    005Iy))+@AL,/(*>?M=1K-r$   r5   N)	r0   r1   r2   r3   rI  r  r  r  r4   r5   r$   r!   r9  r9    s    L. .r$   r9  c                 n    [        5       nU S:X  a  U$ [        U 5      nUR                  U5      (       a  U$ g r   )r   r9  r  rl  rJ  r[   s      r!   parse_unattendedr=    s9    

C{
f%F||C
 r$   c                 \    U R                   (       a  U R                  (       d  SU l        U ? g g )Nzall=off)forcecheck)r  s    r!   convert_old_forcerA    s!    }}}}%GMM r$   c                   2    \ rS rSrSrSr\S 5       rS rSr	g)r7  i  r@  Fc                 8   [         R                  U 5        U R                  SS SU R                  S S9  U R                  SS SU R                  S S9  U R                  SS SU R                  S S9  U R                  SS SU R                  S S9  U R                  SSSS	9  g )
Nr   T)r1  r.  r2  r   r   r   r  r   r1  )r  r  r  set_cbr  s    r!   r  ParserCheck._virtcli_class_init  s    005M4$zzT 	 	3KzzT 	 	3M4$zzT 	 	3L$zzT 	 	3E<$7r$   c                 <    UR                  UR                  U5        g r&   )r)   r,  r  s       r!   rE  ParserCheck.set_cb  s    !!'//37r$   r5   N)
r0   r1   r2   r3   rI  r  r  r  rE  r4   r5   r$   r!   r7  r7    s$    L
8 
88r$   r7  c                     [         R                  " U 5       H'  n[        U5      nUR                  [	        5       5        M)     g r&   )r   rH  r7  r  r8   )checksrl  r[   s      r!   parse_checkrK    s/    //&)V$%'( *r$   c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r:  i  installrw   Fc                    [         R                  U 5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  S	S	5        U R                  S
S
SS9  g )NbootdevTr  kernelinitrdkernel_argskernel_args_overwriterD  rw   
no_installr  r  s    r!   r  !ParserInstall._virtcli_class_init  s    005IyD9Hh$7Hh$7M=DA+-D 	 	D$L,>r$   r5   N
r0   r1   r2   r3   rI  r}  r  r  r  r4   r5   r$   r!   r:  r:    s$    LL	? 	?r$   r:  c                       \ rS rSrS rSrg)InstallDatai  c                 t    S U l         S U l        S U l        S U l        S U l        S U l        SU l        S U l        g r   )rO  rP  rQ  rR  rS  rw   is_setrT  r   s    r!   r"   InstallData.__init__  s<    %)"r$   )rO  rQ  rZ  rP  rR  rS  rT  rw   Nr0   r1   r2   r3   r"   r4   r5   r$   r!   rX  rX    s    r$   rX  c                     [        5       n[        U 5      Ul        [        U =(       d    S 5      nUR	                  U5        U$ r&   )rX  r   rZ  r:  r  )rl  installdatar[   s      r!   parse_installr_    s5    -KfK6>T*F
LLr$   c                   4    \ rS rSrSrSrSS0r\S 5       rSr	g)	r;  i  
cloud_initFroot-ssh-keyzssh-keyc                 J   [         R                  U 5        U R                  SSSS9  U R                  SS5        U R                  SSSS9  U R                  SS	5        U R                  S
S5        U R                  SS5        U R                  SS5        U R                  SS5        g )Nzroot-password-generateroot_password_generateTrD  zroot-password-fileroot_password_filedisablerb  root_ssh_keyzclouduser-ssh-keyclouduser_ssh_keyz	user-data	user_dataz	meta-data	meta_dataznetwork-confignetwork_configr  r  s    r!   r  #ParserCloudInit._virtcli_class_init"  s    005,.FQUV(*>?Iy48NN3')<=K-K-$&67r$   r5   N)
r0   r1   r2   r3   rI  r  r?  r  r  r4   r5   r$   r!   r;  r;    s-    L	G 	8 	8r$   r;  c                     [        5       nU S:X  a&  [        R                  " S5        SUl        SUl        U$ [        U 5      nUR                  U5      (       a  U$ g )Nr   zADefaulting to --cloud-init root-password-generate=yes,disable=yesT)r   r   r   rd  rf  r;  r  r<  s      r!   parse_cloud_initrn  /  sT    
/C{WX%)"
V$F||C
 r$   c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r8  iA  locationFc                     [         R                  U 5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )Nrp  Tr  rP  rQ  r  r  s    r!   r  "ParserLocation._virtcli_class_initF  sF    005J
d;Hh$7Hh$7r$   r5   NrV  r5   r$   r!   r8  r8  A  s$    LL8 8r$   r8  c                      " S S5      nU" 5       n[        U =(       d    S 5      nUR                  U5        UR                  UR                  UR                  4$ )Nc                       \ rS rSrS rSrg)$parse_location.<locals>.LocationDataiO  c                 .    S U l         S U l        S U l        g r&   )rp  rP  rQ  r   s    r!   r"   -parse_location.<locals>.LocationData.__init__P  s     DMDKDKr$   )rQ  rP  rp  Nr\  r5   r$   r!   LocationDataru  O  s    	r$   rx  )r8  r  rp  rP  rQ  )rl  rx  	parsedatar[   s       r!   parse_locationrz  N  sN     
 IFNd+F
LLy//1A1AAAr$   c                   @    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
rg)OSVariantDatai_  r   r  c                 J    S U l         S U l        SU l        S U l        S U l        g r   )_name_id_detect_require_from_cli_requirer   s    r!   r"   OSVariantData.__init__c  s&    
!%r$   c                     Ub  US:X  a  SU l         U R                  U l        g US:X  a  SU l        g SU;   a  Xl        g Xl        g )NautoTr  genericz://)r  _REQUIRE_AUTOr  r~  r  )r    rawstrs     r!   set_compat_strOSVariantData.set_compat_strj  sE    >Vv-DL ..DMV"DJf_HJr$   c                    S nU R                   (       a   [        R                  " U R                   SS9nO0U R                  (       a  [        R                  " U R                  SS9nU(       a  UR
                  U l        U R                  SL a0  U R                  (       d  [        R                  " S5        SU l        g g U R                  SL a  U R                  U l
        g U R                  U l
        g )NTraise_errorFz3Converting `require=off` to fallback `name=generic`r  )r  r   lookup_os_by_full_idr~  	lookup_osr   r  r   rj   _REQUIRE_ONr  r  )r    osobjs     r!   r  OSVariantData.validatex  s    88--dhhDIEZZNN4::4@EDJ!!U*::		IK&
  ##t+ ,,DM ..DMr$   c                     U R                   $ r&   )r  r   s    r!   	is_detectOSVariantData.is_detect  s    ||r$   c                 4    U R                   U R                  :H  $ r&   )r  r  r   s    r!   is_require_onOSVariantData.is_require_on  s    }} 0 000r$   c                     U R                   $ r&   )r~  r   s    r!   get_nameOSVariantData.get_name  s    zzr$   )r  r  r~  r  r  N)r0   r1   r2   r3   r  r  r"   r  r  r  r  r  r4   r5   r$   r!   r|  r|  _  s*    KM /&1r$   r|  c                   @   ^  \ rS rSrSrSr\S 5       rU 4S jrSr	U =r
$ )r<  i  
os_variantFc                     [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS	9  U R                  S
SSS	9  g )Nr   r~  zshort-ididr  detectr  TrD  requirer  r  r  s    r!   r  #ParserOSVariant._virtcli_class_init  s_    005FG$J(D% Hi$7I2TBr$   c                    > S[        U R                  5      ;  a  UR                  U R                  5        g [        TU ]  U5      $ )NrF  )r   rl  r  rg  r  r
  s     r!   r  ParserOSVariant.parse  s8    c$++&&,w}T""r$   r5   r%  rl  s   @r!   r<  r<    s,    LC C# #r$   r<  c                 r    [        5       n[        U 5      nUR                  U5        UR                  5         U$ r&   )r|  r<  r  r  )rl  datar[   s      r!   parse_os_variantr    s-    ?DV$F
LLMMOKr$   c                 x   UR                  5       (       a  [        R                  " S5        gU R                  R                  nU(       d  gUS   R
                  nUS[        R                  [        R                  4;  a  [        R                  " SU5        g[        (       d:  [        R                  " 5       (       d   [        R                  " [        S5      5        g[        R                   R#                  SS	5      (       d:  [        R                  " 5       (       d   [        R                  " [        S
5      5        gg)zc
Determine the default console for the passed guest config

:returns: 'text', 'graphical', or None
z8--cloud-init specified, defaulting to --autoconsole textrL   r   r   z*No viewer to launch for graphics type '%s'NzlUnable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.DISPLAYri   zCGraphics requested but DISPLAY is not set. Not running virt-viewer.	graphical)has_cloudinitr   r'  devicesgraphicsrd  r
   TYPE_VNC
TYPE_SPICErj   HAS_VIRTVIEWERr   ry   r   rW   rw   rt  r-   )r   	installergdevsgtypes       r!   #_determine_default_autoconsole_typer    s       KLMM""E!HMMEY##%%' ' 			>F>'"6"6"8"8A 4 5 	6 JJNN9b))  ""A 2 3 	4r$   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
_AutoconsoleDatai  c                     Xl         U R                   S;  a!  [        [        S5      U R                   -  5        U R                   S:H  U l        U R                  (       a  [	        X#5      nU=(       d    SU l         g g )N)r  r   rL   r  zUnknown autoconsole type '%s'r   r  )_autoconsoler   rW   _is_defaultr  )r    r  r   r  r   s        r!   r"   _AutoconsoleData.__init__  sh    '$LL23d6G6GGH,,	99%KG ' 16D r$   c                      U R                   S:H  $ )NrL   r  r   s    r!   is_text_AutoconsoleData.is_text  s      F**r$   c                      U R                   S:H  $ )Nr  r  r   s    r!   is_graphical_AutoconsoleData.is_graphical  s      K//r$   c                     U R                   $ r&   )r  r   s    r!   
is_default_AutoconsoleData.is_default  s    r$   c                 4    [        U R                  5       5      $ r&   )r   get_console_cbr   s    r!   has_console_cb_AutoconsoleData.has_console_cb  s    D'')**r$   c                 p    U R                  5       (       a  [        $ U R                  5       (       a  [        $ g r&   )r  r  r  r  r   s    r!   r  _AutoconsoleData.get_console_cb  s+    <<>>r$   )r  r  N)r0   r1   r2   r3   r"   r  r  r  r  r  r4   r5   r$   r!   r  r    s     2+0 +r$   r  c                 .    [        U R                  X5      $ r&   )r  r  )r  r   r  s      r!   parse_autoconsoler    s    G//BBr$   c                   4    \ rS rSrSr\S 5       rS rS rSr	g)r  i  metadatac                 n   [         R                  U 5        U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  S	S	SS9  U R                  S
S S U R                  S9  U R                  SS S U R                  S9  g )Nr   Tr  titleuuidgenidgenid_enablerD  rR   os_namer2  r.  
os_full_id)r  r  r  set_os_name_cbset_os_full_id_cbr  s    r!   r  "ParserMetadata._virtcli_class_init  s    005FFd3GW5FF#GW%NNTBM=DAItt%% 	 	'L$$(( 	 	*r$   c                 &    UR                  U5        g r&   )set_os_namer  s       r!   r  ParserMetadata.set_os_name_cb  s    r$   c                 d    [         R                  " USS9nUR                  UR                  5        g )NTr  )r   r  r  r   )r    rX  r(   rR  r  s        r!   r   ParserMetadata.set_os_full_id_cb  s&    ))#4@$r$   r5   N)
r0   r1   r2   r3   rI  r  r  r  r  r4   r5   r$   r!   r  r    s#    L* *%r$   r  c                   (    \ rS rSrSr\S 5       rSrg)r  i  eventsc                     [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        g )Non_poweroff	on_rebooton_crashon_lockfailurer  r  s    r!   r   ParserEvents._virtcli_class_init  sJ    005M=1K-J
+$&67r$   r5   N)r0   r1   r2   r3   rI  r  r  r4   r5   r$   r!   r  r    s    L8 8r$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  i(  resource	partitionc                 t    [         R                  U 5        U R                  SS5        U R                  SSSS9  g )Nr  zfibrechannel.appidfibrechannel_appidTr  r  r  s    r!   r  "ParserResource._virtcli_class_init-  s2    005K-(*>$Or$   r5   N
r0   r1   r2   r3   rI  r  r}  r  r  r4   r5   r$   r!   r  r  (  s%    LNLP Pr$   r  c                   @    \ rS rSrSrSrSrSSS.rS r\	S 5       r
Srg	)
r  i8  numatunenodesetmode)memory.modememory.nodesetc                 <    SnSnU R                  X45      nU" U0 UD6$ )Nmemnoder  r  s         r!   memnode_find_inst_cb#ParserNumatune.memnode_find_inst_cbA  ,    !$$V;4"6""r$   c                 >   [         R                  U 5        U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  S	S
SU R                  S9  U R                  SSU R                  S9  U R                  SSSU R                  S9  g )Nr  memory_nodesetTr  r  memory_modezmemory.placementmemory_placementzmemnode[0-9]*.cellidcellidr/  r3  zmemnode[0-9]*.moder  r3  zmemnode[0-9]*.nodesetr  )r  r  r  r  r  s    r!   r  "ParserNumatune._virtcli_class_initG  s    005$&6$GM=1&(:;*H 55 	 	7(& 55 	 	7+Y$ 55 	 	7r$   r5   N)r0   r1   r2   r3   rI  r  r}  r?  r  r  r  r4   r5   r$   r!   r  r  8  s7    LNL#G
# 7 7r$   r  c                   V   ^  \ rS rSrSrSrSSS.rS rU 4S jrS r	\
S	 5       rS
rU =r$ )r  iZ  memoryhotplugmemoryslotshotplugmemorymax)maxMemory.slots	maxMemoryc                    SU R                   ;   nSU R                   ;   nSU R                   ;   nU(       a2  U(       a*  U R                   R                  SS5      U R                   S'   ggU(       aX  U(       a(  U R                   R                  S5      U R                   S'   U R                   R                  S5      U R                   S'   gU(       a)  U R                   R                  S5      U R                   S'   gg)al  
Historically the cli had:
    memory -> ./currentMemory
    maxmemory -> ./memory
Then later libvirt gained ./maxMemory. So things are quite a mess.

Try to convert the back compat cases. Basically if new style option
currentMemory is specified, interpret currentMemory and memory as
the XML values. Otherwise treat memory and maxmemory as the old
swapped names.
currentMemory	maxmemoryr  Nr~  ru  )r    havecurhavemaxhavemems       r!   _convert_old_memory_options(ParserMemory._convert_old_memory_optionsb  s     "T\\1-dll*)-)9)9+t)LX& 040@0@0J_-%)\\%5%5k%BDLL",0LL,<,<X,FDLL) r$   c                 B   > U R                  5         [        TU ]	  U5      $ r&   )r  rg  r  r
  s     r!   r  ParserMemory._parse{  s    ((*w~d##r$   c                 ^    [         R                  " XR                  [        U5      S-  5        g Ni   r   rW  r-  r  r  s       r!   set_memory_cbParserMemory.set_memory_cb       d$4$4c#hoFr$   c                 $   U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SS5        U R                  SS S U R                  S9  U R                  S	S
SS9  g )Nr  r.  r  r  r  maxMemorySlotsr	  r  	hugepageszmemoryBacking.hugepagesTrD  )r  r  r  r  s    r!   r   ParserMemory._virtcli_class_init  s    Hh3+<+<=O_9J9JKK1B1BC%'78 	K#,,G 	K!:TJr$   r5   )r0   r1   r2   r3   rI  r}  r?  r  r  r  r  r  r4   rk  rl  s   @r!   r  r  Z  sA    LL/'G
G2$G 
K 
Kr$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  i  memtune
soft_limitc                     [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        g )N
hard_limitr  swap_hard_limitmin_guaranteer  r  s    r!   r  !ParserMemtune._virtcli_class_init  sJ    005L,/L,/%'89O_5r$   r5   Nr  r5   r$   r!   r  r    s#    LNL6 6r$   r  c                   H    \ rS rSrSrSrSrSSSSSS	S
.rS r\	S 5       r
Srg)r  i  	blkiotuneweightdevice_pathdevice_weightread_bytes_secwrite_bytes_secread_iops_secwrite_iops_sec)device[0-9]*.pathdevice[0-9]*.weightdevice[0-9]*.read_bytes_secdevice[0-9]*.write_bytes_secdevice[0-9]*.read_iops_secdevice[0-9]*.write_iops_secc                 <    SnSnU R                  X45      nU" U0 UD6$ )Ndevicer  r  r  s         r!   device_find_inst_cb#ParserBlkiotune.device_find_inst_cb  s,    !$$V;4"6""r$   c                    [         R                  U 5        U R                  SS5        U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SS	U R                  S9  U R                  S
SU R                  S9  U R                  SSU R                  S9  g )Nr'  r.  rx   r  r/  r0  r*  r1  r+  r2  r,  r3  r-  )r  r  r  r6  r  s    r!   r  #ParserBlkiotune._virtcli_class_init  s    005Hh''!$!8!8 	 	:)8!$!8!8 	 	:13C!$!8!8 	 	:24E!$!8!8 	 	:0/!$!8!8 	 	:13C!$!8!8 	 	:r$   r5   N)r0   r1   r2   r3   rI  r  r}  r?  r6  r  r  r4   r5   r$   r!   r  r    sC    L NL*.'7(9&5'7G# : :r$   r  c                   B    \ rS rSrSrSrSSSSSS	.rS
 r\S 5       r	Sr
g)r  i  memorybackingmemoryBackingsizeunitr  access_modesource_type)hugepages.page[0-9]*.sizehugepages.page[0-9]*.unithugepages.page[0-9]*.nodesetaccess.modesource.typec                 <    SnSnU R                  X45      nU" U0 UD6$ )Npagepagesr  r  s         r!   page_find_inst_cb%ParserMemoryBacking.page_find_inst_cb  ,    $$V;4"6""r$   c                    [         R                  U 5        U R                  SSSS9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  S	S
SU R                  S9  U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SS5        g )Nr  TrD  rA  r=  r  rB  r>  rC  r  r  nosharepageslockedrD  r?  rE  r@  discardzallocation.modeallocation_modezallocation.threadsallocation_threads)r  r  r  rI  r  s    r!   r  'ParserMemoryBacking._virtcli_class_init  s    005Kt</!$!6!6 	 	8/!$!6!6 	 	82I!$!6!6 	 	8 	NNTBHh6M=1M=1Iy48%'89(*>?r$   r5   N)r0   r1   r2   r3   rI  r  r?  rI  r  r  r4   r5   r$   r!   r  r    s=    "L$N%+%+(1$$G# @ @r$   r  c                      ^  \ rS rSrSrSrSrSrSSSSS	S
.rS r	U 4S jr
S rS rS rS rS rS rS r\S 5       rSrU =r$ )r  i  cpumodelFz%cell[0-9]*.distances.sibling[0-9]*.idz(cell[0-9]*.distances.sibling[0-9]*.valuezcell[0-9]*.idzcell[0-9]*.cpuszcell[0-9]*.memory)*numa.cell[0-9]*.distances.sibling[0-9]*.id-numa.cell[0-9]*.distances.sibling[0-9]*.valuenuma.cell[0-9]*.idnuma.cell[0-9]*.cpusnuma.cell[0-9]*.memoryc                 &   [         R                  " [        5      n[        U R                  5       H   u  p#US;   d  M  X   R                  U5        M"     [        U R                  R                  5       5       H|  u  p#S nU(       d  [        U5      S:X  a  M  UR                  S5      (       a  SnOUR                  S5      (       a  SnU(       d  MY  U R                  U	 X   R                  USS  5        M~     U R                  R                  U5        g )N)r?  r  optionalrf  forbidr   +r?  r  rf  )rz  defaultdictrk  rn  rl  r  r~  itemsrI   rY  update)r    	convertedrE  valuepolicys        r!   _convert_old_feature_options&ParserCPU._convert_old_feature_options	  s      ++D1	-dkk:JCKK%%e, ;
 t||1134JCFCA ~~c"" $$"vLL%!((QR1 5  	I&r$   c                 B   > U R                  5         [        TU ]	  U5      $ r&   )re  rg  r  r
  s     r!   r  ParserCPU._parse-	  s    ))+w~d##r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ncellcellsr  r  s         r!   cell_find_inst_cbParserCPU.cell_find_inst_cb6	  rK  r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ )Nsiblingsiblingsrl  r  r    rX  rC   rD   rj  r  r  r.  s           r!   cell_sibling_find_inst_cb#ParserCPU.cell_sibling_find_inst_cb<	  sP    %%d<T<V<"$$V;$((((r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ Ncachecachesrq  rr  s           r!   cell_cache_find_inst_cb!ParserCPU.cell_cache_find_inst_cbE	  sP    %%d<T<V< $$V;$((((r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nlatency	latenciesr  r  s         r!   latency_find_inst_cbParserCPU.latency_find_inst_cbN	  s,    #$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )N	bandwidth
bandwidthsr  r  s         r!   bandwidth_find_inst_cb ParserCPU.bandwidth_find_inst_cbT	  ,    $$$V;4"6""r$   c                    US:X  a+  [         R                  " [        S5      5        UR                  nUS:X  a  UR                  nX!R
                  ;   a  UR                  U R                  U5        g UR                  U R                  U5        g )Nhostz2CPU model=host is deprecated, use model=host-modelr  )	r   r   rW   SPECIAL_MODE_HOST_MODELSPECIAL_MODE_CLEARSPECIAL_MODESset_special_moder   	set_modelr  s       r!   set_model_cbParserCPU.set_model_cb_	  sj    &=KKNOP..C&=))C$$$!!$**c2NN4::s+r$   c                     UR                   n[        R                  " U5       HL  nS nUR                   H  nUR                  U:X  d  M  Un  O   U(       a  XFl        M;  UR                  XT5        MN     g r&   )r,  r   rH  featuresr   rd  add_feature)r    rX  r(   rR  rd  feature_name
featureobjr  s           r!   set_feature_cbParserCPU.set_feature_cbk	  s^    #OOC0LJ]]66\)!"J #
 $*!  6 1r$   c                 n	   [         R                  U 5        U R                  SSSS9  U R                  SSU R                  S9  U R                  SS5        U R                  SS	5        U R                  S
S
5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SSU R
                  S9  U R                  S S!SU R
                  S"9  U R                  S#S$U R
                  S9  U R                  S%S&U R
                  S9  U R                  S'S(U R
                  S9  U R                  S)S*U R
                  SS+9  U R                  S,SU R                  S9  U R                  S-S.U R                  S9  U R                  S/S0U R                  S9  U R                  S1S2U R                  S9  U R                  S3S4U R                  S9  U R                  S5S6U R                  S9  U R                  S7S8U R                  S9  U R                  S9S:U R                  S9  U R                  S;S<U R                  S9  U R                  S=S>U R                  S9  U R                  S?S@U R                  S9  U R                  SASBU R                  S9  U R                  SCSDU R                  S9  U R                  SES.U R                  S9  U R                  SFS&U R                  S9  U R                  SGS>U R                  S9  U R                  SHS@U R                  S9  U R                  SISDU R                  S9  U R                  SJSBU R                  S9  U R                  SKS.U R                  S9  U R                  SLS&U R                  S9  g )MNsecureTrD  rU  r  zmodel.fallbackmodel_fallbackzmodel.vendor_idmodel_vendor_idvendorr  r"  r@  
migratableztopology.socketsztopology.diesztopology.coresztopology.threadszcache.levelz
cache.modezmaxphysaddr.modezmaxphysaddr.bitsr?  r  r  r\  rf  r]  rX  r  r  rY  cpusr  rZ  r  znuma.cell[0-9]*.unitr>  znuma.cell[0-9]*.memAccess	memAccessznuma.cell[0-9]*.discardrO  r3  r1  rV  rW  rc  z!numa.cell[0-9]*.cache[0-9]*.levelr^   z)numa.cell[0-9]*.cache[0-9]*.associativityassociativityz"numa.cell[0-9]*.cache[0-9]*.policyrd  z&numa.cell[0-9]*.cache[0-9]*.size.value
size_valuez%numa.cell[0-9]*.cache[0-9]*.size.unit	size_unitz&numa.cell[0-9]*.cache[0-9]*.line.value
line_valuez%numa.cell[0-9]*.cache[0-9]*.line.unit	line_unitz*numa.interconnects.latency[0-9]*.initiator	initiatorz'numa.interconnects.latency[0-9]*.targettargetz&numa.interconnects.latency[0-9]*.cacherw  z%numa.interconnects.latency[0-9]*.typerd  z&numa.interconnects.latency[0-9]*.valuez%numa.interconnects.latency[0-9]*.unitz,numa.interconnects.bandwidth[0-9]*.initiatorz)numa.interconnects.bandwidth[0-9]*.targetz'numa.interconnects.bandwidth[0-9]*.typez(numa.interconnects.bandwidth[0-9]*.cachez(numa.interconnects.bandwidth[0-9]*.valuez'numa.interconnects.bandwidth[0-9]*.unit)
r  r  r  r  r  rl  rs  ry  r~  r  r  s    r!   r  ParserCPU._virtcli_class_initz	  s   005Hh6GW)9)9: 	$&67%'89Hh'FF#GW%GW%L,>&(:;O_5$&67&(:;M=1L,/&(:;&(:; 	GTTc6H6HIItt8J8JKJ9K9KLItt8J8JKHdds7I7IJ 	($!$!6!6 	 	8*Fd!$!6!6 	 	8,h!$!6!6 	 	8*F!$!6!6 	 	8/!$!6!6 	 	8-y!$!6!6 	 	G@$!$!>!> 	 	@CW!$!>!> 	 	@ 	7!$!<!< 	 	>?!$!<!< 	 	>8(!$!<!< 	 	><l!$!<!< 	 	>;[!$!<!< 	 	><l!$!<!< 	 	>;[!$!<!< 	 	> 	@+!$!9!9 	 	;=x!$!9!9 	 	;<g!$!9!9 	 	;;V!$!9!9 	 	;<g!$!9!9 	 	;;V!$!9!9 	 	;BK!$!;!; 	 	=?!$!;!; 	 	==v!$!;!; 	 	=>!$!;!; 	 	=>!$!;!; 	 	==v!$!;!; 	 	=r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  re  r  rl  rs  ry  r~  r  r  r  r  r  r4   rk  rl  s   @r!   r  r    sr    LNLI 46- 1"5G'8$#))##
,7 [= [=r$   r  c                   j    \ rS rSrSrSrSrSrS rS r	S r
S rS	 rS
 rS rS rS r\S 5       rSrg)r  i	  cputunerU  Fc                 <    SnSnU R                  X45      nU" U0 UD6$ )Nvcpupinvcpupinsr  r  s         r!   vcpupin_find_inst_cb"ParserCputune.vcpupin_find_inst_cb	  ,    "$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Niothreadpiniothreadpinsr  r  s         r!   iothreadpin_find_inst_cb&ParserCputune.iothreadpin_find_inst_cb	  ,    &$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )N	vcpusched
vcpuschedsr  r  s         r!   vcpusched_find_inst_cb$ParserCputune.vcpusched_find_inst_cb	  r  r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Niothreadschediothreadschedsr  r  s         r!   iothreadsched_find_inst_cb(ParserCputune.iothreadsched_find_inst_cb	  s,     ($$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )N	cachetune
cachetunesr  r  s         r!   cachetune_find_inst_cb$ParserCputune.cachetune_find_inst_cb	  r  r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ rv  r  r  r    rX  rC   rD   r  r  r  r.  s           r!   cache_find_inst_cb ParserCputune.cache_find_inst_cb
  sP    //FtFvF	 $$V;$((((r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ )Nmonitormonitorsr  r  s           r!   monitor_find_inst_cb"ParserCputune.monitor_find_inst_cb

  sP    //FtFvF	"$$V;$((((r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )N
memorytunememorytunesr  r  s         r!   memorytune_find_inst_cb%ParserCputune.memorytune_find_inst_cb
  s,    %$$V;4"6""r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ )Nnodenodes)r  r  )r    rX  rC   rD   r  r  r  r.  s           r!   node_find_inst_cbParserCputune.node_find_inst_cb
  sP    11$HHH
$$V;$((((r$   c                 X   [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  S	S	5        U R                  S
SU R                  S9  U R                  SSSU R                  S9  U R                  SSSS9  U R                  SSU R                  S9  U R                  SSSU R                  S9  U R                  SS5        U R                  SS5        U R                  SSSU R
                  S9  U R                  SSU R
                  S9  U R                  SS U R
                  S9  U R                  S!S"SU R                  S9  U R                  S#SU R                  S9  U R                  S$S U R                  S9  U R                  S%SU R                  SS&9  U R                  S'S(U R                  S9  U R                  S)S*U R                  S9  U R                  S+S,U R                  S9  U R                  S-S.U R                  S9  U R                  S/S0U R                  S9  U R                  S1S*U R                  S9  U R                  S2SU R                  SS&9  U R                  S3SU R                  SS&9  U R                  S4S(U R                  S9  U R                  S5S6U R                  S9  g )7Nsharesperiodquotaglobal_periodglobal_quotaemulator_periodemulator_quotaiothread_periodiothread_quotazvcpupin[0-9]*.vcpuvcpur  zvcpupin[0-9]*.cpusetcpusetTr  zemulatorpin.cpusetemulatorpin_cpusetr  ziothreadpin[0-9]*.iothreadiothreadziothreadpin[0-9]*.cpusetzemulatorsched.scheduleremulatorsched_schedulerzemulatorsched.priorityemulatorsched_priorityzvcpusched[0-9]*.vcpusvcpuszvcpusched[0-9]*.scheduler	schedulerzvcpusched[0-9]*.prioritypriorityziothreadsched[0-9]*.iothreads	iothreadsziothreadsched[0-9]*.schedulerziothreadsched[0-9]*.priorityzcachetune[0-9]*.vcpus)r3  r/  zcachetune[0-9]*.cache[0-9]*.idr  z!cachetune[0-9]*.cache[0-9]*.levelr^   z cachetune[0-9]*.cache[0-9]*.typerd  z cachetune[0-9]*.cache[0-9]*.sizer=  z cachetune[0-9]*.cache[0-9]*.unitr>  z#cachetune[0-9]*.monitor[0-9]*.levelz#cachetune[0-9]*.monitor[0-9]*.vcpuszmemorytune[0-9]*.vcpuszmemorytune[0-9]*.node[0-9]*.idz%memorytune[0-9]*.node[0-9]*.bandwidthr  )r  r  r  r  r  r  r  r  r  r  r  r  r  s    r!   r  !ParserCputune._virtcli_class_init"
  so   005Hh'Hh'GW%O_5NN3%'89$&67%'89$&67 	(&!$!9!9 	 	;*H!$!9!9 	 	;(*>$O0*!$!=!= 	 	?.D!$!=!= 	 	? 	-/HI,.FG+W!$!;!; 	 	=/!$!;!; 	 	=.
!$!;!; 	 	=3[D!$!?!? 	 	A3[!$!?!? 	 	A2J!$!?!? 	 	A 	+W!$!;!;t 	 	M4d!$!7!7 	 	97!$!7!7 	 	96!$!7!7 	 	96!$!7!7 	 	96!$!7!7 	 	997!$!9!9 	 	;97!$!9!9T 	 	K,g!$!<!< 	 	N4d!$!6!6 	 	8;[!$!6!6 	 	8r$   r5   N)r0   r1   r2   r3   rI  r  r}  r  r  r  r  r  r  r  r  r  r  r  r  r4   r5   r$   r!   r  r  	  sW    LNLI#####))#) >8 >8r$   r  c                   <    \ rS rSrSrSrSrS rS r\	S 5       r
Srg)r  ih
  r  c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nr  iothreadidsr  r  s         r!   iothreads_find_inst_cb&ParserIOThreads.iothreads_find_inst_cbm
  s,    %$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ndefaultiothreadr  r  s         r!   defaultiothread_find_inst_cb,ParserIOThreads.defaultiothread_find_inst_cbs
  s,    ")$$V;4"6""r$   c                 `   [         R                  U 5        U R                  SS5        U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  S	SU R                  S9  U R                  S
SU R                  S9  g )Nr  ziothreadids.iothread[0-9]*.idr  r  z*iothreadids.iothread[0-9]*.thread_pool_minthread_pool_minz*iothreadids.iothread[0-9]*.thread_pool_maxthread_pool_maxzdefaultiothread.thread_pool_minzdefaultiothread.thread_pool_max)r  r  r  r  r  r  s    r!   r  #ParserIOThreads._virtcli_class_inity
  s    005K-3T!$!;!; 	 	=@%C4N4N 	 	P@%C4N4N 	 	P57H!$!A!A 	 	C57H!$!A!A 	 	Cr$   r5   N)r0   r1   r2   r3   rI  r  r}  r  r  r  r  r4   r5   r$   r!   r  r  h
  s1    L NL## C Cr$   r  c                   `   ^  \ rS rSrSrSrSS0rS rS rU 4S jr	S	 r
S
 r\S 5       rSrU =r$ )r  i
  r  r  vcpu.placement	placementc                    SU R                   ;   nSU R                   ;   nSU R                   ;   nU(       a1  U(       a)  U R                   R                  S5      U R                   S'   g g U(       aX  U(       a(  U R                   R                  S5      U R                   S'   U R                   R                  S5      U R                   S'   g g )Nmaxvcpusvcpu.currentr  r
  )r    r  r  havevcps       r!   _convert_old_vcpu_opts!ParserVCPU._convert_old_vcpu_opts
  s    , DLL0DLL('+||'7'7
'CV$ /3||/?/?/G^,#'<<#3#3J#?DLL  r$   c                     SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a)  U R                   R                  S5      U R                   S'   g g )Nr  vcpu.cpusetr  r  r
  r   s    r!   _add_advertised_aliases"ParserVCPU._add_advertised_aliases
  s[     t||#*.,,*:*:8*DDLL'dll"#'<<#3#3G#<DLL  #r$   c                 b   > U R                  5         U R                  5         [        TU ]  U5      $ r&   )r  r  rg  r  r
  s     r!   r  ParserVCPU._parse
  s*    $$&##%w~d##r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nr  zvcpulist.vcpur  r  s         r!   vcpu_find_inst_cbParserVCPU.vcpu_find_inst_cb
  s,    '$$V;4"6""r$   c                 ,    US:w  a  X!l         g SUl        g )Nr  )vcpu_cpusetvcpu_placementr  s       r!   set_cpuset_cbParserVCPU.set_cpuset_cb
  s    &=" %r$   c                    [         R                  U 5        U R                  SSU R                  S9  U R                  SSSU R                  S9  U R                  SSU R                  S9  U R                  SS	5        U R                  S
S5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSU R                  S9  U R                  SS5        U R                  SSU R
                  S9  U R                  SSU R
                  SS9  U R                  SSU R
                  SS9  U R                  SSU R
                  S9  g ) Nr  r  r  r  r  T)r/  r.  socketszcpu.topology.socketsdieszcpu.topology.diescoreszcpu.topology.coresthreadszcpu.topology.threadsr  r  vcpu_currentr  r  r  zvcpus.vcpu[0-9]*.idr  r  zvcpus.vcpu[0-9]*.enabledenabledr  zvcpus.vcpu[0-9]*.hotpluggablehotpluggablezvcpus.vcpu[0-9]*.orderorder)r  r  r  r  r  r
  r  s    r!   r  ParserVCPU._virtcli_class_init
  sd   005JCLL9HmtMGW6 	I56F/0G12I56 	FG$NN3M=3#4#4 	 	6$&67 	)4!$!6!6 	 	8.	!$!6!6 	 	G3^!$!6!6 	 	G,g!$!6!6 	 	8r$   r5   )r0   r1   r2   r3   rI  r}  r?  r  r  r  r
  r  r  r  r4   rk  rl  s   @r!   r  r  
  sG    LL+G@=$#	% 8 8r$   r  c            
          ^  \ rS rSrSrSrSSSSS/S	S
SSSS.	rS rU 4S jrS r	S r
S rS rS rS rS rS rS rS rS r\S 5       rSrU =r$ )r  i
  bootrw   rebootTimeout	useserialmenu
extra_argsrR  	loader_roloader_typeloader_securenvram_templatesmbios_mode)	bios.rebootTimeoutbios.useserialbootmenu.enablecmdlineloader.readonlyloader.typeloader.securenvram.templatesmbios.modec                     / n[        U R                  R                  5       5       H9  nX1R                  ;  a  M  U R                  U	 X2;  d  M(  UR	                  U5        M;     U(       a  X!l        g g r&   )rk  r~  r  BOOT_DEVICESr  	bootorder)r    rX  
boot_orderr,  s       r!   _convert_boot_orderParserBoot._convert_boot_order
  sa    
DLL--/0G///W%(!!'* 1 'N r$   c                    > U R                  U5        U R                  R                  SS5      c  SU R                  S'   [        TU ]  U5      $ )Nuefir   r  )r3  r~  r-   rg  r  r
  s     r!   r  ParserBoot._parse  sG      & <<FB'/#'DLL w~d##r$   c                 D    USL a  U R                   R                  5         g g r,   )r   refresh_machine_typer  s       r!   refresh_machine_type_cb"ParserBoot.refresh_machine_type_cb  s    $;JJ++- r$   c                     [        SU5      nU R                  (       d  X R                  l        g U(       d  U R                  R	                  5         g U R                  R                  5         g )Nr6  )r  r  r   uefi_requesteddisable_uefienable_uefir  s       r!   set_uefi_cbParserBoot.set_uefi_cb  sD    fc*|| ),JJ%

'')

&&(r$   c                 &    UR                  U5        g r&   )set_initargs_stringr  s       r!   set_initargs_cbParserBoot.set_initargs_cb(        %r$   c                 $    X R                   l        g r&   )r   
bootloaderr  s       r!   set_bootloader_cbParserBoot.set_bootloader_cb+  s     #

r$   c                 $    X R                   l        g r&   )r   bootloader_argsr  s       r!   set_bootloader_args_cb!ParserBoot.set_bootloader_args_cb.  s    %(

"r$   c                 $    X R                   l        g r&   )r   rd  r  s       r!   set_domain_type_cbParserBoot.set_domain_type_cb1  s    

r$   c                 $    X R                   l        g r&   )r   emulatorr  s       r!   set_emulator_cbParserBoot.set_emulator_cb4  s    !

r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nr  bootdevsr  r  s         r!   boot_find_inst_cbParserBoot.boot_find_inst_cb7  s,    "$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ninitarginitargsr  r  s         r!   initarg_find_inst_cbParserBoot.initarg_find_inst_cb=  r  r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ninitenvinitenvsr  r  s         r!   initenv_find_inst_cbParserBoot.initenv_find_inst_cbC  r  r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nfeaturefirmware_featuresr  r  s         r!   feature_find_inst_cbParserBoot.feature_find_inst_cbI  s,    +$$V;4"6""r$   c                 x   [         R                  U 5        U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS U R                  S SS9  U R                  S	S	5        U R                  S
S
5        U R                  SS5        U R                  SS S U R
                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  SSU R                  SS9  U R                  SS U R                  S!9  U R                  S"S"5        U R                  S#S$5        U R                  S%S&U R                  S!9  U R                  S'S(SS9  U R                  S)S*5        U R                  S+S,SS9  U R                  S-S.5        U R                  S/S05        U R                  S1S15        U R                  S2S25        U R                  S3S4SS59  U R                  S6S65        U R                  S7S85        U R                  S9S:5        U R                  S;S;5        U R                  S<S<U R                  S=9  U R                  S>S?U R                  S!9  U R                  S@SAU R                  S!9  U R                  SBS U R                  S!9  U R                  SCSC5        U R                  SDSD5        U R                  SESE5        g )FNhdr  cdromfdnetworkzrefresh-machine-typeTr  os_typearchmachinerH  rL  domain_typerS  r6  loaderr*  r!  rD  r+  r"  r,  r#  zloader.statelessloader_statelessfirmwarezfirmware.feature[0-9]*.enabledr  r  zfirmware.feature[0-9]*.namer   r  nvramr-  r$  zboot[0-9]*.devr   r(  bootmenu_enablezbootmenu.timeoutbootmenu_timeoutr'  bios_useserialr&  bios_rebootTimeoutr.  r%  rP  rQ  r)  rR  r  dtbz
acpi.tableacpi_tbzacpi.table.typeacpi_tb_typer  r\  r  zinitarg[0-9]*r(   zinitenv[0-9]*rc  zinitenv[0-9]*.nameinitdirinituser	initgroup)r  r  r  r  r:  rI  rM  rP  rT  r@  rg  rX  rD  r]  rb  r  s    r!   r  ParserBoot._virtcli_class_initO  s   005 	D$$3<<@GTTcllCD$$3<<@IttE*D.. 	 	/
 	Iy)FF#Iy)L$$(( 	 	*%tt-- 	 	/M44)) 	 	+J&& 	 	(FDD?? 	 	$ 	Hh'%{TBM=1O_tD&(:TJ 	J
+4i!$!9!9D 	 	J16!$!9!9 	 	;GW%$&67$e!$!6!6 	 	8%'84H&(:;$&6F(*>?M=1 	Hh'Hh'I}=E5!L),%~6 	FF#J
s/B/BCOU!$!9!9 	 	;OW!$!9!9 	 	;(&!$!9!9 	 	;Iy)J
+K-r$   r5   )r0   r1   r2   r3   rI  r  r?  r3  r  r:  r@  rD  rI  rM  rP  rT  rX  r]  rb  rg  r  r  r4   rk  rl  s   @r!   r  r  
  s    LN-%! -0&$(*$
G($.)&$)"#### G. G.r$   r  c                   >    \ rS rSrSrSrSSSSSSS	.r\S
 5       rSr	g)r  i  idmap	uid_start
uid_target	uid_count	gid_start
gid_target	gid_count)	uid.start
uid.target	uid.count	gid.start
gid.target	gid.countc                    [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  S	S
5        U R                  SS5        g )Nr  r  r  r  r  r  r  r  r  r  r  r  r  r  s    r!   r  ParserIdmap._virtcli_class_init  sd    005K-L,/K-K-L,/K-r$   r5   N
r0   r1   r2   r3   rI  r  r?  r  r  r4   r5   r$   r!   r  r    s9    LN "  " G . .r$   r  c                   ,    \ rS rSrSrSr\S 5       rSrg)r  i  seclabel	seclabelsc                     [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )	Nrd  rU  relabelTrD  labelr  	baselabelr  r  s    r!   r  "ParserSeclabel._virtcli_class_init  sb    005FF#GW%Iy48GW5K=r$   r5   N	r0   r1   r2   r3   rI  r  r  r  r4   r5   r$   r!   r  r    s    L N> >r$   r  c                   2    \ rS rSrSrSrS r\S 5       rSr	g)r  i  keywrapc                 <    SnSnU R                  X45      nU" U0 UD6$ )Ncipherr  r  s         r!   cipher_find_inst_cb!ParserKeyWrap.cipher_find_inst_cb  s,     $$V;4"6""r$   c                     [         R                  U 5        U R                  SSSU R                  S9  U R                  SSSU R                  S9  g )Nzcipher[0-9]*.namer   Tr  zcipher[0-9]*.stater-  )r  r  r  r  r  s    r!   r  !ParserKeyWrap._virtcli_class_init  sR    005'4 44 	 	6('T 44 	 	6r$   r5   N)
r0   r1   r2   r3   rI  r  r  r  r  r4   r5   r$   r!   r  r    s%    LN# 6 6r$   r  c                   L    \ rS rSrSrSrSSSSSSS	S
SSSSSS.r\S 5       rSr	g)r  i  r  eoipmuvmport
kvm_hiddengic_versionsmm
vmcoreinfohyperv_relaxedhyperv_vapichyperv_spinlockshyperv_spinlocks_retrieshyperv_synichyperv_reset)apic.eoi	pmu.statevmport.statekvm.hidden.stategic.version	smm.statevmcoreinfo.statehyperv.relaxed.statehyperv.vapic.statehyperv.spinlocks.statehyperv.spinlocks.retrieshyperv.synic.statehyperv.reset.statec                    [         R                  U 5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  S	S
SS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SS SS9  U R                  S!S"SS9  U R                  S#S$SS9  U R                  S%S&SS9  U R                  S'S(SS9  U R                  S)S*SS9  U R                  S+S,SS9  U R                  S-S.SS9  U R                  S/S0SS9  U R                  S1S2SS9  U R                  S3S4SS9  U R                  S5S6SS9  U R                  S7S8SS9  U R                  S9S:5        U R                  S;S<SS9  U R                  S=S>SS9  U R                  S?S@5        U R                  SASB5        g )CNacpiTrD  apicpaeprivnethapviridianr  r  r  r  r  r  r  r  r  r  r  r  zhyperv.vpindex.statehyperv_vpindexzhyperv.runtime.statehyperv_runtimer  r  zhyperv.stimer.statehyperv_stimerzhyperv.stimer.direct.statehyperv_stimer_directr  r  zhyperv.frequencies.statehyperv_frequencieszhyperv.reenlightenment.statehyperv_reenlightenmentzhyperv.tlbflush.statehyperv_tlbflushzhyperv.ipi.state
hyperv_ipizhyperv.evmcs.statehyperv_evmcszhyperv.avic.statehyperv_avicr  r  r  r  zkvm.hint-dedicated.statekvm_hint_dedicatedzkvm.poll-control.statekvm_poll_controlzkvm.pv-ipi.state
kvm_pv_ipizpvspinlock.state
pvspinlockr  r  r  r  r  r  zioapic.driverioapic_driverzmsrs.unknownmsrs_unknownr  r  s    r!   r  "ParserFeatures._virtcli_class_init  s   005FFT2FFT2E540Iy48E540J
T:J5K6*,<tL(.4H,.@4P.0JK*,<tL*,<tL(.4H)?TJ02HSWX(.4H.0DtT24LW[\+->N&tD(.4H'FNHt<&tD.0DtT,.@4P&tD&tDM=1K6&tDO_5NN3r$   r5   Nr  r5   r$   r!   r  r    sN    LN ($( 0,"4$>,,G  )4 )4r$   r  c                   R   ^  \ rS rSrSrSrS rU 4S jrS rS r	\
S 5       rSrU =r$ )	r  i&  clockc                    SU R                   ;   a  U R                   R                  S5        SU R                   ;   a  U R                   R                  S5        SU R                   ;   a  U R                   R                  S5        SU R                   ;   a  U R                   R                  S5        SU R                   ;   a  U R                   R                  S5        g g )Nplatform_tickpolicyhpet_tickpolicytsc_tickpolicykvmclock_tickpolicyhypervclock_tickpolicyr
  r   s    r!   _remove_old_optionsParserClock._remove_old_options*  s     !DLL0LL23,LL./t||+LL-. DLL0LL23#t||3LL56 4r$   c                 B   > U R                  5         [        TU ]	  U5      $ r&   )r  rg  r  r
  s     r!   r  ParserClock._parse9  s      "w~d##r$   c                    UR                   R                  S5      u  pES nUR                   H  nUR                  U:X  d  M  Un  O   U(       d   UR                  R	                  5       nXFl        [
        R                  " XeU5        g )NrW   )r,  rL  timersr   r  r   rW  )r    rX  r(   rR  tnamer-  timerobjr  s           r!   	set_timerParserClock.set_timerB  sj    !////4Avv 
 {{**,H!Mh#6r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ntimerr  r  r  s         r!   timer_find_inst_cbParserClock.timer_find_inst_cbQ  ,     $$V;4"6""r$   c                 @   [         R                  U 5        U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S SU R                  S9  U R                  SS S SU R                  S9  U R                  SS S SU R                  S9  U R                  S	S S SU R                  S9  U R                  S
S S SU R                  S9  U R                  SS S SU R                  S9  U R                  SS S SU R                  S9  U R                  SS5        U R                  SSU R                  S9  U R                  SSSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  S S!U R                  S9  g )"Npit_tickpolicyr  rtc_tickpolicyplatform_presentT)r2  r1  r.  pit_presentrtc_presenthpet_presenttsc_presentkvmclock_presenthypervclock_presentoffsetztimer[0-9]*.namer   r  ztimer[0-9]*.presentpresentr1  r3  ztimer[0-9]*.tickpolicy
tickpolicyztimer[0-9]*.tracktrackztimer[0-9]*.moder  ztimer[0-9]*.frequency	frequencyztimer[0-9]*.catchup.threshold	thresholdztimer[0-9]*.catchup.slewslewztimer[0-9]*.catchup.limitlimit)r  r  r  r  r  r  s    r!   r  ParserClock._virtcli_class_initW  s\   005
 	$dd}} 	 	&$dd}} 	 	&&t}} 	 	&M44$}} 	 	&M44$}} 	 	&NDD4}} 	 	&M44$}} 	 	&&t}} 	 	&)44$}} 	 	& 	Hh'&!$!7!7 	 	9)9t!$!7!7 	 	9,l!$!7!7 	 	9'!$!7!7 	 	9&!$!7!7 	 	9+[!$!7!7 	 	93[!$!7!7 	 	9.!$!7!7 	 	9/!$!7!7 	 	9r$   r5   )r0   r1   r2   r3   rI  r  r  r  r  r  r  r  r4   rk  rl  s   @r!   r  r  &  s5    LN7$7# ,9 ,9r$   r  c                   6    \ rS rSrSrSrSSS.r\S 5       rSr	g)	r  i  pmsuspend_to_memsuspend_to_disk)suspend_to_mem.enabledsuspend_to_disk.enabledc                 r    [         R                  U 5        U R                  SSSS9  U R                  SSSS9  g )Nr  r  TrD  r  r  r  r  s    r!   r  ParserPM._virtcli_class_init  s8    005,.>N-/@4Pr$   r5   Nr  r5   r$   r!   r  r    s/    LN"2#4G
 Q Qr$   r  c                      ^  \ rS rSrSrSrSr0 SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_rU 4S& jrS' r	S( r
S) rS* r\S+ 5       rS,rU =r$ )-r  i  sysinford  bios.vendorbios_vendorbios.versionbios_version	bios.date	bios_datebios.releasebios_releasesystem.manufacturersystem_manufacturersystem.productsystem_productsystem.versionsystem_versionsystem.serialsystem_serialsystem.uuidsystem_uuid
system.sku
system_skusystem.familysystem_familybaseBoard.manufacturerbaseBoard_manufacturerbaseBoard.productbaseBoard_productbaseBoard.versionbaseBoard_versionbaseBoard.serialbaseBoard_serialbaseBoard.assetbaseBoard_assetbaseBoard.locationbaseBoard_locationc                   > U R                   (       a  SU R                  ;  a  SU R                  S'   U(       d@  U R                  S   nU R                  R                   H  nUR                  U:X  d  M  Un  O   [
        TU ]  U5      $ )Nrd  smbios)rl  r~  r   r
  rd  rg  r  )r    rX  rp   r
  ri  s       r!   r  ParserSysinfo.parse  sq    ;;65 $,DLL  ,,v&C::--<<3&"D .
 w}T""r$   c                     US:X  d  US:X  a  X R                   R                  l        g US:X  a  SU R                   R                  l        X!l        g )Nr  emulater.  r
  )r   rw   r%  rd  r  s       r!   set_type_cbParserSysinfo.set_type_cb  s=    &=C9,(+JJMM%(?(1DJJMM%	r$   c                 0    X!l         X R                  l        g r&   )r  r   r  r  s       r!   set_uuid_cbParserSysinfo.set_uuid_cb  s    
 

r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nentry
oemStringsr  r  s         r!   oem_find_inst_cbParserSysinfo.oem_find_inst_cb  s,    $$$V;4"6""r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nr8  entriesr  r  s         r!   entry_find_inst_cb ParserSysinfo.entry_find_inst_cb  s,    !$$V;4"6""r$   c                 p   [         R                  U 5        U R                  SSU R                  SS9  U R                  SS5        U R                  SS5        U R                  SS	5        U R                  S
S5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS 5        U R                  S!S"5        U R                  S#S$5        U R                  S%S&5        U R                  S'S(5        U R                  S)S*5        U R                  S+S,5        U R                  S-S.5        U R                  S/S05        U R                  S1S2SU R
                  S39  U R                  S4S2SU R                  S39  U R                  S5S6SU R                  S39  U R                  S7S8SU R                  S39  g )9Nrd  T)r.  r/  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  zchassis.manufacturerchassis_manufacturerzchassis.versionchassis_versionzchassis.serialchassis_serialzchassis.assetchassis_assetzchassis.skuchassis_skuzoemStrings.entry[0-9]*rc  r  zentry[0-9]*zentry[0-9]*.namer   zentry[0-9]*.filer   )r  r  r  r2  r5  r:  r>  r  s    r!   r  !ParserSysinfo._virtcli_class_init  s   005FFs$G 	M=1NN3K-NN3 	)+@A$&67$&67O_5M=S__EL,/O_5 	,.FG')<=')<=&(:;%'89(*>?*,BC%'89$&67O_5M=1,g!$!5!5 	 	7 	M7d!$!7!7 	 	9&$!$!7!7 	 	9&$!$!7!7 	 	9r$   r5   )r0   r1   r2   r3   rI  r  r}  r?  r  r2  r5  r:  r>  r  r  r4   rk  rl  s   @r!   r  r    s   LNL} 	[ 		 	4 	* 	* 	 	} 	l 	 	!": 	0  	0!" 	.#$ 	,%& 	2'G,#0## *9 *9r$   r  c                   L   ^  \ rS rSrSrSrS rS rU 4S jr\	S 5       r
SrU =r$ )	r  i"  qemu_commandline
xmlns_qemuc                 ~    [         R                  " U5       H#  nUR                  R                  5       nXEl        M%     g r&   )r   rL  rC   r  rc  )r    rX  r(   rR  r  r  s         r!   args_cbParserQemuCLI.args_cb&  s,    ;;s#C))##%CI $r$   c                 x    UR                  SS5      u  pEUR                  R                  5       nXFl        XVl        g )NrF  r   )rL  envsr  r   rc  )r    rX  r(   rR  r   envvalr  s          r!   env_cbParserQemuCLI.env_cb+  s0    yya(ii!	r$   c                 V  > U R                   R                  5         U R                  R                  S5      (       a-  U R                  R	                  SS5      S   U R                   S'   OU R                  R                  S5      (       a-  U R                  R	                  SS5      S   U R                   S'   OfU R                  R                  S5      (       a-  U R                  R	                  SS5      S   U R                   S'   OU R                  U R                   S'   [
        TU ]  U5      $ )	Nzenv=rF  r   envzargs=rC   z	clearxml=r  )r~  r  rl  rY  rL  rg  r  r
  s     r!   r  ParserQemuCLI._parse1  s    ;;!!&))"&++"3"3C";A">DLL[[##G,,#';;#4#4S!#<Q#?DLL [[##K00'+{{'8'8a'@'CDLL$#';;DLL w~d##r$   c                     [         R                  U 5        U R                  SS S U R                  SS9  U R                  SS S U R                  SS9  g )NrC   T)r2  r.  r/  rS  )r  r  r  rK  rP  r  s    r!   r  !ParserQemuCLI._virtcli_class_init=  sP    005FDD;;$ 	 	0E44:: 	 	/r$   r5   )r0   r1   r2   r3   rI  r  rK  rP  r  r  r  r4   rk  rl  s   @r!   r  r  "  s0    %L!N

$ / /r$   r  c                 *  ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS5        U" SSSS9  U" S	S	5        U" S
S
5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        S nU(       a  ST R                   S'   U" SSUS9  U(       a	  U" SS5        U(       a!  U" SS SS9  U" S!S"SS9  U" S#S$SS9  U" S%S&SS9  g'g')(z.
Add common Device parameters, like address.*
c                  4   > SUS'   TR                   " U 0 UD6  g r  r  r  s     r!   r  )_add_common_device_args.<locals>._add_argO  r  r$   zaddress.typezaddress.domainzaddress.buszaddress.slotzaddress.multifunctionTrD  zaddress.functionzaddress.controllerzaddress.unitzaddress.portzaddress.targetzaddress.regzaddress.cssidzaddress.ssidzaddress.devnoaddress.iobasezaddress.irqzaddress.basezaddress.zpci.uidzaddress.zpci_uidzaddress.zpci.fidzaddress.zpci_fidz
alias.namec                 P    [        U5      nU R                  R                  X5        g r&   )r  r   reorder_boot_orderr  s       r!   set_boot_order_cb2_add_common_device_args.<locals>.set_boot_order_cbj  s    #h

%%d0r$   r2  z
boot.orderr  zboot.loadparmz
driver.atszvirtio_driver.atszdriver.iommuzvirtio_driver.iommuzdriver.packedzvirtio_driver.packedzdriver.page_per_vqzvirtio_driver.page_per_vqN)r?  )r  r2  boot_loadparmvirtio_optionsr  r]  s   `     r!   _add_common_device_argsra  J  sX   
% ^^,/0]M*^^,$&=!34!#78^^,^^,/0]M*_o.^^,_o./0]M*^^,!34!34\<(1 $0L!|0AB/22TB!6F"84H%,t	=	 r$   c                 f   ^ ^ U4S jnU 4S jnU" US-   SUS9  U" US-   SSUS	9  U" US
-   SSUS9  g )Nc                 <   > SnU R                  UT5      nU" U0 UD6$ )Nr  r  )crC   rD   r  r.  r  s        r!   seclabel_find_inst_cb8_add_device_seclabel_args.<locals>.seclabel_find_inst_cb~  s*    !!&-84"6""r$   c                  4   > SUS'   TR                   " U 0 UD6  g r  r  r  s     r!   r  +_add_device_seclabel_args.<locals>._add_arg  r  r$   source.seclabel[0-9]*.modelrU  r  source.seclabel[0-9]*.relabelr  Tr  source.seclabel[0-9]*.labelr  r  r5   )r  r  rO  re  r  s   ``   r!   _add_device_seclabel_argsrl  }  sV    #%
 V33W24V55y,ACV33W-BDr$   c                 d  ^ ^ S nS nS nU U4S jnU" SS5        U" SSUS9  U" SS5        U" S	S	US9  U" S
S
5        U" SSUS9  U" SS5        U" SS5        U" SS5        U" SS5        [        T STS9  U" SS5        U" SS5        U" SSSS9  U" SSSS9  U" SS5        U" SS5        U" SSSS9  g )!za
Add arguments that represent the CharSource object, which is shared
among multiple device types
c                 :    UR                   R                  U5        g r&   sourceset_friendly_hostrd  rX  r(   rR  s       r!   set_sourcehost_cb0_add_char_source_args.<locals>.set_sourcehost_cb      %%c*r$   c                 :    UR                   R                  U5        g r&   )rp  set_friendly_bindrr  s       r!   set_bind_cb*_add_char_source_args.<locals>.set_bind_cb  ru  r$   c                 :    UR                   R                  U5        g r&   )rp  set_friendly_connectrr  s       r!   set_connect_cb-_add_char_source_args.<locals>.set_connect_cb  s    ((-r$   c                 D   > SUS'   TR                   " TU -   U/UQ70 UD6  g r  r  )r,  r-  rC   rD   r  rO  s       r!   r  '_add_char_source_args.<locals>._add_arg  s+    ,0()FW$h@@@r$   source.pathsource.hostr  zsource.servicesource.bind_hostzsource.bind_servicezsource.connect_hostzsource.connect_servicesource.modezsource.masterzsource.slavezsource.seclabelsrO  protocol.typesource.protocolzlog.filezsource.log_filez
log.appendzsource.log_appendTrD  zsource.clipboard.copypastezsource.clipboard_copypastezsource.mouse.modezsource.mouse_modezsource.channelz
source.tlsN)rl  )r  rO  rs  rx  r|  r  s   ``    r!   _add_char_source_argsr    s    
++.A ]M*]M.?@/0!3D"$9:"$9nM%'?@]M*_o.^^,c#5fE_/0Z*+\.>)+GRVW "56/0\<$7r$   c                 D    U R                   R                  5       (       a  gg)Nqcow2raw)supportconn_default_qcow2)r   s    r!   _default_image_file_formatr    s    ||&&((r$   c                 x    [        U 5      nXl        UR                  [         R                  :w  a  g [	        U 5      $ r&   )r   pool	file_type	TYPE_FILEr  )r   poolobjtmpvols      r!   _get_default_image_formatr    s3    4 FK=222%d++r$   c                     [         R                  " U5      n[         R                  " U R                  XR                  =(       d    SX0S9$ )Ndisk)suffixcollideguest)r   get_file_extension_for_formatfind_free_namer   r   )r   r  fmtexts       r!   _generate_new_volume_namer    s:    

5
5c
:C''

GZZ16( (r$   c                   4  ^  \ rS rSrSrSrSrSr0 SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_0 S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_ErSJ r	U 4SK jr
SL rSM rSN r\SO 5       rSPrU =r$ )Qr  i  r  zdevices.diskrx   Fblockio.logical_block_sizelogical_block_sizeblockio.physical_block_sizephysical_block_sizeiotune.read_bytes_secr*  iotune.write_bytes_secr+  iotune.total_bytes_sectotal_bytes_seciotune.read_iops_secr,  iotune.write_iops_secr-  iotune.total_iops_sectotal_iops_secsource.poolsource_poolsource.volumesource_volumesource.namesource_namer  source_protocolsource.host[0-9]*.namesource_host_namesource.host[0-9]*.portsource_host_portsource.host[0-9]*.socketsource_host_socketsource.host[0-9]*.transportsource_host_transportsource.startupPolicystartup_policyri  zseclabel[0-9]*.modelrj  zseclabel[0-9]*.relabelrk  zseclabel[0-9]*.labelsource.reservations.managedzreservations.managedsource.reservations.source.typezreservations.source.typesource.reservations.source.pathzreservations.source.pathsource.reservations.source.modezreservations.source.modesnapshotsnapshot_policy
target.devr  target.removable	removabletarget.rotation_raterotation_ratedriver.discardrO  driver.detect_zeroesdetect_zeroesdriver.error_policyerror_policy	driver.ior{  driver.namedriver_namedriver.typedriver_typec                     SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a)  U R                   R                  S5      U R                   S'   g g )Nbus
target.busrw  driver.cacher
  r   s    r!   r  "ParserDisk._add_advertised_aliases   s[     DLL )-)9)9%)@DLL&dll"+/<<+;+;G+DDLL( #r$   c                 d  >^  T R                  5         T R                  S:X  a  g S nU 4S jnT R                  R                  SS 5      nT R                  R                  SS 5      nT R                  R                  SS 5      nT R                  R                  SS 5      nU" T R                  R                  SS 5      5      nT R                  R                  S	S 5      n	[	        S
T R                  R                  S
S5      5      n
U" T R                  R                  SS 5      5        T R                  R                  SS 5      nU(       aS  UR                  S5      S:w  a  [        [        S5      5      eUR                  S5      u  pg[        R                  " SXg5        U(       a  Xl        [        TT ]5  U5        U(       a?  U(       d8  U(       d1  UR                  5       (       a  UR                  UR                  :X  a  SnS nS nU(       a~  US:X  a=  [         R"                  " T R$                  R&                  5      nU(       a  UR(                  nT R$                  R&                  R+                  U5      n[         R,                  " U5        U(       a$  UR/                  U5      nUR1                  X5        S nU(       d  UR3                  5       (       a  U	(       d  U(       d  U
(       d  U(       a  U(       d=  UR5                  5       n[6        R8                  R;                  UR=                  5       5      nU(       a'  U	(       d   [?        T R$                  R&                  U5      n	Uc  [A        T R$                  UU	5      n[B        RD                  " T R$                  R&                  XXXUS9nURG                  U5        U$ )Nr  c                     U c  g  [        U 5      $ ! [         a*  n[        [        S5      [	        U5      -  5         S nAg S nAff = f)NzImproper value for 'size': %s)floatrK   r   rW   r   )r(   r   s     r!   
parse_size%ParserDisk._parse.<locals>.parse_size  sF    {BSz! BQ67#a&@AABs   
 
A A  Ac                    > U c  g U S:X  a  STR                   S'   g U S:X  a  STR                   S'   g U S:X  a  g [        [        S5      SU S	.-  5        g )
Nror  readonlysh	shareablerwz+Unknown '%(optionname)s' value '%(string)s'perms)
optionnamer  )r~  r   rW   )r(   r    s    r!   convert_perms(ParserDisk._parse.<locals>.convert_perms  s\    {d{+/Z(,0[)QDE#*c:; <r$   backing_storebacking_formatr  volr=  r_   sparser  r  rd  /r   z8Storage volume must be specified as vol=poolname/volnamez'Parsed --disk volume as: pool=%s vol=%sr   )r  r  r  )$r  rl  r~  ru  r  countr  rW   rL  r   rj   rd  rg  r  is_emptyr  r   build_default_poolr   r   r   storagePoolLookupByNameensure_pool_is_runningstorageVolLookupByNameset_vol_objectwants_storage_creationget_parent_poolrw   rx   basenamer   r  r  r	   build_vol_installset_vol_install)r    rX  r  r  r  r  poolnamevolnamer=  r  r  disktype
newvolnamer  poolxml
vol_objectvol_installri  s   `                r!   r  ParserDisk._parse	  s   $$&;;& 	B	< (($?))*:DA<<##FD1,,""5$/$,,**6489llx. 4<<+;+;He+LMdll&&w56<<##FD1}}S!Q&  $: "; < < 'c 2HII?"-  ItMMOOII' H 
9$%88I&||Hjjoo==hGG..w7 77@J
4G3355DFm..0WW--d.B.B.DE
s/

I!6tzz77:<
$66JJOOZ$#13K   -r$   c                 &    UR                  U5        g r&   )set_source_pathr  s       r!   set_path_cbParserDisk.set_path_cbk  s    S!r$   c                 (    UR                  5       U:H  $ r&   )r   r  s       r!   path_lookup_cbParserDisk.path_lookup_cbm  s    ##%,,r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nhostszsource.hostsr  r  s         r!   host_find_inst_cbParserDisk.host_find_inst_cbp  s,    &$$V;4"6""r$   c                    [         R                  U 5        [        U SSSS9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  SS S U R                  S9  U R                  S	S S U R                  S9  U R                  S
S S U R                  S9  U R                  SS S U R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  S S 5        U R                  S!S"U R
                  S#9  U R                  S$S%U R
                  S#9  U R                  S&S'U R
                  S#9  U R                  S(S)U R
                  S#9  [        U S*5        U R                  S+S U R                  U R                  S,9  U R                  S-S-5        U R                  S.S/5        U R                  S0S05        U R                  S1S15        U R                  S2S25        U R                  S3S35        U R                  S4S5SS9  U R                  S6S6SS9  U R                  S7S7SS9  U R                  S8S9SS9  U R                  S:S5        U R                  S;S<SS9  U R                  S=S>5        U R                  S?S@5        U R                  SAS5        U R                  SBSC5        U R                  SDSE5        U R                  SFSG5        U R                  SHSI5        U R                  SJSKSS9  U R                  SLSM5        U R                  SNSO5        U R                  SPSQ5        U R                  SRSS5        U R                  STSUSS9  U R                  SVSW5        U R                  SXSY5        U R                  SZS[5        U R                  S\S]5        U R                  S^S_5        U R                  S`Sa5        U R                  SbSc5        U R                  SdSe5        U R                  SfSg5        U R                  ShSi5        U R                  SjSk5        U R                  SlSm5        U R                  SnSo5        U R                  SpSq5        U R                  SrSs5        U R                  StSu5        U R                  SvSw5        U R                  SxSy5        U R                  SzS{5        g )|NTr2  r_  r`  r  r  r  r  r  r=  r_   r  rd  r  r  rw  driver_cache
source.dirsource.file
source.devr  r  r  r  r  r  rE  zsource.namespacezsource.managedrD  source.address.domainsource.address.bussource.address.slotsource.address.functionr  r   r  r  portr  socketr  	transportr  rx   r.  r2  r5  r  r  sgiorawioserialwwnr  	read_onlyr  	transientztransient.shareBackingtransient_shareBackingr  r  r  r  r  r  r  r  r  driver_discardr  driver_detect_zeroesr  r  r  r  zdriver.copy_on_readdriver_copy_on_readr  	driver_iodriver.iothreaddriver_iothreaddriver.queuesdriver_queuesr  r  zdriver.discard_no_unrefdriver_discard_no_unrefzdriver.metadata_cache.max_sizedriver_metadata_cache_max_sizez#driver.metadata_cache.max_size.unit#driver_metadata_cache_max_size_unitr  
iotune_rbsr  
iotune_wbsr  
iotune_tbsr  
iotune_risr  
iotune_wisr  
iotune_tisr  r  r  r  zblockio.discard_granularitydiscard_granularityzgeometry.cylsgeometry_cylszgeometry.headsgeometry_headszgeometry.secsgeometry_secszgeometry.transgeometry_transr  reservations_managedr  reservations_source_typer  reservations_source_pathr  reservations_source_mode)	r  r  ra  r  r  r  rl  r   r  r  s    r!   r  ParserDisk._virtcli_class_initv  sj   005tD	J 	OTTcllK$dds||LFDDS\\BE44CLLAFDDS\\BHdds||DHdds||DFDDS\\B 	E5S\\2G^= 	L,/M=1L,/M=1O_5M=1%'89*,<=M=1&(:;$&6F+-DE(*>?)+@A-/HI,f!$!6!6 	 	8,f!$!6!6 	 	8.!$!6!6 	 	81;!$!6!6 	 	8 	"#{3FD??,, 	 	. 	Hh'J 12FF#GW%Hh'E5!Jd;Kt<Kt<,.FQUVL%(&dCL(+*O<NN3$&67*,BCM=1M=1)+@4PK-%'89O_5)>:-/HSWX44	699	; 	+\:,l;,l;*L9+\:+\:02FG13HI13HIO_5$&67O_5$&671*	,5.	05.	05.	0r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r   r  r  r  r  r4   rk  rl  s   @r!   r  r    s   L#NLI($&:(%'<( 	 !1	(
 	!"3( 	!"3( 	( 	 !1( 	 !1( 	}( 	( 	}( 	,( 	!"4(  	!"4!(" 	#$8#($ 	&'>%(& 	 0'(( 	&'=)(* 	()A+(, 	&'=-(0 	&'=1(2 	*+E3(4 	*+E5(6 	*+E7(: 	%;(< 	h=(> 	K?(@ 	A(D 	)E(F 	G(H 	~I(J 	TK(L 	}M(N 	}O(GTE[D"-# k0 k0r$   r  c                      ^  \ rS rSrSrSrSrSr0 SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)S*S+.ErS, r	U 4S- jr
S. rS/ rS0 rS1 rS2 rS3 rS4 r\S5 5       rS6rU =r$ )7r  i  rm  zdevices.interfacerd  Fr  r  r$  r%  filterref.filter	filterref
link.state
link_statemac.addressmac
model.typerU  rom.filerom_filerom.barrom_barr  r  source.portgroup	portgrouprE  r@  r  source_pathr  source_modevirtualport.typevirtualport_type virtualport.parameters.manageridvirtualport_manageridvirtualport.parameters.typeidvirtualport_typeid$virtualport.parameters.typeidversionvirtualport_typeidversionvirtualport_instanceidvirtualport_profileidvirtualport_interfaceid)!virtualport.parameters.instanceid virtualport.parameters.profileid"virtualport.parameters.interfaceidc                    SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;  a  SU R                   ;   aF  [        R                  U R                   S'   U R                   R                  S5      U R                   S'   g SU R                   ;   aF  [        R                  U R                   S'   U R                   R                  S5      U R                   S'   g g U R                   R                  SS 5        U R                   R                  SS 5        g )	NrU  r@  r?  r>  rd  rm  rp  bridge)r~  ru  r   TYPE_VIRTUALTYPE_BRIDGEr   s    r!   r  %ParserNetwork._add_advertised_aliases  s    dll")-)9)9')BDLL&DLL *.,,*:*:5*ADLL' %DLL('6'C'CV$)-)9)9))DX&T\\)'6'B'BV$)-)9)9()CX& * LLY-LLXt,r$   c                 d   > U R                  5         U R                  S:X  a  g [        TU ]  U5      $ )Nr  )r  rl  rg  r  r
  s     r!   r  ParserNetwork._parse  s-    $$&;;& w~d##r$   c                      US:X  a  g X!l         U$ )NRANDOM)r   r  s       r!   
set_mac_cbParserNetwork.set_mac_cb*  s    (?
r$   c                 |    US:X  a  UR                  5         g US:X  a  SUl        SUR                  l        g X!l        g )Nr   passtr   )set_default_sourcerd  backendr  s       r!   r2  ParserNetwork.set_type_cb0  s5    )##%G^DI 'DLLIr$   c                 b    UnUS;   a  X!l         g [        U5      nUSL a  SnOUSL a  SnX!l         g )N)updownTrh  Fri  )r=  r  )r    rX  r(   rR  r  rJ  s         r!   set_link_stateParserNetwork.set_link_state9  s>    . !O!#&$;CE\Cr$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )NportForwardr  r  s         r!   portForward_find_inst_cb&ParserNetwork.portForward_find_inst_cbF  s,    %$$V;4"6""r$   c                 t    U R                   " U/UQ70 UD6nUnSnSnU R                  XV5      nU" U/UQ70 UD6$ )Nrange)rn  r  rr  s           r!   range_find_inst_cb ParserNetwork.range_find_inst_cbL  sP    ,,TCDCFC$$V;$((((r$   c                    SU;   a  UR                  SS5      u  p$OSnSU;   a  UR                  SS5      u  p%OS nSU;   a  UR                  SS5      u  pbOS nSU;   a  UR                  SS5      u  pxOUnS nUR                  (       d  UR                  R                  5         UR                  S   n	XAl        Xal        Xyl        Xl        XYl        g )Nr  r   tcp:r  r   )rX  rq  r  protoaddressstartendto)
r    rX  r(   rP  rw  port_tor  
port_startport_endrangeobjs
             r!   set_port_forward_pretty%ParserNetwork.set_port_forward_prettyU  s    #:C+JCE#:::c1-LCG#:

3*ID#D#:#&::c1#5 JJHzzJJ ::a=
#r$   c                 R    [        UR                  U5      nUR                  U5        g r&   )_lookupNodedevFromStringr   set_from_nodedevr  s       r!   set_hostdev_cbParserNetwork.set_hostdev_cbu  s     &tyy#6c"r$   c                    [         R                  U 5        [        U SSSS9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  S	SU R                  S9  U R                  S
S
U R
                  S9  U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS 5        U R                  S!S U R                  S S"9  U R                  S#S$5        U R                  S%S5        U R                  S&SU R                  S9  U R                  S'S(5        U R                  S)S*U R                  S9  U R                  S+S,5        U R                  S-S.5        U R                  S/S05        U R                  S1S2SS9  U R                  S3S45        U R                  S5S55        U R                  S6S75        U R                  S8S95        U R                  S:S;5        U R                  S<S=5        U R                  S>S?5        U R                  S@SA5        U R                  SBSCU R                  SD9  U R                  SESFU R                  SD9  U R                  SGSHU R                  SD9  U R                  SISJU R                  SD9  U R                  SKSLU R                  SD9  U R                  SMSNU R                  SD9  U R                  SOSPSU R                  SQ9  U R                  SRS S U R                  U R                  SS9  g )TNTr
  rU  r  r?  r   rm  rp  rX  rd  backend.typezbackend.logFiletrustGuestRxFiltersrD  r  rH  rE  r@  r  rG  rE  rF  zsource.address.typezsource_address.typer  zsource_address.domainr  zsource_address.busr  zsource_address.slotr  zsource_address.functionr  r  r  
target_devr@  r>  r:  r;  r<  r=  r  r  r$  r%  rA  rB  rC  rD  zmtu.sizemtu_sizerI  rK  zvirtualport.manageridrM  zvirtualport.typeidrO  zvirtualport.typeidversionrT  zvirtualport.instanceidrU  zvirtualport.profileidrV  zvirtualport.interfaceidzportForward[0-9]*.protorw  r  zportForward[0-9]*.addressrx  zportForward[0-9]*.devr   z#portForward[0-9]*.range[0-9]*.startry  z!portForward[0-9]*.range[0-9]*.endrz  z portForward[0-9]*.range[0-9]*.tor{  z%portForward[0-9]*.range[0-9]*.excludeexcluder  zportForward[0-9]*)r2  r.  r3  )r  r  ra  r  r  r2  r  r`  rj  rn  rr  r  r  s    r!   r  !ParserNetwork._virtcli_class_inity  s   005tD	J 	GW6E96IxCLL9Hh3<<8 	FFs7NN3%'89)+@4PHh'M=1M=1M=1&4)+@A+-DE(*>?)+@A-/HIIt(:(:dKL,/L'*M9@&4L,33E3EFM=1O_5J
+Iy48J
+&&	(6+	-3(	*:/	17,	.6+	-8-	/-w!$!=!= 	 	?/!$!=!= 	 	?+U!$!=!= 	 	?97!$!7!7 	 	97!$!7!7 	 	96!$!7!7 	 	9;Y!0F0F 	 	H'22!$!=!= 	 	?r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r`  r2  rj  rn  rr  r  r  r  r  r4   rk  rl  s   @r!   r  r    s?   L(NLI} 	K 	l	
 	u 	g 	J 	9 	h 	K 	} 	} 	}  	.!" 	+,C#$ 	()=%& 	/0K'( .F,C.G-G2-,$#)@# J? J?r$   r  c                   t   ^  \ rS rSrSrSrSrSrSSSS	S
SSSSSS.
rU 4S jr	S r
S rS r\S 5       rSrU =r$ )r  i  r  zdevices.graphicsrd  FtlsportpasswdpasswdValidToimage_compressionstreaming_modeclipboard_copypastefiletransfer_enable
mouse_modegl
rendernode)
tlsPortpasswordpasswordValidToimage.compressionstreaming.modeclipboard.copypastefiletransfer.enable
mouse.mode	gl.enablegl.rendernodec                 f   > U R                   S:X  a  SU R                  l        g [        TU ]  U5      $ Nr  T)rl  r   skip_default_graphicsrg  r  r
  s     r!   r  ParserGraphics._parse  s-    ;;& /3DJJ,w~d##r$   c                     U(       d  S nOCUR                  5       S:X  a  [        R                  " S5        S nOUR                  5       S:X  a  S nX!l        g )Nlocalz2keymap=local is no longer implemented. Using None.r  )r  r   rj   keymapr  s       r!   set_keymap_cbParserGraphics.set_keymap_cb  sB    CYY[G#IIJKCYY[F"Cr$   c                 x    U R                   (       a  U R                  R                  X!5        g US:X  a  g X!l        g )Nr   )r  r   change_graphicsrd  r  s       r!   r2  ParserGraphics.set_type_cb  s+    <<JJ&&s1iIr$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Nlistensr  r  s         r!   listens_find_inst_cb#ParserGraphics.listens_find_inst_cb  r  r$   c                    [         R                  U 5        [        U 5        U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSU R
                  S9  U R                  SS	5        U R                  S
S5        U R                  SS5        U R                  SS5        U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  S S!SS9  U R                  S"S#5        U R                  S$S%SS9  U R                  S&S'5        g )(Nrd  r  r  r  	websocketlistenr  r  r  r  r  	connecteddefaultModezlistens[0-9]*.typer  zlistens[0-9]*.addressrx  zlistens[0-9]*.networkrm  zlistens[0-9]*.socketr  r  r  r  r  r  r  TrD  r  r  r  r  zzlib.compressionzlib_compressionr  r  r  r  )r  r  ra  r  r2  r  r  r  s    r!   r  "ParserGraphics._virtcli_class_init  s   005$FFs7FF#Iy)K-Hh'Hh3+<+<=J)%7K-M=1(&!$!9!9 	 	;+Y!$!9!9 	 	;+Y!$!9!9 	 	;*H!$!9!9 	 	; 	')<=$&67)+@! 	 	#L,/)+@! 	 	#&(:;K5O\2r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r2  r  r  r  r4   rk  rl  s   @r!   r  r    sd    L'NLI*0*44"%G$# "3 "3r$   r  c                   T   ^  \ rS rSrSrSrSrSSS.rU 4S jrS	 r	\
S
 5       rSrU =r$ )r  i+  
controllerzdevices.controllerrd  masterr%  )master.startportr$  c                   > U R                   S:X  a   [        R                  " UR                  5      $ U R                   S:X  a+  [        R                  " UR                  U R
                  5      $ SU R                  ;   a4  [        U R                  R                  S5      5      U R
                  l	        g [        TU ]-  U5      $ )Nusb2usb3r  )rl  r   get_usb2_controllersr   get_usb3_controllerr   r~  r  ru  r  rg  r  r
  s     r!   r  ParserController._parse4  s    ;;& #88CC[[F"#77		4::NN DLL0-0LL$$%:;.=DJJ*w~d##r$   c                    UnUR                  S5      S;   a  SU;   a  UR                  R                  UR                  l        UR	                  SS5      u  oAR                  l        UR                  SS5      u  oAR                  l        SUR                  l        SU;   a3  UR	                  SS5      u  UR                  l        UR                  l	        g [        [        S5      U-  5      e)Nrv  r   rG   rG  r   r  z#Expected PCI format string for '%s')r  rx  ADDRESS_TYPE_PCIrd  rL  functionrX  slotr  r  r  rW   )r    rX  r(   rR  addrstrs        r!   set_address_cbParserController.set_address_cbF  s     =='C7N $ = =DLL-4]]3-B*G\\*)0Q)?&G\\&"%DLLg~8?c18M5#T\\%5787BD 	Dr$   c                    [         R                  U 5        [        U SS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS	5        U R                  S
S5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS S U R                  S9  U R                  SS S U R
                  S9  g )NTr`  rd  rU  indexmaxGrantFramesvectorsr  master_startportr"  r#  r$  r%  ztarget.chassisNrtarget_chassisNrztarget.chassistarget_chassistarget.porttarget_portztarget.hotplugtarget_hotplugztarget.busNrtarget_busNrztarget.indextarget_indextarget.nodetarget_noderx  r  r  )r  r  ra  r  r  r  r  s    r!   r  $ParserController._virtcli_class_initV  s+   005D9FF#GW%GW%$&67Iy)&(:;%'89O_5&(:;$&67M=1$&67NN3NN3M=1Itt8J8JK)44CLLQr$   r5   )r0   r1   r2   r3   rI  r  r}  r?  r  r  r  r  r4   rk  rl  s   @r!   r  r  +  s@    L)NL$(G
$$D  R Rr$   r  c                   H   ^  \ rS rSrSrSrSrSrU 4S jr\	S 5       r
SrU =r$ )	r  is  r   zdevices.inputrd  Fc                 f   > U R                   S:X  a  SU R                  l        g [        TU ]  U5      $ r  )rl  r   skip_default_inputrg  r  r
  s     r!   r  ParserInput._parsey  -    ;;& ,0DJJ)w~d##r$   c                 \   [         R                  U 5        [        U SS9  U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  S	S
5        U R                  SSSS9  U R                  SS5        U R                  SS5        g )NTr  rd  r0  r  rU  zsource.evdevsource_evdevr  
source_devzsource.repeatsource_repeatrD  zsource.grabsource_grabzsource.grabTogglesource_grabToggler  r  ra  r  r  s    r!   r  ParserInput._virtcli_class_init  s    005D9FF48E56GW%NN3L,/O_tDM=1')<=r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r  r  r  r4   rk  rl  s   @r!   r  r  s  s0    L$NLI$ > >r$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  i  iommuzdevices.iommurU  c                     [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS	SS9  U R                  S
SSS9  U R                  SSSS9  g )NrU  zdriver.aw_bitsaw_bitszdriver.intremapintremapTrD  zdriver.caching_modecaching_modez
driver.eimeimzdriver.iotlbiotlbr  r  s    r!   r  ParserIommu._virtcli_class_init  sw    005GW%$i0%zDA)>DIL%$7NGd;r$   r5   Nr  r5   r$   r!   r  r    s#    L$NL< <r$   r  c                   6    \ rS rSrSrSrSrS r\S 5       r	Sr
g)	r  i  	smartcardzdevices.smartcardr  c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ncertificatecertificatesr  r  s         r!   certificate_find_inst_cb(ParserSmartcard.certificate_find_inst_cb  r  r$   c                     [         R                  U 5        [        U 5        U R                  SSSS9  U R                  SSSS9  [	        U 5        U R                  SSSS9  U R                  SSSU R
                  S	9  g )
Nr  Tr  rd  databaser  zcertificate[0-9]*rc  r  )r  r  ra  r  r  r  r  s    r!   r  #ParserSmartcard._virtcli_class_init  sw    005$FF48FF48c"J
d;'D!$!=!= 	 	?r$   r5   N)r0   r1   r2   r3   rI  r  r}  r  r  r  r4   r5   r$   r!   r  r    s*    L(NL# 
? 
?r$   r  c                   N   ^  \ rS rSrSrSrSrSrS rU 4S jr	\
S 5       rS	rU =r$ )
r  i  redirdevzdevices.redirdevr  Fc                 :    UR                   R                  U5        g r&   ro  r  s       r!   set_server_cbParserRedir.set_server_cb  ru  r$   c                 f   > U R                   S:X  a  SU R                  l        g [        TU ]  U5      $ r  )rl  r   skip_default_usbredirrg  r  r
  s     r!   r  ParserRedir._parse  s-    ;;& /3DJJ,w~d##r$   c                     [         R                  U 5        [        U SS9  U R                  SSSS9  U R                  SSSS9  U R                  SS S U R                  S9  [        U 5        g )NTr2  r  r  rd  serverr  )r  r  ra  r  r   r  r  s    r!   r  ParserRedir._virtcli_class_init  s`    0055E56FF48Hdds7H7HIc"r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r   r  r  r  r4   rk  rl  s   @r!   r  r    s5    L'NLI+$ # #r$   r  c                   T   ^  \ rS rSrSrSrSrSrSSSS.rU 4S	 jr	\
S
 5       rSrU =r$ )r  i  tpmzdevices.tpmrd  FrU   rx   )r  backend.versionbackend.device.pathc                   > U R                   S:X  a  SU R                  l        g U R                  R	                  SS5      R                  S5      (       a(  U R                  R                  S5      U R                  S'   U R                  R	                  S5      S:X  a  U R                  R                  S5        [        TU ]!  U5      $ )Nr  Trd  ri   r  rx   r   )	rl  r   skip_default_tpmr~  r-   rY  ru  rg  r  r
  s     r!   r  ParserTPM._parse  s    ;;& *.DJJ' LLVR(33C88#'<<#3#3F#;DLL  <<F#y0LLV$w~d##r$   c                    [         R                  U 5        [        U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS	5        U R                  S
SSS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )NrU  r  rd  r  rU   r  r(  zbackend.encryption.secretencryption_secretzbackend.persistent_statepersistent_stateTrD  zbackend.debugrj   zbackend.source.typer@  zbackend.source.pathrG  zbackend.active_pcr_banks.sha1zactive_pcr_banks.sha1zbackend.active_pcr_banks.sha256zactive_pcr_banks.sha256zbackend.active_pcr_banks.sha384zactive_pcr_banks.sha384zbackend.active_pcr_banks.sha512zactive_pcr_banks.sha512r  r  s    r!   r  ParserTPM._virtcli_class_init  s   005$GW%NF+%y1)=9/1DE.& 	 	7OW-)=9)=93+d 	 	<5- 	 	>5- 	 	>5- 	 	>r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r  r4   rk  rl  s   @r!   r  r    s@    L"NLI$%G$ > >r$   r  c            	       d   ^  \ rS rSrSrSrSrSrSSSS	S
SSSS.rS r	U 4S jr
\S 5       rSrU =r$ )r  i  rngzdevices.rngbackend.modelFbackend_typebackend_modebackend_hostbackend_servicebackend_connect_hostbackend_connect_service
rate_bytesrate_period)r  zbackend.source.modezbackend.source.hostzbackend.source.servicezbackend.source.connect_hostzbackend.source.connect_service
rate.bytesrate.periodc                     SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a)  U R                   R                  S5      U R                   S'   g g )Nrd  r  r5  re  r
  r   s    r!   r  !ParserRNG._add_advertised_aliases,  s[     T\\!,0LL,<,<V,DDLL)t||#&*ll&6&6x&@DLL# $r$   c                 T  > U R                   S:X  a  SU R                  l        g U R                  5         U R                  R                  SS5      R                  S5      (       a7  U R                  R                  S5      U R                  S'   SU R                  S'   [        TU ]%  U5      $ )Nr  Tr  ri   r  re  random)
rl  r   skip_default_rngr  r~  r-   rY  ru  rg  r  r
  s     r!   r  ParserRNG._parse5  s    ;;& *.DJJ'$$&<<OR0;;C@@&*ll&6&6&GDLL#,4DLL)w~d##r$   c                    [         R                  U 5        [        U SS9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  S	S5        U R                  S
S5        [        U SS9  U R                  SS5        U R                  SS5        g )NTr  rd  backend_modelr  r5  rU  re  r  r  r  zbackend.r  r  r  r   r  )r  r  ra  r  r  r  r  s    r!   r  ParserRNG._virtcli_class_initG  s    005D9 	FO=Hh3<<8GW%Ix(O_5NN3c*5L,/M=1r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r  r  r4   rk  rl  s   @r!   r  r    sU    L"N"LI&--"3'=*C"$	GA$$ 2 2r$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  i_  watchdogzdevices.watchdogrU  c                     [         R                  U 5        [        U 5        U R                  SSSS9  U R                  SSSS9  g )NrU  Tr  rV   r  r  s    r!   r  "ParserWatchdog._virtcli_class_initd  s<    005$GWT:Hht<r$   r5   Nr  r5   r$   r!   r  r  _  s#    L'NL= =r$   r  c                   H    \ rS rSrSrSrSrSSSSS	S
S.rS r\	S 5       r
Srg)r  iq  memdevzdevices.memoryrU  target_sizer  target_label_sizesource_pagesizerG  source_nodemask)target.sizer  target.label_sizesource.pagesizer  source.nodemaskc                 ^    [         R                  " XR                  [        U5      S-  5        g r  r  r  s       r!   set_target_sizeParserMemdev.set_target_size~  r  r$   c                    [         R                  U 5        [        U 5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SSU R                  S9  U R                  S	S	5        U R                  S
S
U R                  S9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  SSSS9  U R                  SSU R                  S9  g )NrU  rz   rO  TrD  r  r4  r  r  r5  ztarget.blockztarget.currentztarget.requestedztarget.readonlyztarget.address_baser6  r  r7  r  zsource.pmemzsource.alignsize)r  r  ra  r  r9  r  s    r!   r   ParserMemdev._virtcli_class_init  sP   005$GW%Hh'Iy48FF#M=S5H5HIM=1')<&& 	 	(NN3$&67&(:;%'84H)+@A%'89M=1%'8DIM=4@&(:&& 	 	(r$   r5   N)r0   r1   r2   r3   rI  r  r}  r?  r9  r  r  r4   r5   r$   r!   r  r  q  sD    L%NL$$0,$,GG ( (r$   r  c                   4    \ rS rSrSrSrSrSr\S 5       r	Sr
g)	r  i  
memballoonzdevices.memballoonrU  Fc                     [         R                  U 5        [        U SS9  U R                  SSSS9  U R                  SSSS9  U R                  SS5        U R                  S	S	SS9  g )
NTr  rU  r  autodeflaterD  zstats.periodstats_periodfreePageReportingr  r  s    r!   r  $ParserMemballoon._virtcli_class_init  s`    005D9GWT:M=4@NN3')<tLr$   r5   N)r0   r1   r2   r3   rI  r  r}  r  r  r  r4   r5   r$   r!   r  r    s*    L)NLIM Mr$   r  c                   L   ^  \ rS rSrSrSrSrSS0rU 4S jr\	S 5       r
S	rU =r$ )
r  i  paniczdevices.panicrU  rZ  iobasec                 
  > [        U R                  5      S:X  a[  U R                  R                  SS5      R                  S5      (       a+  U R                  S   U R                  S'   SU R                  S'   [        TU ]  U5      $ )Nr   rU  ri   0xrZ  isa)rI   r~  r-   rY  rg  r  r
  s     r!   r  ParserPanic._parse  sk    "LLWb)44T::-1\\'-BDLL)*$)DLL!w~d##r$   c                 f    [         R                  U 5        [        U 5        U R                  SSSS9  g )NrU  Tr  r  r  s    r!   r  ParserPanic._virtcli_class_init  s*    005$GWT:r$   r5   )r0   r1   r2   r3   rI  r  r}  r?  r  r  r  r4   rk  rl  s   @r!   r  r    s7    L$NL(G$ ; ;r$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  i  shmemzdevices.shmemr   c                 d   [         R                  U 5        [        U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS	5        U R                  S
S5        U R                  SS5        g )Nr   roler@  rd  r=  z	size.unitr  zserver.pathserver_pathzmsi.vectorsmsi_vectorszmsi.ioeventfdmsi_ioeventfdr  r  s    r!   r  ParserShMem._virtcli_class_init  s    005$FF#FF#L&)FF#K-M=1M=1O_5r$   r5   Nr  r5   r$   r!   r  r    s#    L$NL6 6r$   r  c                   >    \ rS rSrSrSrSrSrSSS.r\	S	 5       r
S
rg)r  i  vsockzdevices.vsockrU  Fauto_cidcid)cid.autocid.addressc                     [         R                  U 5        [        U SS9  U R                  SSSS9  U R                  SSSS9  U R                  SS	5        g )
NTr  rU  r  rY  rW  rD  rZ  rX  r  r  s    r!   r  ParserVsock._virtcli_class_init  sL    005D9GWT:J
T:M5)r$   r5   N)r0   r1   r2   r3   rI  r  r}  r  r?  r  r  r4   r5   r$   r!   r  r    s7    L$NLIG
 * *r$   r  c                   b   ^  \ rS rSrSrSrSSSSSS	.rS
 rU 4S jrS r	S r
\S 5       rSrU =r$ )_ParserChari  rd  F	char_typeprotocoltarget_addresstarget_typer   )rd  r  target.addresstarget.typetarget.namec                 V   SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a(  U R                   R                  S5      U R                   S'   SU R                   ;   a)  U R                   R                  S5      U R                   S'   g g )Nrx   r  r  r  	bind_hostr  r
  r   s    r!   r  #_ParserChar._add_advertised_aliases  s     T\\!*.,,*:*:6*BDLL'T\\!*.,,*:*:6*BDLL'$,,&/3||/?/?/LDLL+, 'r$   c                 
  > U R                   S:X  a"  UR                  S:X  a  SU R                  l        g U R                   S:X  a"  UR                  S:X  a  SU R                  l        g U R                  5         [        TU ]  U5      $ )Nr  r  Tchannel)rl  r\  r   skip_default_consoleskip_default_channelr  rg  r  r
  s     r!   r  _ParserChar._parse  sn    ;;& T%5%5%B.2DJJ+;;& T%5%5%B.2DJJ+$$&w~d##r$   c                     SU R                   ;  a<  U R                   R                  SS 5      S:X  a  UR                  R                  U5        g UR                  R	                  U5        g )Nr  r  bind)r~  r-   rp  rw  r{  r  s       r!   set_host_cb_ParserChar.set_host_cb+  sK    dll2LL]D1V;KK))#.KK,,S1r$   c                 &    UR                  U5        g r&   )set_friendly_targetr  s       r!   set_target_cb_ParserChar.set_target_cb2  rF  r$   c                 V   U R                   (       a  g [        R                  U 5        [        U 5        [	        U 5        U R                  SS5        U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  SSU R                  S9  U R                  S	S
U R                  S9  [        U 5        U R                  SSU R                  S9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        g )Nrd  rx   r  r  r  r  rg  r  r  r  rc  ra  rd  rb  re  target_namer  r  ztarget.model.nametarget_model_name)
rK  r  r  ra  r  r  r  rp  r  rt  r  s    r!   r  _ParserChar._virtcli_class_init5  s     ==005$FF# 	FMcll;FMcll;K!3EFMcoo>c"$&63;L;LMM=1M=1M=1')<=r$   r5   )r0   r1   r2   r3   r}  r  r?  r  r  rp  rt  r  r  r4   rk  rl  s   @r!   r^  r^    sL    LI#*$G	M	$ 2& > >r$   r^  c                       \ rS rSrSrSrSrg)r  iR  r  zdevices.serialr5   Nr0   r1   r2   r3   rI  r  r4   r5   r$   r!   r  r  R  s    L%Nr$   r  c                       \ rS rSrSrSrSrg)r  iW  parallelzdevices.parallelr5   Nr{  r5   r$   r!   r  r  W  s    L'Nr$   r  c                       \ rS rSrSrSrSrg)r  i\  rj  zdevices.channelr5   Nr{  r5   r$   r!   r  r  \      L&Nr$   r  c                       \ rS rSrSrSrSrg)r  ia  r  zdevices.consoler5   Nr{  r5   r$   r!   r  r  a  r  r$   r  c                   <    \ rS rSrSrSrSS/rSS0r\S 5       r	S	r
g
)r  ij  
filesystemzdevices.filesystemrp  r  
accessmoder  c                    [         R                  U 5        [        U SS9  U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SSSS9  U R                  S	S	5        U R                  S
S
5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS 5        U R                  S!S"5        U R                  S#S$5        U R                  S%S&SS9  U R                  S'S(5        U R                  S)S*SS9  U R                  S+S,SS9  U R                  S-S.5        U R                  S/S05        U R                  S1S25        U R                  S3S45        U R                  S5S65        U R                  S7S85        g )9NTr  rd  r  rU  	multidevsr  rD  space_hard_limitspace_soft_limitfmodedmoderp  r  r  source_filer  
source_dirr  r  r  r  r  r  r  r  zsource.unitssource_unitszsource.usagesource_usagezsource.socketsource_socketz
target.dir
target_dirzbinary.pathbinary_pathzbinary.xattrbinary_xattrzbinary.cache.modebinary_cache_modezbinary.lock.posixbinary_lock_posixzbinary.lock.flockbinary_lock_flockzbinary.sandbox.modebinary_sandbox_modezdriver.formatdriver_formatr  r  zdriver.queuedriver_queuer  r  zdriver.wrpolicydriver_wrpolicyr  r  s    r!   r  $ParserFilesystem._virtcli_class_initr  s   005D9FF#L,/GW%K-J
T:&(:;&(:;GW%GW%Hh'Hh'M=1L,/L,/M=1M=1O_5NN3NN3O_5L,/M=1NNTB')<=')<tL')<tL)+@AO_5M=1NN3M=1%'89r$   r5   Nr0   r1   r2   r3   rI  r  r}  r?  r  r  r4   r5   r$   r!   r  r  j  s6    L)Nh'LfG (: (:r$   r  c                   D    \ rS rSrSrSrSrSSSSS	S
SS.r\S 5       r	Sr
g)r  i  videozdevices.videor@  rU  headsramvramvram64vgamemaccel3d)r@  model.heads	model.ram
model.vrammodel.vram64model.vgamemmodel.acceleration.accel3dc                 ^   [         R                  U 5        [        U SS9  U R                  SSSS9  U R                  SSSS9  U R                  S	S
5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        g )NTr  r@  rU  r  r  r  rD  r  r  r  r  r  r  r  r  r  r  z
model.blobblobr  r  s    r!   r  ParserVideo._virtcli_class_init  s    005D9L'$?0)dKM7+K'L&)NH-NH-L&)r$   r5   Nr  r5   r$   r!   r  r    sA    L$NL  &/G * *r$   r  c                   N   ^  \ rS rSrSrSrSrSrU 4S jrS r	\
S 5       rS	rU =r$ )
r  i  r  zdevices.soundrU  Fc                 f   > U R                   S:X  a  SU R                  l        g [        TU ]  U5      $ r  )rl  r   skip_default_soundrg  r  r
  s     r!   r  ParserSound._parse  r  r$   c                 <    SnSnU R                  X45      nU" U0 UD6$ )Ncodeccodecsr  r  s         r!   codec_find_inst_cbParserSound.codec_find_inst_cb  r  r$   c                    [         R                  U 5        [        U 5        U R                  SSSS9  U R                  SS5        U R                  SSU R                  S9  U R                  S	S	5        U R                  S
S
5        g )NrU  Tr  zaudio.idaudio_idzcodec[0-9]*.typerd  r  multichannelstreams)r  r  ra  r  r  r  s    r!   r  ParserSound._virtcli_class_init  ss    005$GWT:J
+&!$!7!7 	 	9NN3Iy)r$   r5   )r0   r1   r2   r3   rI  r  r}  r  r  r  r  r  r4   rk  rl  s   @r!   r  r    s5    L$NLI$# 	* 	*r$   r  c                   ,    \ rS rSrSrSr\S 5       rSrg)r  i  audiozdevices.audioc                 v    [         R                  U 5        U R                  SS5        U R                  SS5        g )Nrd  r  r  r  s    r!   r  ParserAudio._virtcli_class_init  s,    005FF#D$r$   r5   Nr  r5   r$   r!   r  r    s    L$N   r$   r  c                    [        U 5      nUR                  S5      S;   a  SU;   a  UR                  SS5      u  pUR                  SS5      u  pSnSU;   a  UR                  SS5      u  pVOUnSUl        S[        US5      -  Ul        S	[        US5      -  Ul        S	[        US5      -  Ul        S	[        US5      -  Ul	        U$ SU;   aD  UR                  S5      u  pxS
Ul        S[        US5      -  Ul
        S[        US5      -  Ul        U$ SU;   a)  UR                  SS5      u  piS
Ul        Xbl	        Xl        U$ [        SU-  5      e)a  
Decompose common USB and PCI address string formats into a DeviceHostdev
instance. The 3 expected formats are:

- bus.addr (ex. 001.003 for a usb device)
- vendor:product (ex. 0x1234:0x5678 for a usb device
- (domain:)bus:slot.func (ex. 00:10.0 for a pci device)
rv  r  rG  r   r  pciz0x%.4X   z0x%.2Xusbz*Unknown hostdev address string format '%s')r   r  rL  rX  rd  r  r  r  r  r  r  productr5  r}   )
r   r  r  funcr  r  r  r  r  r5  s
             r!   _AddressStringToHostdevr    s]    D!G}}SV#wc1-sA.'>!--Q/KFCC!CO3#c$m3#dB-/S"-* N' 
!--,!CO3"S"%55 N 
mmC+
 N <wFH 	Hr$   c                 N    [        X5      nSnS nU R	                  5        H"  nUR                  U5      (       d  M  UnUS-  nM$     US:  a  [        [        S5      U-  5      eUS:  a  [        [        S5      U-  5      eU$ ! [         a    [        R                  " SSS9  e f = f)Nz!Error parsing node device string.Tr   r   r   z'%s corresponds to multiple node devicesz,Did not find a matching node device for '%s')r  rK   r   rj   fetch_all_nodedevscompare_to_hostdevr  rW   )r   r  r  r  nodedevxmlobjs         r!   _AddressStringToNodedevr  #  s    )$8
 EG))+$$W--GQJE ,
 qyDE ! " 	"qyIJ ! " 	"N%  		5Es   B !B$c                     [         R                  " X5      nU(       a  U$  [        X5      $ ! [         a    [        R
                  " SUSS9  e f = f)Nz)Error looking up nodedev from idstring=%sTr   )r   lookupNodedevByNamer  rK   r   rj   )r   idstringr  s      r!   r  r  ;  sP    ,,T<G&t66 		=t	%s	   
, "Ac                   F    \ rS rSrSrSrSrSSS.rS rS	 r	\
S
 5       rSrg)r  iJ  r  zdevices.hostdevr   r  rD  )r  rC  c                    UR                   S:X  a  SUl        X!l        g UR                   S:X  a  SUl        X!l        g UR                   S:X  a  SUl        X!l        g [        UR                  U5      nUR                  U5        g )Nnetcapabilitiesmiscstorage)rd  r  net_interface	misc_charstorage_blockr  r   r  r  s       r!   set_name_cbParserHostdev.set_name_cbS  sj    99&DI!$YY& &DI NYY)#&DI!$*499c:C!!#&r$   c                 P    [        UR                  U5      nUR                  U5      $ r&   )r  r   r  )r    rX  r(   rR  r  s        r!   name_lookup_cbParserHostdev.name_lookup_cba  s#    *499c:))$//r$   c                     [         R                  U 5        [        U SS9  U R                  SS5        U R                  SS U R                  U R
                  S9  U R                  SS5        U R                  SS	SS
9  g )NTr  rd  r   r  r  r  rC  rD  rD  )r  r  ra  r  r  r  r  s    r!   r  !ParserHostdev._virtcli_class_inite  so    0055FF#FD!00 	 	2 	M=1Iy48r$   r5   N)r0   r1   r2   r3   rI  r  r}  r?  r  r  r  r  r4   r5   r$   r!   r  r  J  s<    L&NL$G
'0 	9 	9r$   r  c                   0    \ rS rSrSrSrSr\S 5       rSr	g)r  iv  launchSecurityrd  c                    [         R                  U 5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  S	S	5        U R                  S
S
5        U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )Nrd  cbitposreducedPhysBitsrd  sessiondhCertguestVisibleWorkaroundsidBlockidAuthhostDatakernelHashesTrD  	authorKeyvcekr  r  s    r!   r  (ParserLaunchSecurity._virtcli_class_init{  s    005FF#Iy)%'89Hh'Iy)Hh'-/HIIy)Hh'J
+NNTBKt<FFT2r$   r5   Nr  r5   r$   r!   r  r  v  s#    #L%NL3 3r$   r  c                     / n[         R                  " U5       H=  nU" XP[        U5      S9nUR                  U5      nU[         R                  " U5      -  nM?     U$ )z
Lookup the cli options.* string associated with the passed in Parser*
class, and parse its values into the passed guest instance, or editinst
for some virt-xml usage.
)r   r  )r   rH  r   r  )r   rQ  parservalueeditinstrJ  rl  	parserobjparserets           r!   
run_parserr    sT     C//+.T(^L	??8,wx(( /
 Jr$   c                 l    / n[          H'  n[        XR                  5      nU[        XU5      -  nM)     U$ r&   )r6  r_  rI  r  )r  r   rJ  rQ  r  s        r!   run_all_parsersr    s9    
C#g'?'?@z%k:: $ Jr$   c                    Sn[        5        Hz  n[        XR                  5      (       d  M  [        R                  " [        XR                  5      5      nU(       d  MQ  U H#  nUS:X  d  US:X  d  M  UR                  5         SnM%     M|     U$ )zF
Check if the user requested option introspection with ex: '--disk=?'
Fr  r  T)r=  r  rI  r   rH  r_  r  )r  rJ  rQ  optlistrl  s        r!   check_option_introspectionr    sy     C-/w 8 899//''3K3K"LMF}& 0//1  0 Jr$   c                     U R                   S:w  a  g[        R                  " 5        H'  n[        SR	                  UR
                  5      5        M)     [        5         [        [        S5      5        g)Nrk  Fz, z<You can see additional information with:

  osinfo-query os
T)r  r   list_osr   rk   	all_namesrW   )r  r  s     r!   check_osinfo_listr    sP    V#dii()   
G	!M
NOr$   )F)Tr&   )FT)FFFFFFF)TF)FFF)ri   )r@   rz  rw   r!  r   shutilrn   rl   r  r   ri   r   buildconfigr   
connectionr   r  r   r   r	   r
   r   r   r   r   loggerr   r   r  r   osdictr   r  r   r   install.unattendedr   install.cloudinitr   whichr  r  r   r7   r8   r:   r6  rA   r<   r\   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r0  r4  r=  rV  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r7  r*  rN  rn  r  rd  r  r  r   r  r  r'  r9  r=  rA  r7  rK  r:  rX  r_  r;  rn  r8  rz  r|  r<  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ra  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r^  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r5   r$   r!   <module>r	     si     	 	   
     $ *( (  &   / . , m,<6 <$ "
 $<< $6 CM7h
6	 
J=	
-'&T*''5!%4P"0(-hB 16/4,1#(?:D@$=0# eEPI(X
D
& 2	<& &$ %&XV Xv] v ] @04n 6f"j f"Z	, ,BH:3 3.3 3,.} .8- 8,)?M ?$	 	8m 8($
8] 
8
B"1F 1h#m #(!Hv 8C%] %:	8= 	8 	P] 	P 7] 7D8K= 8K~6M 6$":m ":R"@- "@RY= Y=@D8M D8VCm CLV8 V8zl. l.f.- .6>] >$6M 6.=4] =4H^9- ^9JQ} Q&}9M }9H!/M !/R ?D0=fD(#8T,(Q0 Q0p[?M [?DY3] Y3@AR} ARP>- >@<- <*?m ?:#- #>1> 1>p<2 <2F=] =$'(= '(\M} M*;- ;:6- 66*- *0K>- K>\&; &
([ (
'K '
'K '1:} 1:p*- *B*- *>	 - 	  .b0%9M %9X3= 36 (	r$   