
                            d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	lmZ dd
lmZ dd	lmZ ddlmZ e
j&                   e
j(                  e
j*                  j,                         G d de
j.                                      Z e
j(                  e
j*                  j2                         G d de             Z e
j(                  e
j*                  j6                         G d de             Zy)z$Command for creating machine images.    )absolute_import)division)unicode_literals)base_classes)
csek_utils)	kms_utils)base)flags)scope)resource_argsc                   8    e Zd ZdZdZdZdddZed        Zd Z	y)	Create&Create a Compute Engine machine image.TFz
         To create a machine image, run:

           $ {command} my-machine-image --source-instance=example-source --source-instance-zone=us-central1-a
       )briefEXAMPLESc                    |j                   j                  t        j                         t        j                         t
        _        t
        j                  j                  |d       |j                  dd       t        j                  |d       t        j                  |d       t        j                  |d       t        j                  |       t        j                   |d       | j"                  rt        j$                  |       t        j&                         t
        _        t
        j(                  j                  |       y )	Ncreate)operation_typez--descriptionz2Specifies a text description of the machine image.)helpzmachine image)resource_typezmachine image's)display_info	AddFormatmachine_image_flagsDEFAULT_LIST_FORMATMakeMachineImageArgr   MACHINE_IMAGE_ARGAddArgumentadd_argumentr   AddCsekKeyArgsr
   AddStorageLocationFlagAddGuestFlushFlagAddSourceDiskCsekKeyArgkms_resource_argsAddKmsKeyResourceArg_SUPPORT_DISK_FILTERINGAddDiskFilterArgsMakeSourceInstanceArgSOURCE_INSTANCE)clsparsers     ,lib/surface/compute/machine_images/create.pyArgszCreate.Args1   s    
!!"5"I"IJ2FFHF
(((I
A  C fOD	  ):;	FO4	!!&)**6?C
""++F30FFHF
&&v.    c                    t        j                  | j                               }|j                  }t        j
                  j                  ||j                  t        j                  j                  t        j                  |            }t        j                  j                  ||j                        }|j                  j                  |j!                         |j"                  |j%                               }t&        j(                  j+                  || j,                        }|r@t'        j.                  |j1                  ||j2                        |j4                        |_        t9        j:                  ||j                  |j6                        |_        |j=                  d      r|j>                  g|_         |j=                  d      r|jB                  |_"        | jF                  rx|j=                  d      r+|j                  jI                  |jJ                        |_&        |j=                  d      r+|j                  jI                  |jN                  	      |_&        tQ        |d
g       }i }	|r|D ]  }
|
jS                  d      }|j                  jU                  |d|jV                  |jV                  d      }t&        j(                  jY                  |
jS                  d      | j,                        }t'        j.                  |j1                  |      |j4                        }||	|<    g }|	rF|	j[                         D ]3  \  }}
|j                  j]                  ||
      }|j_                  |       5 |r||_0        |j                  jc                  ||jV                        }|je                  |j4                  jf                  d|fg      S )z?Returns a list of requests necessary for adding machine images.)default_scopescope_lister)namedescriptionsourceInstance)raise_if_missingstorage_locationguest_flushinclude_disks)includedDisksexclude_disks)excludedDiskssource_disk_csek_keydiskzcompute.disks)projectzone)
collectionparamszcsek-key-file)
sourceDiskdiskEncryptionKey)machineImager=   Insert)4r   ComputeApiHolderReleaseTrackclientr   r   ResolveAsResource	resourcesr   	ScopeEnumGLOBALr
   GetDefaultScopeListerr(   messagesMachineImageNamer2   SelfLinkr   CsekKeyStoreFromArgs_ALLOW_RSA_ENCRYPTED_CSEK_KEYSMaybeToMessage	LookupKeyrequire_csek_key_createapitools_clientmachineImageEncryptionKeyr   MaybeGetKmsKeyIsSpecifiedr5   storageLocationsr6   
guestFlushr%   MachineImageParamsr7   r@   r9   getattrgetParser=   FromFileitemsSourceDiskEncryptionKeyappendsourceDiskEncryptionKeys!ComputeMachineImagesInsertRequestMakeRequestsmachineImages)selfargsholderrG   machine_image_refsource_instancemachine_image	csek_keyssource_csek_keys	disk_keyskeydisk_urldisk_ref	key_storedisk_keysource_disk_messagesr<   source_disk_messagerequests                      r+   Runz
Create.RunE   s|   **4+<+<+>?F]]F00BBoo,,008	 C : ,,>>f O OO00##%$$&//1 1 3M
 ''00d113I0:0I0I


$2N2N  P

 
 1"m- /8.F.Ffoo}FF/HM+ *+(,(=(='>m$&!%!1!1m##			/	*%AA,,  B  
 
		/	*%AA,,  B  
 t%;R@I!#776?##))&*22'// *  ++44GGO$d&I&IK	 ,,)6+A+AC&	( "   ()$$ooEEs F 4##$78 )
 /Cm,oo??",=,E,E @ GG!7!7!E!Ex!(!*  + , ,r-   N)
__name__
__module____qualname____doc__rS   r%   detailed_helpclassmethodr,   rz    r-   r+   r   r      s>     /#' ! 3		- / /&P,r-   r   c                       e Zd ZdZdZy)
CreateBetar   FNr{   r|   r}   r~   r%   r   r-   r+   r   r      s    .!r-   r   c                       e Zd ZdZdZy)CreateAlphar   TNr   r   r-   r+   r   r      s    . r-   r   N)r~   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   googlecloudsdk.callioper	   "googlecloudsdk.command_lib.computer
   r   1googlecloudsdk.command_lib.compute.machine_imagesr   googlecloudsdk.command_lib.kmsr   r#   DefaultUniverseOnlyReleaseTracksrF   GACreateCommandr   BETAr   ALPHAr   r   r-   r+   <module>r      s    + &  ' 7 5 4 ( 4 4 Z M D%%(()t,T t, * t,n D%%**+" " ," D%%++,!* ! -!r-   