
    >G                     4   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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# G d  d!ejH                        Z%e%jL                  fd"Z'y)#znotebooks instances api helper.    )absolute_import)division)unicode_literalsN)environments)util)	arg_utils)log)	resourcesz'compute.googleapis.com/reservation-namec                      fd fd fd} fd} fd} fd} fd} fd} fd	}	 fd
}
 fd} fd} fd} fd} fd} fd} fd}j                   j                   j                   j                   |        |        j                   |        j
                   j                   j                   |        |        |        |        j                   |        j                   j                   |
        |	        |        |        j                   |        |        |             }|S )a5  Creates the Instance message for the create request.

  Args:
    args: Argparse object from Command.Run
    client(base_api.BaseApiClient): An instance of the specified API client.
    messages: Module containing messages definition for the specified API.

  Returns:
    Instance of the Instance message.
  c                  ~    j                   } | j                  t        j                              }|j                  S N)projects_locations_environmentsGetenv_util CreateEnvironmentDescribeRequestcontainerImageenvironment_serviceresultargsclientmessagess     1lib/googlecloudsdk/api_lib/notebooks/instances.py(GetContainerImageFromExistingEnvironmentz@CreateInstance.<locals>.GetContainerImageFromExistingEnvironment+   s<     @@ $$11$ACF       c                  ~    j                   } | j                  t        j                              }|j                  S r   )r   r   r   r   vmImager   s     r   !GetVmImageFromExistingEnvironmentz9CreateInstance.<locals>.GetVmImageFromExistingEnvironment1   s:     @@ $$11$ACF>>r   c                       j                  d      r2 j                  j                  j                         j	                         S y )Nkms_key)IsSpecifiedCONCEPTSr    ParseRelativeNamer   s   r   GetKmsRelativeNamez*CreateInstance.<locals>.GetKmsRelativeName7   8    	"]]""((*7799 #r   c                       j                  d      r2 j                  j                  j                         j	                         S y )Nnetwork)r!   r"   r)   r#   r$   r%   s   r   GetNetworkRelativeNamez.CreateInstance.<locals>.GetNetworkRelativeName;   r'   r   c                       j                  d      r2 j                  j                  j                         j	                         S y )Nsubnet)r!   r"   r,   r#   r$   r%   s   r   GetSubnetRelativeNamez-CreateInstance.<locals>.GetSubnetRelativeName?   s8    !]]!!'')6688 "r   c                     j                   } d }j                  d      rOt        j                  d| j                  d       j                  t        j                  j                              } | |j                        S )Naccelerator_typeaccelerator-typec                 
    d| vS NUNSPECIFIED xs    r   <lambda>zHCreateInstance.<locals>.CreateAcceleratorConfigMessage.<locals>.<lambda>J   	    =#9r   arg_namemessage_enuminclude_filter)type	coreCount)	AcceleratorConfigr!   r   ChoiceEnumMapperTypeValueValuesEnumGetEnumForChoiceEnumNameToChoicer/   accelerator_core_count)accelerator_config	type_enumr   r   s     r   CreateAcceleratorConfigMessagez6CreateInstance.<locals>.CreateAcceleratorConfigMessageC   s    !33I*+,,%)==9; <L;K(()>)>?<A 
 $"="=? ?r   c                      d } j                  d      r[j                  }t        j                  d|j                  d       j                  t        j                  j                              } | S )Nboot_disk_typezboot-disk-typec                 
    d| vS r2   r4   r5   s    r   r7   z5CreateInstance.<locals>.GetBootDisk.<locals>.<lambda>V   r8   r   r9   )r!   Instancer   r@   BootDiskTypeValueValuesEnumrB   rC   rI   rF   instance_messager   r   s     r   GetBootDiskz#CreateInstance.<locals>.GetBootDiskO   so    I()!**,,#'CC9; <L;K(()<)<=<? 
 r   c                      d } j                  d      r[j                  }t        j                  d|j                  d       j                  t        j                  j                              } | S )Ndata_disk_typezdata-disk-typec                 
    d| vS r2   r4   r5   s    r   r7   z5CreateInstance.<locals>.GetDataDisk.<locals>.<lambda>a   r8   r   r9   )r!   rK   r   r@   DataDiskTypeValueValuesEnumrB   rC   rQ   rM   s     r   GetDataDiskz#CreateInstance.<locals>.GetDataDiskZ   sk    I()!**,,#'CC9 	33D4G4GHI	 
 r   c                      d } j                  d      r[j                  }t        j                  d|j                  d       j                  t        j                  j                              } | S )Ndisk_encryptionzdisk-encryptionc                 
    d| vS r2   r4   r5   s    r   r7   z;CreateInstance.<locals>.GetDiskEncryption.<locals>.<lambda>l   r8   r   r9   )r!   rK   r   r@   DiskEncryptionValueValuesEnumrB   rC   rV   rM   s     r   GetDiskEncryptionz)CreateInstance.<locals>.GetDiskEncryptione   sp    I)*!**,,$'EE9; <L;K(()=)=><@ 
 r   c                      j                  d      r        S j                  d      r)j                  j                  j                        } | S y )Nenvironmentcontainer_repository)
