
    6a                        d Z ddlmZ ddlmZ ddlmZ ddl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Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z< G d9 d:ejz                        Z>e>j~                  fd;Z@y)<zworkbench instances api helper.    )absolute_import)division)unicode_literalsN)util)	arg_utils)flags)
exceptions)log)	resourcesz'compute.googleapis.com/reservation-namec                     | j                  d      r2| j                  j                  j                         j	                         S y )Nnetwork)IsSpecifiedCONCEPTSr   ParseRelativeNameargss    1lib/googlecloudsdk/api_lib/workbench/instances.pyGetNetworkRelativeNamer   "   s7    	i ==  &&(5577 !    c                     | j                  d      r3	 | j                  j                  j                         j	                         S y # t
        $ r t        j                  d      w xY w)NsubnetztSubnet is not formatted correctly. Expected format: projects/{project-id}/regions/{region}/subnetworks/{subnet-name})r   r   r   r   r   AttributeErrorr	   Errorr   s    r   GetSubnetRelativeNamer   '   sf    	h]]!!'')6688    N s   1A A%c                    | j                  d      s$| j                  d      s| j                  d      sg S d}d}d}| j                  d      rt        |       }| j                  d      rt        |       }| j                  d      rYt        j                  d|j
                  j                  d       j                  t        j                  | j                              }|j                  |||      gS )	zCreates the network config for the instance.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    A list of NetworkInterface messages for the instance.
  r   r   nic_typeNznic-typec                 
    d| vS NUNSPECIFIED xs    r   <lambda>z,CreateNetworkConfigMessage.<locals>.<lambda>N   	    a!7r   arg_namemessage_enuminclude_filter)r   r   nicType)
r   r   r   r   ChoiceEnumMapperNetworkInterfaceNicTypeValueValuesEnumGetEnumForChoiceEnumNameToChoicer   )r   messagesnetwork_namesubnet_namer   s        r   CreateNetworkConfigMessager3   2   s     y!			(	#			*	%I,+(	i )$/L	h'-K	j!))..EE7 y11$--@A	 
 
#
# $  
 r   c                 ^   | j                  d      s| j                  d      sg S d}| j                  d      rYt        j                  d|j                  j                  d       j                  t        j                  | j                              }|j                  || j                        gS )zCreates the accelerator config for the instance.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    A list of AcceleratorConfig messages for the instance.
  accelerator_typeaccelerator_core_countNzaccelerator-typec                 
    d| vS r   r!   r"   s    r   r$   z0CreateAcceleratorConfigMessage.<locals>.<lambda>l   r%   r   r&   )type	coreCount)	r   r   r+   AcceleratorConfigTypeValueValuesEnumr.   r/   r5   r6   )r   r0   	type_enums      r   CreateAcceleratorConfigMessager=   W   s     )*			2	3I)	()**#//CC7 y11$2G2GHI	 
 
$
$ ; ; %  
 r   c                 b    | j                  d      sg S |j                  | j                        gS )Nservice_account_email)email)r   ServiceAccountr?   r   r0   s     r   !CreateServiceAccountConfigMessagerC   s   s3    			1	2I

!
!(B(B
!
C	DDr   c                     | j                  d      s| j                  d      sy |j                  | j                  | j                        S )Ncustom_gpu_driver_pathinstall_gpu_driver)customGpuDriverPathenableGpuDriver)r   GPUDriverConfigrE   rF   rB   s     r   CreateGPUDriverConfigMessagerJ   z   sM    
/0			.	/		!	!55-- 
" 
 r   c                 f   | j                  d      s#| j                  d      s| j                  d      syd}| j                  d      r.t        j                  |      j                  | j                        }g }| j                  d      r| j
                  }|j                  || j                  |      S )zCreates the reservation config for the instance.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Reservation config for the instance.
  reservation_typereservation_keyreservation_valuesN)consumeReservationTypekeyvalues)r   r   GetReservationTypeMapperr.   rL   rN   ReservationAffinityrM   )r   r0   reservation_type_enumrN   s       r   CreateReservationConfigMessagerU      s     )*			+	,			.	/	()!::t,,-  	*+00		%	%2


 
