
    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J	r	  SSK	J
r
JrJrJr  SSKJr  SSKJr  SSK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 r"S r#S r$S r%S r&S r'S r(S r)S9S jr*S  r+S! r,S" r-S# r.S$ r/S% r0S& r1S' r2S( r3 " S) S*5      r4S+ r5S, r6 " S- S.5      r7S/ r8S0 r9S1 r:S2 r;S3 r<S4 r=S5 r>S6 r?S9S7 jr@S8 rAg):    N   )cli)failfail_conflictingprint_stdoutprint_stderr)Network)Guest)logzD--location URL, --cdrom CD/ISO, --pxe, --import, --boot hd|cdrom|...c                    U R                   R                   H  nUR                  UR                  :X  a  M  UR                  UR                  :w  a    g UR
                  R                  UR                  5      n[        UR
                  UR                  S5      S9nUR                  5       s  $    g! [         a    [        R                  " SSS9     gf = f)zC
Return False if we are pretty sure the config doesn't support PXE
Tr   )parsexmlzError checking if PXE supportedexc_infoF)devices	interfacetype	TYPE_USERTYPE_VIRTUALconnnetworkLookupByNamesourcer	   XMLDesccan_pxe	Exceptionr   debug)guestnicnetobjxmlobjs       //usr/share/virt-manager/virtinst/virtinstall.pysupports_pxer!      s     }}&&88s}}$88s'''	XX11#**=FSXXq0ABF>>## ' 	  	II7$G	s   AB00CCc                     U R                   (       a  U R                  (       a  [        SS5        U R                   (       a6  SU R                   ;   a  [        [	        S5      5        U R                   U l        g g )N-c--cdromz://zk-c specified with what looks like a libvirt URI. Did you mean to use --connect? If not, use --cdrom instead)cdrom_shortcdromr   r   _optionss    r    check_cdrom_option_errorr*   3   sZ    w}}y)G'''     ++     c                 N    U R                   (       a  U R                   U l        U ? g g N)xmlstepxmlonlyr(   s    r    convert_old_printxmlr0   C   s    !//O r+   c                     U R                   (       d  g [        U R                   5       H&  u  pU R                   U   b  M  SU R                   U'   M(     g )Ndefault)sound	enumerate)r)   idxdummys      r    convert_old_soundr7   I   s>    ==.
==%!*GMM# /r+   c                     U R                   (       d  g U R                  (       d  S/U l        U R                  S==   SU R                   -  -  ss'   [        R                  " SU R                  S   5        g )N z,init=%sz!Converted old --init to --boot %s)initbootr   r   r(   s    r    convert_old_initr=   Q   sQ    <<<<tLL
W\\11II17<<3CDr+   c           	      2   [         R                  R                  U R                  5      n[         R                  R                  U R                  5      nS nU" U[        S[        U5      5      5      nU" U[        U5      5      n/ n[        U5       H}  u  pxSn	U(       a  U	SU-  -  n	XW   (       a  U	(       a  U	S-  n	U	SXW   -  -  n	U R                  SL a  U	(       a  U	S-  n	U	S-  n	[        R                  " S	U	5        UR                  U	5        M     X`l        g )
Nc                     [         R                  R                  U 5      n U R                  U[	        U 5      -
  S /-  5        U $ r-   virtinstxmlutillistifyextendlenlpadsizes     r    padlist&_do_convert_old_disks.<locals>.padlist^   9    $$Q'	'CF"tf,-r+   r   r9   zpath=%s,zsize=%sFz	sparse=noz!Converted to new style: --disk %s)rA   rB   rC   
file_pathsdisksizemaxrE   r4   sparser   r   appenddisk)
r)   pathssizesrI   disklistsizelistoptsr5   pathoptstrs
             r    _do_convert_old_disksrZ   Z   s    $$W%7%78E$$W%5%56E
 uc!SZ01Huc(m,HDx(	i$&&F=#i(-//F>>U"#k!F		5v>F ) Lr+   c                 "   U R                   (       aG  U R                  (       d"  U R                  (       d  U R                  (       a  [	        [        S5      5        U R                  (       d"  U R                  (       d  U R                  (       d%  U R                  (       a  [	        [        S5      5        U R                  (       d%  U R                   (       a	  S/U l        O[        U 5        U ?U ?U ?U ? [        R                  " SU R                  5        g )Nz(Cannot specify storage and use --nodiskszoCannot mix --file, --nonsparse, or --file-size with --disk options. Use --disk PATH[,size=SIZE][,sparse=yes|no]nonezDistilled --disk options: %s)
nodisksrM   rR   rN   r   r'   rP   rZ   r   r   r(   s    r    convert_old_disksr^   y   s    G..#LL#,,Q9:;			w//w~~Q F G 	H <<??"8GL!'*II,gll;r+   c                 j    U R                   (       d  g [        R                  " [        S5      5        U ? g )Nz?--os-type is deprecated and does nothing. Please stop using it.)old_os_typer   warningr'   r(   s    r    convert_old_os_optionsrb      s*    KK	
KLNr+   c                     U R                   (       a  g U R                  (       d  g [        U R                  5      U l         g r-   )memory	oldmemorystrr(   s    r    convert_old_memoryrg      s*    ~~**+GNr+   c                     U R                   (       d  g U R                  =(       d    / nUR                  SU R                   -  5        Xl        [        R                  " SU R                  S   5        g )Nz
,cpuset=%sz#Generated compat cpuset: --vcpus %sr:   )cpusetvcpusrQ   r   r   )r)   newvcpuss     r    convert_old_cpusetrl      sL    >>}}"HOOL7>>12MII3W]]25FGr+   c                 P   U R                   (       a  S/U l        [        R                  R	                  U R
                  5      n[        R                  R	                  U R                  5      n[        R                  R	                  U R                  5      nU(       a  U(       a  [        SS5        U(       a  U Vs/ s H  nSU-   PM
     nnS nU" U[        [        U5      S5      5      nU" U[        U5      5      n[        U5       Hj  u  pgX&   c  SX&'   X   (       a  X&==   SX   -  -  ss'   S	 H<  nX&   R                  US
-   5      (       d  M   X&   R                  US
-   US-   5      X&'   M>     Ml     U ?U ?U ? X l        [        R                  " SU R                  5        g s  snf )Nr\   --bridgez	--networkzbridge:c                     [         R                  R                  U 5      n U R                  U[	        U 5      -
  S /-  5        U $ r-   r@   rF   s     r    rI   %convert_old_networks.<locals>.padlist   rK   r+   r   r2   z,mac=%s)networkbridge:=zDistilled --network options: %s)
nonetworksrq   rA   rB   rC   macrr   r   rO   rE   r4   
startswithreplacer   r   )	r)   macsnetworksbridgesbrI   r5   ignoreprefixs	            r    convert_old_networksr      sf   !(##GKK0D''8H&&w~~6G8[1+237aIM73 xSY!23H4X'D *= %HM9MY22M ,F}''55 ( 5 5fsl6<sl!D , + 	OII/A9 4s   :F#c                    U R                   nU R                  nU R                  nU R                  nU R                  nU R
                  nU R                  nU(       a7  U(       d  U(       d  U(       d  U(       d  U(       a  [        [        S5      5        [        S XXW4 5       5      nUS:  a  [        [        S5      5      eU R                  (       a  g US:X  a  g U=(       a    S=(       d    U=(       a    S=(       d    U=(       a    Sn	U(       a  U	S	U-  -  n	U(       a  U	S
U-  -  n	U(       a  U	SU-  -  n	[        R                  " SU	5        U	/U l        g )Nz5Cannot mix --graphics and old style graphical optionsc              3   8   #    U  H  n[        U5      v   M     g 7fr-   )bool).0gs     r    	<genexpr>'convert_old_graphics.<locals>.<genexpr>   s     C"BQa"Bs   r   zCCan't specify more than one of VNC, SDL, --graphics or --nographicsr   vncsdlr\   z
,listen=%sz,port=%sz
,keymap=%sz--graphics compat generated: %s)r   vncport	vnclisten
nographicsr   keymapgraphicsr   r'   sum
ValueErrorr   r   )
r)   r   r   r   r   r   r   r   optnumrY   s
             r    convert_old_graphicsr      s'   
++CooG!!I##J
++C^^FHSC6W	QFGHC3C"BCCFz 8 9 : 	: { }u (}u(&v  ,***w&&,''II/8xGr+   c                     U R                   (       a  g / nU R                  (       a  UR                  S5        U R                  (       a  UR                  S5        U(       a  SR	                  U5      /U l         g g )Nzacpi=offzapic=offrL   )featuresnoacpirQ   noapicjoin)r)   rW   s     r    convert_old_featuresr      sT    D~~J~~JHHTN+ r+   c                 n    U R                   S:X  a%  [        R                  " S5        SU l        S U l         g g )Nr   z$Treating --wait 0 as --noautoconsoler\   )waitr   ra   autoconsoler(   s    r    convert_wait_zeror   
  s/    ||q:;$ r+   c                 r   UR                   n[        R                  " U 5      nUR                  (       a  UR                  UR                  l        UR
                  (       a  UR
                  UR                  l        UR                  5         [        R                  " XS9n[        UR                  U5      SS9  g )N)locationTdo_force)
test_media_detectionrA   r
   archosos_typeset_capabilities_defaults	Installerr   detect_distro)r   r)   urlr   	installers        r    do_test_media_detectionr     sy    

&
&CNN4 E||"??	##%""46I((/$?r+   c                     UR                   R                  5       (       a  gU R                  =(       d    U R                  $ NT)r   is_containerrR   
filesystemr)   r   s     r    storage_specifiedr   '  s-    xx<<-7---r+   c                 z    U R                   =(       d)    U R                  =(       d    U R                  R                  $ r-   )rd   currentMemorycpucellsr   s    r    memory_specifiedr   -  s$    <<A5..A%))//Ar+   c                 p   SnU R                   (       dB  [        U5      (       d  US[        S5      -   -  n[        X5      (       d  US[        S5      -   -  nUR                  R                  5       (       d/  UR                  5       (       d  US[        S5      S[        0-  -   -  nU(       a  [        U5        g g )Nr9   
z"--memory amount in MiB is requiredz<--disk storage must be specified (override with --disk none)z1An install method must be specified
(%(methods)s)methods)		reinstallr   r'   r   r   r   options_specifiedINSTALL_METHODSr   )r)   r   r   msgs       r    validate_required_optionsr   1  s     C&&4!@AAAC 004PQS SC 88  ""9+F+F+H+HtBC()* 	* S	 r+   c                     U R                   (       d  g UR                  5       (       d  g [        R                  " [	        S5      S-   [	        S5      -   5        g )NzCDROM media does not print to the text console by default, so you likely will not see text install output. You might want to use --location. zBSee the man page for examples of using --location with CDROM media)r&   is_textr   ra   r'   )r   r   s     r    show_console_warningsr   G  sR    ??  KK , -/23 	
 . 	// 0r+   c                    U R                   (       d  g U R                  R                  5       nU R                   S-  nUR                  U R                  R
                  5      =(       d    SnU(       aO  US-  U R                   :  a;  [        R                  " [        S5      X#S-  U R                  R                  S.5        g g US:  a!  [        R                  " [        S5      U5        g g )N   r   zYRequested memory %(mem1)s MiB is less than the recommended %(mem2)s MiB for OS %(osname)s   )mem1mem2osname   zJRequested memory %s MiB is abnormally low. Were you trying to specify GiB?)
r   osinfoget_recommended_resourcesget_minimum_ramr   r   r   ra   r'   name)r   resrammbminrams       r    _show_memory_warningsr   S  s    
,,
0
0
2C4'E!!%((--05AFdNe111KK = >;(? <<,,./ 2
 
A . /05	7 
r+   c                 6    U R                   R                  5       $ r-   )r   is_hvmr   s    r    _needs_accurate_osinfor   e  s     88??r+   c                 x   U R                   (       a/  [        U5      (       d  [        R                  " [	        S5      5        UR
                  R                  5       (       aP  [        U5      (       a@  [        R                  " [	        S5      R                  UR
                  R                  S95        [        U5        g )Nz5The guest's network configuration may not support PXEz_Using --osinfo {osname}, VM performance may suffer. Specify an accurate OS for optimal results.)r   )pxer!   r   ra   r'   r   
is_genericr   formatr   r   r   s     r    show_guest_warningsr   o  s    {{<..EF	H ||  %;E%B%B < ==CV<<$$ >D >&	'
 % r+   c                     [         R                  R                  USS9nUR                  U R                  R
                  U5      n[        [        S5      R                  XS95        U$ )NT)raise_errorzUsing {osname} --location {url})r   r   )	rA   OSDB	lookup_osget_locationr   r   r   r'   r   )r   r   profiler   r   s        r    get_location_for_osr     s]    ]]$$V$>F""588==':H45<< = % &Or+   c                    S nS nS nS n[        U R                  5      nS nU R                  n	UR                  n
UR                  nUR
                  nUR                  nUR                  nUR                  nUR                  (       a+  UR                  (       a  UR                  nOUR                  /n	U R                  (       a(  U R                  (       a  [        R                  " SS5        U R                  (       a   [        R                  " U R                  5      nU(       a"  U(       a  UR                  OS n[!        XU5      nOU R"                  (       a%  [        R$                  " U R"                  5      u  nnnOU R&                  (       a   U R&                  nU R(                  (       a  SnOaU R*                  (       a  Sn
OMUR,                  (       a  O;U R.                  (       a  SnO'U R0                  (       a  SnOU R2                  (       a  Sn[4        R6                  " UR8                  UUUUU
UUUUUS9nU(       a  UR;                  U5        U	(       a  UR=                  U	5        U R>                  (       a  URA                  U R>                  5        U RB                  (       a  SUl!        U R                  (       a1  [        RD                  " U R                  5      nURG                  U5        U$ )N--unattended--cloud-initTrq   )
r&   r   location_kernellocation_initrdinstall_bootdevinstall_kernelinstall_initrdinstall_kernel_args
no_installis_reinstall)$r   r   
extra_argsbootdevkernelinitrdkernel_argsr   r   kernel_args_overwrite
unattended
cloud_initr   r   parse_unattendedr   r   r   parse_locationr&   livecdr   is_setr/   import_installboot_was_setrA   r   r   set_unattended_dataset_extra_argsinitrd_injectset_initrd_injections	autostartparse_cloud_initset_cloudinit_data)r)   r   installdatar&   r   r   r   r   unattended_datar   r   r   r   r   
install_osr   r   r   cloudinit_datas                      r    build_installerr    sC   EHOO))*LO##J!))O ''N ''N%11J''J,,"-"9"9%112Jg00^^<..w/A/AB-</))$&u'B			  ..w/?/?@				>>J	#				
			
			
""5::+++)) 3!%
'I %%o6  ,''(=(=>"	--g.@.@A$$^4r+   c                     U R                   (       dR  [        R                  R                  U 5      n[        R
                  " [        S5      R                  US95        Xl         g g )NzUsing default --name {vm_name})vm_name)r   rA   r
   generate_namer   r   r'   r   )r   default_names     r    set_cli_default_namer	    sQ    ::~~33E:;<CC  D " 	#!
	 r+   c           	         UR                   R                  5       (       aI  [        U5      (       d8  Sn[        R                  " [        S5      R                  US95        US-  Ul        g U R                  (       a  UR                  R                  5       (       ar  UR                  R                  UR                   R                  5      (       a>  UR                  UR                  R                  UR                   R                  5      5        UR                  R                  5       nUR!                  UR                   R                  5      nUR#                  UR                   R                  5      nUR%                  UR                   R                  5      nU(       a  [        U5      (       dw  ['        US-  5      R)                  S5      R)                  S5      n[        R                  " [        S5      R                  UR                  R*                  US95        US-  Ul        U(       a  UR-                  U5        U(       a  [/        X5      (       du  S	US
-  -  n[        R                  " [        SR                  UR                  R*                  US95      5        U/U l        [        R2                  " XqS9R5                  S 5        g g g )Nr   z,Using container default --memory {megabytes})	megabytesr   0.z,Using {os_name} default --memory {megabytes})os_namer  zsize=%di   @z-Using {os_name} default --disk {disk_options})r  disk_optionsr   )r   r   r   r   r   r'   r   r   r   r   
is_windowssupports_unattended_driversr   add_extra_driversget_pre_installable_devicesr   get_recommended_storageget_recommended_ramget_recommended_ncpusrf   rstripr   sync_vcpus_topologyr   rR   
ParserDiskparse)r)   r   mbramr   storageramncpusdiskstrs           r    set_cli_defaultsr     s)   xx&&E @AHH I !" #($,E!!00??88G	I ,,
0
0
2C))%((--8G

!
!%((--
0C%%ehhmm4E
#E**C;'(//4;;C@<=DDLL%% E 8	9 "Tk!!%((88w956=DDLL%%G E = >	?  yw,2248 9wr+   c                    U R                   (       a  U R                   Ul         S U l         U R                  (       a  U R                  Ul        S U l        U R                  (       a  U R                  Ul        S U l        U R                  (       a"  U R                  UR                  l        S U l        U R
                  (       a  U R
                  Ul        S U l        U R                  (       a"  U R                  UR                  l        S U l        U R                  (       a#  U R                  UR                  l        S U l        g g r-   )	r   uuiddescriptionr   r   	virt_typer   r   machiner   s     r    set_explicit_guest_optionsr&    s    ||\\
||\\
#//""??&&
 ||"?? r+   c                 T   Sn S nUR                  5       (       a#  UR                  5       nSnU R                  U5        UR                  U 5      nUR                  5       (       aP  U(       a  SnU R                  U5        O5U(       a.  [	        S5      R                  US9n[        R                  " U5        [	        S5      nU(       a  g UR                  5       (       a  [        U5        [        U 5      (       d  g US-   nU[	        S5      -  n[	        S	5      n	[        UR                  =(       d    UR                  5      n
U
(       a  US
U	-   -  nUS
[	        S5      -   -  n[         R"                  R%                  5        Vs/ s H&  nUR'                  5       (       d  M  UR(                  PM(     nn[	        S5      R                  SR+                  U5      S9nU(       a  US
U-   -  nSnUS
[	        S5      R                  US9-   -  nS
U-   nU[,        R.                  ;   aE  [        R                  " U5        [	        S5      R                  US9n[        R                  " U5        g [        U5        g ! [         a+  n[        [	        S5      [        U5      -  5         S nAGNS nAff = fs  snf )NFTzFailed to detect osinfo OS name from install media, using fallback name '{name}'.
Please file a bug against virt-install if you expected the detection to succeed.)r   z%Error validating install location: %szL--os-variant/--osinfo OS name is required, but no value was
set or detected.z

zzThis is now a fatal error. Specifying an OS name is required
for modern, performant, and secure virtual machine defaults.
zIf you expected virt-install to detect an OS name from the
install media, you can set a fallback OS name with:

  --osinfo detect=on,name=OSNAME
r   zXYou can see a full list of possible OS name values with:

   virt-install --osinfo list
zPIf your Linux distro is not listed, try one of generic values
such as: {oslist}
z, )oslist"VIRTINSTALL_OSINFO_DISABLE_REQUIREzuIf you just need to get the old behavior back, you can use:

  --osinfo detect=on,require=off

Or export {env_var}=1
)env_varz${env_var} set. Skipping fatal error.)get_nameset_os_namer   	is_detectr'   r   r   ra   r   r   rf   is_require_onr   r   r   r&   rA   r   list_osis_linux_genericr   r   r   environ)r   r   osdataos_setfallback_name
autodistror   efail_msg
detect_msgpossibly_detectableogeneric_linux_namesgeneric_linux_msgenvkeyms                   r    installer_detect_distror?     s   FB ??"OO-MFm, ,,U3
!!*-=> ?Ef* ?E ?,	  C  	C S	!%((V|H	IJ JH 	-.J
 y11DY__ED:%%q	*+ + +H
 ,4==+@+@+B 1+Ba--/ "166+B 1	%vTYY7J-KvL  D,,,1Fq	"
 &&
 ! !H hHH45<<V<LAXq  BQ67#a&@AABB1s*   A:I- ?5I- >J%J%-
J"7 JJ"c                     [        U 5      nSUl        [        X5        [        R                  " U[        R
                  UR                  5        [        R                  " U[        R                  UR                  5        UR                  5         U$ r   )
r
   skip_default_osinfor&  r   
run_parser
ParserBootr<   ParserMetadatametadatar   )r   r)   r   s      r    _build_options_guestrF  u  sf    $KE $E w.
 NN5#..',,7NN5#,,g.>.>? 
##%Lr+   c                    [         R                  " UR                  5      n[         R                  " UR                  =(       d    UR
                  5      n[        UR                  5      Ul        UR                  (       a$  [         R                  " XR                  5      u  pEnO[        X5      n[        XU5      nUR                  5         [        XWU5        UR                  (       d,  [        U5        [         R                   " X5        [#        X5        UR%                  U5        UR'                  U5       H$  n[         R(                  " UR*                  U5        M&     UR                  (       d{  UR,                  R.                   H  n	[         R0                  " U	5        M     UR,                  R2                   H.  n
[         R4                  " U
R*                  U
R6                  5        M0     [9        XU5        [;        X5        XW4$ r-   )r   parse_installinstallparse_os_variant
os_variantr   r   r<   r   r   get_domain_and_guestrF  r  set_default_os_namer?  r	  run_all_parsersr   set_install_defaultsget_search_pathscheck_path_searchr   r   rR   validate_diskr   validate_macmacaddrr   r   )r   r)   r   r2  dummy1r   dummy2r   rX   rR   nets              r    build_guest_instancerX    sn   ##GOO4K!!'"4"4"FGF-G # 8 8?P?P Qv$T3<I 
Ef5 	U#G+(""5)**51ejj$/ 2 MM&&Dd# '==**CSXXs{{3 + gi8'r+   c                 x    [         R                  R                  5       (       d  [        R                  " U 5        g g r-   )rA   rB   in_testsuitetimesleep)secss    r    _sleepr^    s(    ((**

4 +r+   c                     UR                   c*  U R                  5       (       d  U R                  5       (       d  g [        R                  " [        S5      5        SUl         g )Nz;No console to launch for the guest, defaulting to --wait -1r:   )r   has_console_cb
is_defaultr   ra   r'   )r   r)   s     r    _set_default_waitrb    sN     ""$$""$$ KK " # $GLr+   c                   `    \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	S r
S rS	 rS
rg)WaitHandleri  zH
Helper class for handling the --wait option sleeping and time tracking
c                 P    SU l         SU l        SU l        Ub  SU l         Xl        g g )NFr   T)wait_is_requested
_wait_mins_start_time)selfr   s     r    __init__WaitHandler.__init__  s1    !&%)D""O r+   c                 $    U R                   (       + $ r-   )rf  ri  s    r    wait_for_console_to_exit$WaitHandler.wait_for_console_to_exit  s    
 ))))r+   c                      U R                   S:  $ )Nr   rg  rm  s    r    _wait_foreverWaitHandler._wait_forever  s    ""r+   c                      U R                   S-  $ )N<   rq  rm  s    r    
_wait_secsWaitHandler._wait_secs  s    ##r+   c                 8    [         R                   " 5       U l        g r-   )r[  rh  rm  s    r    startWaitHandler.start  s    99;r+   c                     U R                   (       a  [        S5      $ [        SSU R                  5      SU R                  0-  $ )Nz)Waiting for the installation to complete.z<Waiting %(minutes)d minute for the installation to complete.z=Waiting %(minutes)d minutes for the installation to complete.minutes)rr  r'   ngettextrg  rm  s    r    get_time_stringWaitHandler.get_time_string  sD    @AAVW),5t+GH 	Hr+   c                 .   [        S5        U R                  (       a%  [        R                  R	                  5       (       a  gg[
        R
                  " 5       U R                  -
  nXR                  :  =(       d    [        R                  R	                  5       $ )z;
sleep 1 second, then return True if wait time has expired
r   TF)r^  rr  rA   rB   rZ  r[  rh  rv  )ri  time_elapseds     r    r   WaitHandler.wait  sf     	q	,,..		d&6&66/SH4D4D4Q4Q4SSr+   )rh  rg  rf  N)__name__
__module____qualname____firstlineno____doc__rj  propertyrn  rr  rv  ry  r~  r   __static_attributes__ r+   r    rd  rd    sW    # * *
 # #$ $'HTr+   rd  c                    U R                  5       nU(       d  g [        [        S5      U-  SSS9  [        R                  /nSn[        R                  R
                  (       d#  [        R                  R                  5       (       d(  [        R                  R                  5       (       d  g / nSn[        R                  R                  [        S5      5        [        R                  R                  5         [        R                  " U/ / U5        g )Nz$Password for first root login is: %sTF)r   do_log
   g-C6?zAInstallation will continue in 10 seconds (press Enter to skip)...)get_generated_passwordr   r'   sysstdinclosedisattyrA   rB   rZ  stdoutwriteflushselect)r   passwdstdinstimeouts       r    _print_cloudinit_passwdr    s    --/F9:VC%) ii[FG
yysyy//11,,..JJ	 % 	&' JJ
MM&"b'*r+   c                 R   UR                  5       nU(       d  gU" U 5      nU(       d  g [        R                  " US5      S   nW(       a  [        R                  " [        S5      5        UR                  5         g! [         a!  n[        R
                  " SU5         SnAN]SnAff = f)zp
Launched the passed console callback for the already defined
domain. If domain isn't running, return an error.
Nr   r   zwaitpid error: %sz!Console command returned failure.)	get_console_cbr   waitpidOSErrorr   r   ra   r'   handle_destroy_on_exit)r   
instdomainr   r   
console_cbchilderrcoder6  s           r    _connect_consoler    s    
 ++-JuE***UA&q) A9:;%%'  *		%q))*s   A; ;
B&B!!B&c                   0    \ rS rSrSrS rS rS rS rSr	g)	_InstalledDomaini,  zB
Wrapper for the domain object after the initial install creation
c                 n    Xl         X l        X0l        U(       a  [        R                  " [        U5        g g r-   )_domain
_transient_destroy_on_exitatexitregister)ri  domain	transientdestroy_on_exits       r    rj  _InstalledDomain.__init__0  s)    # /OO,f5 r+   c                     U R                   (       aQ  U R                  R                  5       (       a1  [        R                  " S5        U R                  R                  5         g g g )Nz5console exited and destroy_on_exit passed, destroying)r  r  isActiver   r   destroyrm  s    r    r  '_InstalledDomain.handle_destroy_on_exit8  sB      T\\%:%:%<%<IIMNLL  " &= r+   c                      U R                   R                  5       u  pU[        R                  :H  =(       a#    U[        R                  [        R
                  4;   $ ! [         a    [        R                  " SSS9   g f = f)Nz!Error checking VM shutdown reasonTr   )	r  statelibvirtVIR_DOMAIN_SHUTOFFVIR_DOMAIN_SHUTOFF_DESTROYEDVIR_DOMAIN_SHUTOFF_SAVEDr   r   r   )ri  r  reasons      r    domain_was_destroyed%_InstalledDomain.domain_was_destroyed=  sx    	J LL..0MEW777 AwCC&??A AB  	JII9DI	Js   AA A=<A=c                     U R                   R                  5       nUS   nU[        R                  :X  a  [	        [        S5      5        U R                   R                  5       (       + $ ! [        R                   ap  nUR                  5       [        R                  :w  a  e U R                  (       a  [        R                  " S5         S nAg[	        [        S5      U-  5         S nAg S nAff = f)Nr   zDomain has crashed.z&transient VM shutdown and disappeared.TzVM disappeared unexpectedly: %s)r  infor  VIR_DOMAIN_CRASHEDr   r'   r  libvirtErrorget_error_codeVIR_ERR_NO_DOMAINr  r   r   )ri  dominfor  r6  s       r    check_inactive_InstalledDomain.check_inactiveF  s    	;ll'')GAJE222Q,-.||,,...## 	;!W%>%>>		BC459::	;s   A%A( (C,<A
C'C''C,)r  r  r  N)
r  r  r  r  r  rj  r  r  r  r  r  r+   r    r  r  ,  s    6#
J;r+   r  c                    UR                  5       (       a  g[        UR                  5       5      (       a!  [        S5        UR                  5       (       a  gSnU[	        S5      -  nUR
                  (       dJ  U R                  5       (       d  gUS-  nU[	        S5      -  n[        U5        [        R                  " S5        [        U5        [        UR                  5       5         UR                  5       (       a  [        [	        S5      5        gUR                  5       nU(       a*  [        [	        S5      5        [        R                  " S	5        Mm  )
z^
Make sure domain ends up in expected state, and wait if for install
to complete if requested
N   r   z9Domain is still running. Installation may be in progress.zFYou can reconnect to the console to complete the installation process.r   z Domain has shutdown. Continuing.zDInstallation has exceeded specified time limit. Exiting application.r   )r  r   r  r^  r'   rf  requires_postboot_xml_changesr   r  exitr~  r   )r   r  r   waithandlerr   dones         r    _wait_for_domainr  Y  s!   
   ""K&&())
 	q	$$&& C1HIIC(( 6688tq ) * 	*S,,./ $$&&=>?! ) *+ HHQK r+   c                 n    [         R                  R                  S5      (       a  U R                  5         g g )NVIRTINST_TESTSUITE_HACK_DESTROY)r   r1  getr  )r  s    r    _testsuite_hack_destroyr    s%    	zz~~788 9r+   c                 0   [        XU5      n[        XUUR                  5        [        U 5        [	        X(XC5        [        [        S5      5        U(       a  gU R                  5       (       a  gU(       d  UR                  5       (       d,  [        [        S5      [        R                  " U5      -  5        gUR                  5       (       a  U(       d  [        [        S5      5        g[        [        S5      5        U R                  5         [        XUS5        g)zG
Handle the pieces of the install process after the initial VM startup
zDomain creation completed.Nz,You can restart your domain by running:
  %sz#User stopped the VM. Not rebooting.zRestarting guest.T)r  r  rn  r  r  r   r'   r  r  r   virsh_start_cmdr  create)	r  r   r   r  r   r  r  norebootr  s	            r    _process_domainr    s    
 "&_EJU002 F#YKE/01y>>@@=>&'	( 	&&((Q<=>&'(
MMOUT:r+   c           
      d   [         R                  " X U5      n[        X5        [        X25        [	        UR
                  5      n[         R                  " 5       n[        [        S5      5        [        U5        UR                  5           UR                  XUR                  (       + UR                  S9n[#        X`UXCUR                  UR$                  UR                  5        [        R&                  R)                  5       (       a  UR$                  (       a  [+        U5        g	g	g	!   [        R                  R!                  X5        e = f! [,         a+    [.        R0                  " SSS9  [3        [        S5      5        e [4         a*  n[7        USS9  [         R8                  " U 5         S	nAg	S	nAff = f)
zW
Process all the install workflow specific options, and kick off
the Installer process
z
Starting install...)meterdobootr  r9   Tr   zDomain install interrupted.F)do_exitN)r   parse_autoconsoler   rb  rd  r   	get_meterr   r'   r  ry  start_installr  r  rA   r   cleanup_created_disksr  r  rB   rZ  r  KeyboardInterruptr   r   r   r   r   install_fail)r   r   r)   r   r  r  r  r6  s           r    r  r    se   
 ''	BK)1k+gll+KMMOE *+,I& 	,,&///%// - 1F 	y'*;*;'')9)9	; ((**w/F/FV$ 0G*	44UB  		"t$Q456  Q s+   	*D# 3A-E #"EE =F/ F**F/c                 0   UR                  XSS9u  pEU(       d  UnS nU(       a  U(       d  [        [        S5      5        g US;  a  [        [        S5      U-  5        US:X  a  U$ US:X  a  U(       d  [        [        S5      5        U$ UnU(       a  Xe-  nU$ )	NT)dry
return_xmlzDry run completed successfully)F12allz3Unknown XML step request '%s', must be 1, 2, or allr  r  z/Requested installation does not have XML step 2)r  r   r'   r   )r   r   r/   r  	start_xml	final_xmlxmls          r    xml_to_printr    s    $22t 3 -I		
7Q789..QDE 	 #~#~DEF CJr+   c            
      t   [         R                  " S[        S5      SS9n [         R                  " U 5        U R	                  [        S5      5      nUR                  SS[        S5      S	9  [         R                  " USS
9  [         R                  " U5        [         R                  " U5        [         R                  " U5        UR                  SS[        R                  S	9  UR                  S[        R                  S	9  U R	                  [        S5      5      nUR                  SS[        R                  S9  UR                  S[        S5      S	9  UR                  SS[        S5      S	9  UR                  SS[        S5      S9  UR                  SSS[        S5      S9  UR                  SS[        R                  S9  UR                  S S!S"[        S#5      S9  UR                  S$S"[        S%5      S9  UR                  S&S'S([        S)5      S*9  UR                  S+[        S,5      S	9  UR                  S-S.[        S/5      S09  UR                  S1S'S([        S25      S*9  UR                  S3[        R                  S	9  UR                  S4S[        R                  S9  [         R                  " U5        UR                  S5[        R                  S	9  [         R                  " U SS69nUR                  S7S8[        R                  S9  U R	                  [        S95      5      n[         R                  " U5        [         R                  " U5        [         R                   " U5        [         R"                  " USS:9  UR                  S;S<S=S"[        R                  S>9  UR                  S?S@[$        S"SA[        R                  SB9  UR                  SCSDSSE[        R                  SF9  UR                  SGS[        R                  S9  UR                  SHS[        R                  S9  UR                  SISJS"[        R                  S9  UR                  SKSLS"[        R                  S9  UR                  SMS[        R                  S9  UR                  SN[&        [        R                  SO9  UR                  SP[        R                  S	9  UR                  SQSR[        R                  S	9  UR                  SSS[        R                  S9  UR                  STS[        R                  S9  U R	                  [        SU5      5      n[         R(                  " U5        U R	                  [        SV5      5      nUR+                  5       nUR                  SWSXSYSZS[[        S\5      S]9  UR                  S^S_SYS`S[[        Sa5      S]9  UR                  SbSYScS[[        Sd5      S]9  UR                  Se[        Sf5      S	9  UR                  Sg[        Sh5      S	9  UR                  Si[        Sj5      S	9  UR                  SkS[        R                  S9  UR                  SlSSm[        R                  Sn9  UR                  SoSSm[        R                  Sn9  U R	                  [        Sp5      5      nUR                  SqSSm[        Sr5      Sn9  UR                  SsSSm[        St5      Sn9  UR                  SuSSm[        Sv5      Sn9  UR                  Sw[&        SxS'[        Sy5      Sz9  [         R,                  " USSSSSSS{9  [         R.                  " U 5        U R1                  5       $ )|Nz%(prog)s OPTIONSz:Create a new virtual machine from specified install media.T)introspection_epilogzGeneral Optionsz-nz--namezName of the guest instance)help)
backcompatz-uz--uuidz--descriptionzInstallation Method Optionsr#   r%   )destr  r$   zCD-ROM installation mediaz-lz
--locationzUDistro install URL, eg. https://host/path. See man page for specific distro examples.z--pxe
store_truez,Boot from the network using the PXE protocol)actionr  z--importr   z)Build guest around an existing disk image)r  r  r  z--livecdz-xz--extra-argsrQ   zIAdditional arguments to pass to the install kernel booted from --locationz--initrd-injectz0Add given file to root of initrd from --locationr   ?r   z"Perform an unattended installation)nargsconstr  z	--installz$Specify fine grained install optionsz--reinstallDOMAINzhReinstall existing VM. Only install options are applied, all other VM configuration options are ignored.)metavarr  r   z:Perform a cloud image installation, configuring cloud-initz--test-media-detectionz--test-stub-commandz--init)virtinstallz	--os-typer`   zDevice Options)sound_back_compatz-fz--filerM   )r  r  r  z-sz--file-sizerN   )r   r  r  r  z--nonsparsestore_falserP   )r  r2   r  r  z	--nodisksz--nonetworksz-brn   z-mz--macz--vncz	--vncport)r   r  z--vnclistenz-kz--keymapz--sdlz--nographicszGuest Configuration OptionszVirtualization Platform Optionsz-vz--hvmstore_consthvmr   z.This guest should be a fully virtualized guest)r  r  r  r  z-pz
--paravirtxenz,This guest should be a paravirtualized guestz--containerexez&This guest should be a container guestz--virt-typez,Hypervisor name to use (kvm, qemu, xen, ...)z--archz The CPU architecture to simulatez	--machinezThe machine type to emulatez--acceleratez--noapicF)r  r2   r  z--noacpizMiscellaneous Optionsz--autostartz&Have domain autostart on host boot up.z--transientzCreate a transient domain.z--destroy-on-exitz=Force power off the domain when the console viewer is closed.z--waitr:   z(Minutes to wait for install to complete.)r   r  r  r  )promptprintxml	printstepr  dryrunnoautoconsole)r   setupParserr'   add_connect_optionadd_argument_groupadd_argumentadd_memory_optionvcpu_cli_optionsadd_metadata_optionadd_xml_optionargparseSUPPRESSadd_boot_optionsadd_os_variant_optionadd_disk_optionadd_net_optionadd_gfx_optionadd_device_optionsfloatintadd_guest_xml_optionsadd_mutually_exclusive_groupadd_misc_optionsautocomplete
parse_args)	parsergenginsgosgdevggxmlgvirgostypegmiscs	            r    r  r    sX   __	
FG!#F 6"$$Q'8%9:DdH78  :$40D!tdH8+<+<=oH,=,=>$$Q'D%EFDdX5F5FGia(C&DEdL 8 9  : 	glIJ  Lj<LFG  IjH<M<MNdN8 4 5  6 	'MN  PnCq?@  Bk9:  <mX E F  G 	nCqWX  Z 	.X5F5FG+L""  $ hX%6%67

#
#F
=C[}8;L;LM$$Q'7%89Dtt448 	dH<!**  ,dM#*!**  , 	mM x!**  , 	k,X=N=NOn\   dJx   dGH8;L;LMgl9J9JKk(2C2CDm(*;*;<dJX->->?gl9J9JKn\    %%a(E&FGEe$ $$Q'H%IJD//1GwE	?@  B |E	=>  @ E	78  : 	m=>  @hQ'I%JKk*G(HIn\   jH--  /jH--  / $$Q'>%?@DmL%EF  HmL%9:  <), 1 2  3 	hS#GH  J dTT"&t4I Vr+   c                 4    [        U =(       a    U R                  5       5      nU(       a  U R                  5         g g ! [        R                   aF  nUR                  5       [        R                  :w  a  [        R                  " SSS9   S nAg  S nAg S nAff = f)Nz%Error invoking atexit destroy_on_exitTr   )	r   r  r  r  r  r  r  r   r   )r  isactiver6  s      r    r  r    ss    #46??#45NN  #!:!::II=!# ;#s   9= B7BBc                 X   U R                   (       d  g SU l        U R                  (       d  SU l        U R                  (       d  SU l        U R                  (       d  SU l        U R
                  (       d  SU l        U R                  (       d  SU l        U R                  (       d  SU l        g g )NTztest:///defaultztest-stub-command256r\   fedora27)test_stub_commandr   connectr   rd   rR   r   rK  r(   s    r    set_test_stub_optionsr*    sw     $$!G??+<<*>><<!' r+   c                    [         R                  " 5         [        5       n[        U5        UR                  =(       d    UR
                  =(       d    UR                  Ul        [         R                  " SUR                  UR                  5        [         R                  " U5      (       a  g[         R                  " U5      (       a  g[        U5        [         R                  " U5        [         R                  " UR                  5        [         R                  " UR                   5        [#        U5        [%        U5        ['        U5        [)        U5        [+        U5        [-        U5        [/        U5        [1        U5        [3        U5        [5        U5        [7        U5        [         R8                  " UR:                  U S9n UR
                  (       a  [=        X5        g[?        X5      u  p#UR                  (       d  UR@                  (       a3  [C        X#UR                  UR@                  5      nU(       a
  [E        USS9  g[G        X#U5        g)Nzvirt-installr   )r   Tr   )$r   earlyLoggingr  r0   r/   r   quietsetupLoggingr   check_option_introspectioncheck_osinfo_listr*   convert_old_forceparse_checkcheck
set_promptr  rg   r7   r   r   r^   r   rl   r=   r   r*  rb   getConnectionr)  r   rX  r  r  r   r  )r   r)   r   r   r  s        r    mainr6    s   lG !__ 6$$6(/ M^W]]GMMB
%%g..
W%%W%'"OOGMM"NN7>>"wg!!g!wWg'"7#W__48D##.+D:E'++5W__gkkJt,  	e0r+   c                  R    [         R                  " [        5       5        g ! [         a*  n [         R                  " U R                  5         S n A g S n A f[
         a,    [        R                  " SSS9  [        [        S5      5         g [         a  n[        U5         S nAg S nAff = f)Nr9   Tr   z$Installation aborted at user request)r  r  r6  
SystemExitcoder  r   r   r   r'   r   r   )sys_emain_es     r    runclir<    so      @		"t$Q=>? Vs&   ! 
B& A6B&	B&B!!B&r-   )Br  r  r   r  r[  r  r  rA   r9   r   r   r   r   r   r	   r   r
   loggerr   r   r!   r*   r0   r7   r=   rZ   r^   rb   rg   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r   r&  r?  rF  rX  r^  rb  rd  r  r  r  r  r  r  r  r  r  r  r*  r6  r<  r  r+   r    <module>r>     sA     	 
      C C    Y*	, +E><0,H)BX# L
,
@".B,	07$!$IX"(9V0Rj,%X

/T /Td+0(2*; *;Z0f;D' \B@P#(*-`	r+   