repositorytag)r!   ContainerImager\   container_tag)container_imager   r   r   s    r   CreateContainerImageFromArgsz4CreateInstance.<locals>.CreateContainerImageFromArgsp   sY    &577./ //..D4F4F 0 Hor   c                      j                  d      r        S j                  d      ryj                  j                        } j                  d      rj                  | _        | S j
                  | _        | S )z8Create VmImage Message from an environment or from args.r[   r\   N)projectvm_image_name)r!   VmImagevm_image_projectre   	imageNamevm_image_familyimageFamily)vm_imager   r   r   s    r   CreateVmImageFromArgsz-CreateInstance.<locals>.CreateVmImageFromArgsy   s}    &.00./(=(=>H(--h O "11hOr   c                  D     j                  d      r j                  gS g S )Ninstance_owners)r!   rn   r%   s   r   GetInstanceOwnersFromArgsz1CreateInstance.<locals>.GetInstanceOwnersFromArgs   s&    )*""##Ir   c            
          j                  d      r[j                  j                  }  | j                  j	                         D cg c]  \  }}| j                  ||       c}}      S y c c}}w )NlabelskeyvalueadditionalProperties)r!   rK   LabelsValuerq   itemsAdditionalProperty)labels_messagers   rt   r   r   s      r   GetLabelsFromArgsz)CreateInstance.<locals>.GetLabelsFromArgs   su    !((44n KK--/2/jc5 
+
+5
+
A/2 	 	 	2   A/
c            
          j                  d      r[j                  j                  }  | j                  j	                         D cg c]  \  }}| j                  ||       c}}      S y c c}}w )Nmetadatarr   ru   )r!   rK   MetadataValuer~   rx   ry   )metadata_messagers   rt   r   r   s      r   GetMetadataFromArgsz+CreateInstance.<locals>.GetMetadataFromArgs   sv    