& 
 r   c                    | j                  d      s4| j                  d      s#| j                  d      s| j                  d      sy|j                  }d}d}d}| j                  d      rOt        j                  d|j                  d       j                  t        j                  | j                              }| j                  d      rOt        j                  d	|j                  d
       j                  t        j                  | j                              }| j                  d      r2| j                  j                  j                         j                         } |||| j                  |      S )zCreates the boot disk config for the instance.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Boot disk config for the instance.
  boot_disk_sizeboot_disk_typeboot_disk_encryptionboot_disk_kms_keyNzboot-disk-typec                 
    d| vS r   r!   r"   s    r   r$   zGetBootDisk.<locals>.<lambda>   r%   r   r&   zboot-disk-encryptionc                 
    d| vS r   r!   r"   s    r   r$   zGetBootDisk.<locals>.<lambda>   r%   r   )diskTypediskEncryption
diskSizeGbkmsKey)r   BootDiskr   r+   DiskTypeValueValuesEnumr.   r/   rX   DiskEncryptionValueValuesEnumrY   r   rZ   r   r   rW   )r   r0   boot_disk_messageboot_disk_encryption_enumboot_disk_type_enumkms_keys         r   GetBootDiskrh      sQ    '(			*	+			0	1			-	.''"'	&'#44!&>>7 y11$2E2EFG	 
 
,- ) : :'&DD7! y11$2K2KLM	 
 
)*mm--335BBDG	".$$	
 r   c                 H   | j                  d      sF| j                  d      s5| j                  d      s$| j                  d      s| j                  d      sg S |j                  }d}d}d}g }| j                  d      rOt        j                  d|j                  d 	      j                  t        j                  | j                              }| j                  d      rOt        j                  d
|j                  d 	      j                  t        j                  | j                              }| j                  d      r2| j                  j                  j                         j                         }| j                  d      r| j                  } |||| j                  ||      gS )zCreates the data disk config for the instance.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Data disk config for the instance.
  data_disk_sizedata_disk_typedata_disk_encryptiondata_disk_kms_keydata_disk_resource_policiesNzdata-disk-typec                 
    d| vS r   r!   r"   s    r   r$   zGetDataDisk.<locals>.<lambda>   r%   r   r&   zdata-disk-encryptionc                 
    d| vS r   r!   r"   s    r   r$   zGetDataDisk.<locals>.<lambda>   r%   r   )r]   r^   r_   r`   resourcePolicies)r   DataDiskr   r+   rb   r.   r/   rk   rc   rl   r   rm   r   r   rn   rj   )r   r0   data_disk_messagedata_disk_encryption_enumdata_disk_type_enumrg   resource_policiess          r   GetDataDiskrw      s    '(			*	+			0	1			-	.			7	8I''"'	&'#44!&>>7 y11$2E2EFG	 
 
,- ) : :'&DD7! y11$2K2KLM	 
 
)*mm--335BBDG	3488&2((,
 r   c                     | j                  d      s| j                  d      sy |j                  | j                  | j                        }|S )Ncontainer_repositorycontainer_tag)