#!**88 MM//141jc5 
-
-#U
-
C14 	 	 	4r|   c                      j                  d      s#j                  d      sj                  d      sy j                  }  | j                  j                  j                        S )Nshielded_vm_secure_bootshielded_vm_vtpm shielded_vm_integrity_monitoring)enableIntegrityMonitoringenableSecureBoot
enableVtpm)r!   ShieldedInstanceConfigr   r   r   ) shielded_instance_config_messager   r   s    r   !GetShieldedInstanceConfigFromArgsz9CreateInstance.<locals>.GetShieldedInstanceConfigFromArgs   sg    67/0?@'/'F'F$+"&"G"G55(( r   c                  B     j                  d      r j                  S g S )Ntags)r!   r   r%   s   r   GetTagsFromArgsz'CreateInstance.<locals>.GetTagsFromArgs   s     YYIr   c                     j                  d      sj                  d      sy fd}  |        }d }g }|j                  j                  j                  k(  rt        }j
                  g}j                  } ||||      S )Nreservation_affinityreservationc                      d } j                  d      r[j                  }t        j                  d|j                  d       j                  t        j                  j                              } | S )Nr   zreservation-affinityc                 
    d| vS r2   r4   r5   s    r   r7   zrCreateInstance.<locals>.GetReservationAffinityConfigFromArgs.<locals>.GetReservationAffinityEnum.<locals>.<lambda>   s	    ]!%;r   r9   )r!   ReservationAffinityr   r@   %ConsumeReservationTypeValueValuesEnumrB   rC   r   )rF   reservation_affinity_messager   r   s     r   GetReservationAffinityEnumz`CreateInstance.<locals>.GetReservationAffinityConfigFromArgs.<locals>.GetReservationAffinityEnum   sp    i			0	1'/'C'C$..+6@@;	= >N=M**4+D+DE>G	 	 r   )consumeReservationTypers   values)r!   r   r   SPECIFIC_RESERVATION_RESERVATION_AFFINITY_KEYr   )r   reservation_affinity_enumreservation_keyreservation_valuesreservation_config_messager   r   s        r   $GetReservationAffinityConfigFromArgsz<CreateInstance.<locals>.GetReservationAffinityConfigFromArgs   s    34]+
 !; <O!X%A%A	.	./C/C	D 2o ,,-!)!=!=%8! r   )namepostStartupScriptcustomGpuDriverPathinstanceOwnerskmsKeymachineTyper)   noProxyAccess
noPublicIpserviceAccountr,   r   acceleratorConfigbootDiskTypebootDiskSizeGbdataDiskTypedataDiskSizeGbnoRemoveDataDiskr   diskEncryptionrq   r~   installGpuDrivershieldedInstanceConfigreservationAffinityr   )rK   instancepost_startup_scriptcustom_gpu_driver_pathmachine_typeno_proxy_accessno_public_ipservice_accountboot_disk_sizedata_disk_sizeno_remove_data_diskinstall_gpu_driver)r   r   r   r&   r*   r-   rG   rO   rT   rY   rb   rl   ro   r{   r   r   r   r   r   r   r   s   ```                @@r   CreateInstancer      s0   !::9
?			

$L ==0055.0!##$&((""))"$#%68=((=((//13&( "$..>@>@5  (8 
/r   c                     t        j                  |       }t        | ||      }|j                  ||| j                        S )N)parentr   
instanceId)r   GetParentForInstancer   0NotebooksProjectsLocationsInstancesCreateRequestr   )r   r   r   r   r   s        r   CreateInstanceCreateRequestr      sF    $$T*&D&(3(		B	Bh4== 
C 
B Br   c                 P    t        j                  |       }|j                  |      S )N)r   )r   GetParentFromArgs.NotebooksProjectsLocationsInstancesListRequest)r   r   r   s      r   CreateInstanceListRequestr      s&    !!$'&		@	@	@	OOr   c                 X    t        |       j                         }|j                  |      S N)r   )GetInstanceResourcer$   0NotebooksProjectsLocationsInstancesDeleteRequestr   r   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                     t        |       }t        j                  |j                  |j                        j                         }|j                  |j                               }|j                  ||      S )N)r   )r   registerInstanceRequest)	r   r   GetLocationResourcelocationsId
projectsIdr$   RegisterInstanceRequestName2NotebooksProjectsLocationsInstancesRegisterRequest)r   r   r   r   register_requests        r   CreateInstanceRegisterRequestr     su     &(##H$8$8$,$7$799E 	55 6 "		D	D-= 
E 
? ?r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   resetInstanceRequest)r   r$   ResetInstanceRequest/NotebooksProjectsLocationsInstancesResetRequest)r   r   r   reset_requests       r   CreateInstanceResetRequestr     A     &335(//1-		A	A- 
B 
9 9r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   startInstanceRequest)r   r$   StartInstanceRequest/NotebooksProjectsLocationsInstancesStartRequest)r   r   r   start_requests       r   CreateInstanceStartRequestr     r   r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   stopInstanceRequest)r   r$   StopInstanceRequest.NotebooksProjectsLocationsInstancesStopRequest)r   r   r   stop_requests       r   CreateInstanceStopRequestr   #  sA     &335(--/,		@	@ 
A 
7 7r   c                    t        |       j                         }|j                         }|j                  }| j                  d      r| j                  |_        | j                  d      rVt        j                  d|j                  d       j                  t        j                  | j                              }||_        |j                  ||      S )z-Create and return Accelerator update request.rD   r/   r0   c                 
    d| vS r2   r4   r5   s    r   r7   z-CreateSetAcceleratorRequest.<locals>.<lambda>5  s	    a!7r   r9   )r   setInstanceAcceleratorRequest)r   r$   SetInstanceAcceleratorRequestr!   rD   r>   r   r@   rA   rB   rC   r/   r=   8NotebooksProjectsLocationsInstancesSetAcceleratorRequest)r   r   r   set_acc_requestrE   rF   s         r   CreateSetAcceleratorRequestr   *  s     &335(::</==	./ $ ; ;O	()**#';;79 :J9I&&t'<'<=:? 
 %O		J	J? 
K 
D Dr   c           
      F   t        |       j                         }|j                         }|j                  j                  } || j                  j                         D cg c]  \  }}|j                  ||       c}}      |_        |j                  ||      S c c}}w )Nrr   ru   )r   setInstanceLabelsRequest)r   r$   SetInstanceLabelsRequestrw   rq   rx   ry   3NotebooksProjectsLocationsInstancesSetLabelsRequest)r   r   r   set_label_requestrz   rs   rt   s          r   CreateSetLabelsRequestr   <  s     &335(77944@@.+))+B+*#u ''Cu'=+B  
	E	E.? 
F 
A A	Bs   B
c                     t        |       j                         }|j                  | j                        }|j	                  ||      S )N)r   )r   setInstanceMachineTypeRequest)r   r$   SetInstanceMachineTypeRequestr   8NotebooksProjectsLocationsInstancesSetMachineTypeRequest)r   r   r   set_machine_requests       r   CreateSetMachineTypeRequestr  H  sU     &335( >>## ? %		J	J3F 
K 
H Hr   c                 X    t        |       j                         }|j                  |      S r   )r   r$   ;NotebooksProjectsLocationsInstancesGetInstanceHealthRequestr   s      r   CreateInstanceGetHealthRequestr  P  s1     &335(		M	M 
N 
 r   c                 X    t        |       j                         }|j                  |      S )N)notebookInstance)r   r$   7NotebooksProjectsLocationsInstancesIsUpgradeableRequestr   s      r   "CreateInstanceIsUpgradeableRequestr	  V  s1     &335(		I	I 
J 
! !r   c                 z    t        |       j                         }|j                         }|j                  ||      S )N)r   upgradeInstanceRequest)r   r$   UpgradeInstanceRequest1NotebooksProjectsLocationsInstancesUpgradeRequest)r   r   r   upgrade_requests       r   CreateInstanceUpgradeRequestr  \  sA     &335(335/		C	CO 
D 
= =r   c                     t        |       j                         }|j                  | j                        }|j	                  ||      S )N)targetSnapshot)r   rollbackInstanceRequest)r   r$   RollbackInstanceRequesttarget_snapshot2NotebooksProjectsLocationsInstancesRollbackRequest)r   r   r   rollback_requests       r   CreateInstanceRollbackRequestr  c  sS     &335(55)) 6 +		D	D-= 
E 
? ?r   c                    t        |       j                         }|j                  | j                        }| j	                  d      r| j
                  |_        | j	                  d      rd|_        | j	                  d      rd|_        | j	                  d      rd|_	        d}| j	                  d      rt        | j                        }|j                  ||j                  ||	      
      S )z$"Create and return Diagnose request.)	gcsBucketrelative_pathzenable-repairTzenable-packet-capturezenable-copy-home-filesNtimeout_minutes)diagnosticConfigtimeoutMinutes)r   diagnoseInstanceRequest)r   r$   DiagnosticConfig