repositorytag)r   ContainerImagery   rz   )r   r0   container_images      r   CreateContainerImageFromArgsr     sP    
-.			/	*++**0B0B , / 
r   c                    | j                  d      s#| j                  d      s| j                  d      sy|j                         }| j                  |_        | j                  d      r| j                  |_        |S | j                  |_        |S )z8Create VmImage Message from an environment or from args.vm_image_projectvm_image_familyvm_image_nameN)r   VmImager   projectr   familyr   name)r   r0   vm_images      r   CreateVmImageFromArgsr     s     )*			+	,			/	*(**(	'(**HO 
/ &&HM	/r   c                 B    | j                  d      sg S | j                  gS )Ninstance_owners)r   r   r   s    r   GetInstanceOwnersFromArgsr   %  s%    			+	,I


	r   c           
          | j                  d      sy |j                  j                  } || j                  j	                         D cg c]  \  }}|j                  ||       c}}      S c c}}w )NlabelsrP   valueadditionalProperties)r   InstanceLabelsValuer   itemsAdditionalProperty)r   r0   labels_messagerP   r   s        r   GetLabelsFromArgsr   ,  sr    			(	#$$00.	))+.+*#u ''Cu'=+. 
  .   A.
c                 @    | j                  d      sg S | j                  S )Ntags)r   r   r   s    r   GetTagsFromArgsr   7  s    			&	!I	r   c           
          | j                  d      sy |j                  j                  } || j                  j	                         D cg c]  \  }}|j                  ||       c}}      S c c}}w )Nmetadatar   r   )r   GceSetupMetadataValuer   r   r   )r   r0   metadata_messagerP   r   s        r   GetMetadataFromArgsr   >  su    			*	%&&44	 !MM//11jc5 
-
-#U
-
C1
 r   c                    | j                  d      s#| j                  d      s| j                  d      syg d}| j                  d      r| j                  j                         |v }nd}| j                  d      r| j                  j                         |v }nd}| j                  d      r| j                  j                         |v }nd}|j
                  } ||||      S )a  Creates the Shielded Instance Config message for the create/update request.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Shielded Instance Config of the Instance message.
  shielded_secure_bootshielded_vtpmshielded_integrity_monitoringN)1trueonyesy)enableIntegrityMonitoringenableSecureBoot
enableVtpm)r   r   lowerr   r   ShieldedInstanceConfig)r   r0   true_valuesr   r   r    shielded_instance_config_messages          r   !GetShieldedInstanceConfigFromArgsr   K  s     -.			/	*			9	:/+	,-44::<K	o&&&,,.+=MM	56**002kA " %)!%-%D%D"	) =+
 r   c                     | j                  d      syt        j                  d|j                  j                  d       j                  t        j                  | j                              }|j                  |      S )a  Creates the Confidential Instance Config message for the create request.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Confidential Instance Config of the Instance message.
  confidential_compute_typeNzconfidential-compute-typec                 
    d| vS r   r!   r"   s    r   r$   z7GetConfidentialInstanceConfigFromArgs.<locals>.<lambda>  s	    }A5r   r&   )confidentialInstanceType)r   r   r+   ConfidentialInstanceConfig'ConfidentialInstanceTypeValueValuesEnumr.   r/   r   )r   r0   confidential_instance_types      r   %GetConfidentialInstanceConfigFromArgsr   s  s|     
		5	6(99*66^^5    !?!?@	  
	,	,9 
- 
 r   c                 >    | j                  d      sy | j                  S )Nmachine_type)r   r   r   s    r   GetMachineTypeFromArgsr     s    			.	)			r   c                 >    | j                  d      sy | j                  S )Nmin_cpu_platform)r   r   r   s    r   GetMinCpuPlatformFromArgsr     s     			,	-			r   c                 >    | j                  d      sy | j                  S )Ndisable_public_ip)r   r   r   s    r   GetDisablePublicIpFromArgsr     s     			-	.			r   c                 >    | j                  d      sy | j                  S )Nenable_ip_forwarding)r   r   r   s    r   GetEnableIpForwardingFromArgsr          			0	1		"	""r   c                 >    | j                  d      sy | j                  S )Nenable_third_party_identity)r   r   r   s    r   #GetEnableThirdPartyIdentityFromArgsr     s     			7	8		)	))r   c                 >    | j                  d      sy | j                  S )Nenable_managed_euc)r   r   r   s    r   GetEnableManagedEucFromArgsr     s     			.	/		 	  r   c                 >    | j                  d      sy | j                  S )Ndisable_proxy_access)r   r   r   s    r   GetDisableProxyAccessFromArgsr     r   r   c                 f   |j                  t        | |      t        | |      t        | |      t	        | |      t        |       t        |       t        | |      t        |       t        |       t        | |      t        | |      t        | |      t        | |      t        | |      t        | |      t!        |       t#        | |            }|j%                  | j&                  t)        |       ||j                         k7  r|ndt+        |       t-        | |      t/        |       |rt1        |       nd      }|S )a/  Creates the Instance message for the create request.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.
    support_managed_euc: Whether the managed EUC feature is supported.

  Returns:
    Instance of the Instance message.
  )acceleratorConfigsbootDiskcontainerImage	dataDisksdisablePublicIpenableIpForwardinggpuDriverConfigmachineTypeminCpuPlatformr   networkInterfacesreservationAffinityserviceAccountsshieldedInstanceConfigconfidentialInstanceConfigr   vmImageN)r   disableProxyAccessgceSetupinstanceOwnersr   enableThirdPartyIdentityenableManagedEuc)r   r=   rh   r   rw   r   r   rJ   r   r   r   r3   rU   rC   r   r   r   r   r   instancer   r   r   r   r   )r   r0   support_managed_euc	gce_setupr   s        r   CreateInstancer     s*    7hG4*1$AD(+066t<24B(..t4"4224B8xH7hG>tXN!F
" 4 #D(3'   )* ==6t<%):):)<<y$.t4tX.B4H	 348  
( 
/r   c                     t        j                  |       }t        | ||      }|j                  ||| j                        S )a(  Creates the update mask for update Instance request.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the API.
    support_managed_euc: Whether the managed EUC feature is supported.

  Returns:
    Update mask of the Instance message.
  )parentr   
instanceId)r   GetParentForInstancer   0NotebooksProjectsLocationsInstancesCreateRequestr   )r   r0   r   r   r   s        r   CreateInstanceCreateRequestr     sI     $$T*&D(,?@(		B	Bh4== 
C 
B Br   c                     g }ddddddddd	d
dddd}t        |j                               D ](  \  }}| j                  |      s|j                  |       * dj	                  t        t        |            S )zCreates the update mask for update Instance request.

  Args:
    args: Argparse object from Command.Run

  Returns:
    Update mask of the Instance message.
  z"gce_setup.accelerator_configs.typez(gce_setup.accelerator_configs.core_countz-gce_setup.gpu_driver_config.enable_gpu_driverz2gce_setup.gpu_driver_config.custom_gpu_driver_pathz5gce_setup.shielded_instance_config.enable_secure_bootz.gce_setup.shielded_instance_config.enable_vtpmz>gce_setup.shielded_instance_config.enable_integrity_monitoringr   zgce_setup.metadatazgce_setup.machine_typezgce_setup.tagsz$gce_setup.container_image.repositoryzgce_setup.container_image.tag)r5   r6   rF   rE   r   r   r   r   r   r   r   ry   rz   ,)sortedr   r   appendjoinmapstr)r   
mask_arrayfield_mask_dictrP   r   s        r   CreateUpdateMaskr     s     *> JK
> BG
J&.D6'/* ?0023jc5 4 
#c:&	''r   c                 J    | j                   j                  j                         S )N)r   r   r   r   s    r   GetInstanceResourcer     s    				%	%	''r   c                 P    t        j                  |       }|j                  |      S )N)r   )r   GetParentFromArgs.NotebooksProjectsLocationsInstancesListRequest)r   r0   r   s      r   CreateInstanceListRequestr      s&    !!$'&		@	@	@	OOr   c                 X    t        |       j                         }|j                  |      S N)r   )r   r   0NotebooksProjectsLocationsInstancesDeleteRequestr   r0   r   s      r   CreateInstanceDeleteRequestr  %  s1     &335(		B	B 
C 
 r   c                 X    t        |       j                         }|j                  |      S r  )r   r   -NotebooksProjectsLocationsInstancesGetRequestr  s      r   CreateInstanceDescribeRequestr  +  s)     &335(		?	?X	?	NNr   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   resetInstanceRequest)r   r   ResetInstanceRequest/NotebooksProjectsLocationsInstancesResetRequest)r   r0   r   reset_requests       r   CreateInstanceResetRequestr  0  A     &335(//1-		A	A- 
B 
9 9r   c                     t        |       j                         }|j                  | j                        }|j	                  ||      S )N)targetSnapshot)r   rollbackInstanceRequest)r   r   RollbackInstanceRequesttarget_snapshot2NotebooksProjectsLocationsInstancesRollbackRequest)r   r0   r   rollback_requests       r   CreateInstanceRollbackRequestr  7  sS     &335(55)) 6 +		D	D-= 
E 
? ?r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   startInstanceRequest)r   r   StartInstanceRequest/NotebooksProjectsLocationsInstancesStartRequest)r   r0   r   start_requests       r   CreateInstanceStartRequestr  ?  r  r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   stopInstanceRequest)r   r   StopInstanceRequest.NotebooksProjectsLocationsInstancesStopRequest)r   r0   r   stop_requests       r   CreateInstanceStopRequestr#  F  sA     &335(--/,		@	@ 
A 
7 7r   c                 P    t        j                  |       }|j                  |      S r  )r   r   3NotebooksProjectsLocationsInstancesGetConfigRequest)r   r0   r   s      r   CreateGetConfigRequestr&  M  s&    				%$		E	E4	E	PPr   c                     t        |       j                         }|j                  |j                  | j                  | j
                              }|j                  ||      S )N)	projectId