gcs_bucketr!   r  relativePathrepairFlagEnabledpacketCaptureFlagEnabledcopyHomeFilesFlagEnabledintr  2NotebooksProjectsLocationsInstancesDiagnoseRequestDiagnoseInstanceRequest)r   r   r   diagnostic_configr  s        r   CreateInstanceDiagnoseRequestr)  k  s     &335(// 0  
o&%)%7%7"	o&*.'	-.15.	./15./	'($../O		D	DX-M-M,_ .N .N 
E 
O Or   c                      t               j                         } fd}j                  |j                   |                   S )z#"Create and return Migrate request.c                      d } j                  d      r[j                  }t        j                  d|j                  d       j                  t        j                  j                              } | S )Npost_startup_script_optionzpost-startup-script-optionc                 
    d| vS r2   r4   r5   s    r   r7   zRCreateInstanceMigrateRequest.<locals>.GetPostStartupScriptOption.<locals>.<lambda>  r8   r   r9   )r!   MigrateInstanceRequestr   r@   &PostStartupScriptOptionValueValuesEnumrB   rC   r,  )rF   request_messager   r   s     r   GetPostStartupScriptOptionz@CreateInstanceMigrateRequest.<locals>.GetPostStartupScriptOption  so    I45 77o,,/&MM9; <L;K(()H)HI<K 
 r   )postStartupScriptOption)r   migrateInstanceRequest)r   r$   1NotebooksProjectsLocationsInstancesMigrateRequestr.  )r   r   r   r1  s   ``  r   CreateInstanceMigrateRequestr5    sR     &335(	 
	C	C%<<"<"> =  
D 
	 	r   c                 J    | j                   j                  j                         S r   )r"   r   r#   r%   s    r   r   r     s    				%	%	''r   c                 x    t         j                  j                  | j                  d      }|j	                         S )Nz&notebooks.projects.locations.instances)
collection)r
   REGISTRYParseRelativeNamer   SelfLink)resourcer   s     r   GetInstanceURIr=    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upgradedzrolled backdeletedresetmigratedN)__name__
__module____qualname__r	   CreatedResourceCREATEUpdatedResourceUPDATEUPGRADEROLLBACKDeletedResourceDELETEResetResourceRESETMIGRATEr4   r   r   r?  r?    sr    +&+&  *-'!!=1(+&g
&%  *-'r   r?  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notebooks instance {0}T)kindis_asyncz9Waiting for operation on Instance [{}] to be {} with [{}]   rC  )servicerelease_track	is_deleteF)rt   async_r   GetOperationResourcer   formatr   WaitForOperation)	operationr   instance_servicerY  operation_typelogging_methodresponses          r   	HandleLROrd    s    , "''*.	[[!!)..-@%,,T]]; $$CJJMM>//2INN	D #!''*i7:H !!)..-@%,,T]]; Or   )(__doc__
__future__r   r   r   enum googlecloudsdk.api_lib.notebooksr   r   r   $googlecloudsdk.command_lib.util.apisr   googlecloudsdk.corer	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r)  r5  r   r=  Enumr?  rL  rd  r4   r   r   <module>rl     s    & &  '  E 1 : # )E RjBP
O
?997D$	AH!=?O0	,(.DII . +11	)r   