snapshotId)snapshot)r   restoreInstanceRequest)r   r   RestoreInstanceRequestSnapshotsnapshot_projectr*  1NotebooksProjectsLocationsInstancesRestoreRequest)r   r0   r   restore_requests       r   CreateInstanceRestoreRequestr1  R  sl     &335(33  ))dmm !  4 /
 
	C	CO 
D 
 r   c                 8   |j                  t        | |      t        | |      t        |       t	        | |      t        | |      t        |       t        | |            }|j                  | j                  ||j                         k7  r|ndt        | |            }|S )zCreates the Instance message for the update request.

  Args:
    args: Argparse object from Command.Run
    messages: Module containing messages definition for the specified API.

  Returns:
    Instance of the Instance message.
  )r   r   r   r   r   r   r   N)r   r   r   )r   r=   rJ   r   r   r   r   r   r   r   r   )r   r0   r   r   s       r   UpdateInstancer3  ^  s     7hG24B(."42>tXN4 1$A   ) ==%):):)<<y$tX.  (
 
/r   c                     t        | |      }t        |       j                         }t        |       }|j	                  |||      S )N)r   r   
updateMask)r3  r   r   r   /NotebooksProjectsLocationsInstancesPatchRequest)r   r0   r   r   update_masks        r   CreateInstanceUpdateRequestr8  z  sM    D(+(	T	"	/	/	1$ &+		A	A 
B 
 r   c                    t        |       j                         }|j                  | j                        }| j	                  d      r| j
                  |_        | j	                  d      rd|_        | j	                  d      rd|_        | j	                  d      rd|_	        |j                  ||j                  |            S )	z$"Create and return Diagnose request.)	gcsBucketrelative_pathenable_repairTenable_packet_captureenable_copy_home_files)diagnosticConfig)r   diagnoseInstanceRequest)r   r   DiagnosticConfig
gcs_bucketr   r;  relativePathenableRepairFlagenablePacketCaptureFlagenableCopyHomeFilesFlag2NotebooksProjectsLocationsInstancesDiagnoseRequestDiagnoseInstanceRequest)r   r0   r   diagnostic_configs       r   CreateInstanceDiagnoseRequestrJ    s     &335(// 0  
o&%)%7%7"	o&)-&	-.04-	./04-		D	DX-M-M, .N .. 
E 
/ /r   c                 T   t        |       j                         }d}| j                  d      r-|j                  |j	                  | j
                              }n=| j                  d      r,|j                  |j                  | j                              }|j                  ||      S )z%Create and return ResizeDisk request.NrW   )r_   )r   rj   )dataDisk)notebookInstanceresizeDiskRequest)	r   r   r   ResizeDiskRequestra   rW   rr   rj   4NotebooksProjectsLocationsInstancesResizeDiskRequest)r   r0   r   requests       r   CreateInstanceResizeDiskrR    s     &335('	&'((""** # 
 ) G
 ()((""** # 
 ) G
 
	F	F7 
G 
< <r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   upgradeInstanceRequest)r   r   UpgradeInstanceRequest1NotebooksProjectsLocationsInstancesUpgradeRequest)r   r0   r   upgrade_requests       r   CreateInstanceUpgradeRequestrX    sA     &335(335/		C	CO 
D 
= =r   c                 X    t        |       j                         }|j                  |      S )N)rM  )r   r   <NotebooksProjectsLocationsInstancesCheckUpgradabilityRequestr  s      r   'CreateInstanceCheckUpgradabilityRequestr[    s1     &335(		N	N 
O 
! !r   c                 x    t         j                  j                  | j                  d      }|j	                         S )Nz&notebooks.projects.locations.instances)
collection)r   REGISTRYParseRelativeNamer   SelfLink)resourcer   s     r   GetInstanceURIrb    s7    11mm H 2 J(				r   c                       e Zd Zej                  dfZej                  dfZej                  dfZ	ej                  dfZ
ej                  dfZej                  dfZej                  dfZy)	OperationTypecreatedupdatedrestoredupgradedzrolled backdeletedresetN)__name__
__module____qualname__r
   CreatedResourceCREATEUpdatedResourceUPDATERestoredResourceRESTOREUPGRADEROLLBACKDeletedResourceDELETEResetResourceRESETr!   r   r   rd  rd    sr    +&+&!!:.'  *-'!!=1(+&g
&%r   rd  c                     |j                   d   }|j                  rD |t        j                  | j                  |      dj                  |j                        d       | S t        j                  | dj                  |j                  |j                   d   | j                        |||j                   d   dk(        } |t        j                  | j                  |      dj                  |j                        d	       |S )
aJ  Handles Long-running Operations for both cases of async.

  Args:
    operation: The operation to poll.
    args: ArgParse instance containing user entered arguments.
    instance_service: The service to get the resource after the long-running
      operation completes.
    release_track: base.ReleaseTrack object.
    operation_type: Enum value of type OperationType indicating the kind of
      operation to wait for.

  Raises:
    apitools.base.py.HttpError: if the request returns an HTTP error

  Returns:
    The Instance resource if synchronous, else the Operation Resource.
  r   zworkbench instance {0}T)kindis_asyncz9Waiting for operation on Instance [{}] to be {} with [{}]   ri  )servicerelease_track	is_deleteF)r   async_r   GetOperationResourcer   formatr   WaitForOperation)	operationr   instance_servicer  operation_typelogging_methodresponses          r   	HandleLROr    s    , "''*.	[[!!)..-@%,,T]]; $$CJJMM>//2INN	D #!''*i7:H !!)..-@%,,T]]; Or   )A__doc__
__future__r   r   r   enum googlecloudsdk.api_lib.workbenchr   $googlecloudsdk.command_lib.util.apisr   $googlecloudsdk.command_lib.workbenchr   googlecloudsdk.corer	   r
   r   _RESERVATION_AFFINITY_KEYr   r   r3   r=   rC   rJ   rU   rh   rw   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&  r1  r3  r8  rJ  rR  rX  r[  rb  Enumrd  rq  r  r!   r   r   <module>r     s9   & &  '  1 : 6 * # ) F 8
"J8E
@)X0f
$ 
%P4 #*!#,^B""(J(P
O
9?97Q
	8/&<(=!'DII ' +11	)r   