
    o_                     B   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 ddiZdZdZe	j0                   e	j2                  e	j4                  j6                         G d de	j8                                      Ze	j0                   e	j2                  e	j4                  j<                         G d de                    Ze	j0                   e	j2                  e	j4                  j@                         G d de                    Z!y)z9Command that updates scalar properties of an environment.    )absolute_import)division)unicode_literals)environments_util)base)environment_patch_util)flags)image_versions_util)resource_args)util)logEXAMPLESz        To update the Cloud Composer environment named ``env-1'' to have 8
        Airflow workers, and not have the ``production'' label, run:

          $ {command} env-1 --node-count=8 --remove-labels=production
      z5Cannot specify --{opt} with Composer 2.X or greater.
z*Cannot specify --{opt} with Composer 1.X.
c                       e Zd ZdZeZdZdZdZe	e
j                  j                  fd       Zd Zd Zd Zd Zd Zd	 Zy
)Update2Update properties of a Cloud Composer environment.Tc                 z   t        j                  | d       t        j                  j	                  |        | j                  dd      t        _        t        j                  t        j                         t        j                  t        j                         t        j                  t        j                         t        j                  t        j                         t        j                  t        j                         t        j                  j                         }t        j                  j	                  |       t        j                  j	                  |       t        j                   j	                  |       t        j"                  j	                  t        j                         t        j$                  j	                  t        j                         t        j&                  j	                  t        j                         t        j(                  j	                  t        j                         t        j*                  j	                  t        j                         t        j,                  j	                  t        j                         t        j.                  t        j                  |       t        j0                  t        j                         t        j2                  j	                  t        j                  j5                                t        j6                  t        j                         t        j8                  t        j                         t        j:                  t        j                         t        j<                  t        j                  |       t        j>                  t        j                         y )Nz	to updateTzThe update type.)requiredhelp) r   AddEnvironmentResourceArgr   
ASYNC_FLAGAddToParseradd_mutually_exclusive_groupr   update_type_groupr	   AddNodeCountUpdateFlagToGroupAddPypiUpdateFlagsToGroup AddEnvVariableUpdateFlagsToGroup"AddAirflowConfigUpdateFlagsToGroupAddLabelsUpdateFlagsToGroupUPDATE_WEB_SERVER_ALLOW_IPWEB_SERVER_ALLOW_ALLWEB_SERVER_DENY_ALLENABLE_HIGH_RESILIENCEDISABLE_HIGH_RESILIENCE!ENABLE_LOGS_IN_CLOUD_LOGGING_ONLY"DISABLE_LOGS_IN_CLOUD_LOGGING_ONLYCLOUD_SQL_MACHINE_TYPEWEB_SERVER_MACHINE_TYPE AddAutoscalingUpdateFlagsToGroup-AddMasterAuthorizedNetworksUpdateFlagsToGroupAIRFLOW_DATABASE_RETENTION_DAYSadd_argument_group AddScheduledSnapshotFlagsToGroup$AddMaintenanceWindowFlagsUpdateGroup0AddCloudDataLineageIntegrationUpdateFlagsToGroupAddEnvUpgradeFlagsToGroupAddComposer3FlagsToGroup)parserrelease_trackweb_server_groups      +lib/surface/composer/environments/update.pyArgszUpdate.Args;   sf   ++FK@OO'%BB.  C  0F	''(@(@A	##F$<$<=	**6+C+CD	,,V-E-EF	%%f&>&>?//LLN	$$001AB	**+;<	))*:;	  ,,V-E-EF	!!--f.F.FG	++77   
,,88   
  ,,V-E-EF	!!--f.F.FG	**6+C+C+8:	77  " 
))55  335 
**6+C+CD	..v/G/GH	::  " 
##F$<$<mL	""6#;#;<    c           	         t        j                  || j                               }t        j                  |j
                  j                  j                        }t        d>i d|d|d|j                  d|j                  d|j                  d|j                  dt        d	 |j                  D              d
|j                  d|j                  d|j                   d|j"                  d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  d| j                         }| j/                  |||| j                               |d<   t        j0                  |j2                  |j4                  |j6                        |d<   |j8                  r+|s)t;        j<                  t>        jA                  d            |jB                  r+|s)t;        j<                  t>        jA                  d            |j8                  |d<   |jB                  |d<   | jD                  r>|jF                  r+|r)t;        j<                  tH        jA                  d            | j                         tJ        j                  jL                  k(  r-tN        jP                  jS                  |jF                        |d<   n| j                         tJ        j                  jT                  k(  r-tN        jV                  jS                  |jF                        |d<   nW| j                         tJ        j                  jX                  k(  r,tN        jZ                  jS                  |jF                        |d<   | j\                  r,|j^                  s|j`                  s|jb                  s|jd                  s|jf                  s|jh                  sx|jj                  sl|jl                  s`|jn                  sT|jp                  sH|jr                  s<|jt                  s0|jv                  s$|jx                  |jz                  s|j|                  rd|d<   |rt;        j<                  d      |j
                  j~                  r||j
                  j~                  j                  r|j
                  j~                  j                  j                  |d <   |j
                  j~                  j                  j                  |d!<   |j
                  j~                  j                  j                  |d"<   |j
                  j~                  j                  j                  |d#<   |j
                  j~                  j                  r|j
                  j~                  j                  j                  |d$<   |j
                  j~                  j                  j                  |d%<   |j
                  j~                  j                  j                  |d&<   |j
                  j~                  j                  j                  |d'<   |j
                  j~                  j                  j                  |d(<   |j
                  j~                  j                  r|j
                  j~                  j                  j                  |d)<   |j
                  j~                  j                  j                  |d*<   |j
                  j~                  j                  j                  |d+<   |j                  |j                  |d#<   |sd|d<   |j^                  |j^                  |d <   |j`                  |j`                  |d$<   |jb                  |jb                  |d)<   |jd                  "t        j                  |jd                        |d!<   |jf                  "t        j                  |jf                        |d%<   |jh                  "t        j                  |jh                        |d*<   |jj                  "t        j                  |jj                        |d"<   |jl                  "t        j                  |jl                        |d&<   |jn                  "t        j                  |jn                        |d+<   |jp                  r|jp                  |d'<   |jr                  r|jr                  |d(<   | j                  |||       | j                  |||       | j                  r<|j                  |d,<   |j                  |d-<   |j                  |d.<   |j                  |d/<   |j                  |d0<   |j                  r!|j                  rt;        j<                  d1      |j                  r!|j                  rt;        j<                  d2      |j                  !|j                  rt;        j<                  d3      |j                  s|j                  r|j                  rdnd4|d5<   t;        j                  |j                         |j                  |d6<   |j                  s|j                  rZ|r@t;        j<                  tH        jA                  |j                  rd7            d8            t        |j                        |d7<   |j                  s|j                  rZ|r@t;        j<                  tH        jA                  |j                  rd9            d:            t        |j                        |d9<   |j                  s|j                  rZ|r@t;        j<                  tH        jA                  |j                  rd;            d<            t        |j                        |d=<   | j                  |||       t        j                  d>i |S )?Nr2   is_composer_v1env_ref
node_countupdate_pypi_packages_from_fileclear_pypi_packagesremove_pypi_packagesupdate_pypi_packagesc              3   F   K   | ]  }t        j                  |        y wN)command_utilSplitRequirementSpecifier).0rs     r4   	<genexpr>z)Update._ConstructPatch.<locals>.<genexpr>w   s#      "/- 2215-s   !clear_labelsremove_labelsupdate_labelsclear_airflow_configsremove_airflow_configsupdate_airflow_configsclear_env_variablesremove_env_variablesupdate_env_variablesr2   update_image_version update_web_server_access_controlzcloud-sql-machine-type)optzweb-server-machine-typecloud_sql_machine_typeweb_server_machine_typezenvironment-sizeenvironment_sizeTworkload_updatedziWorkloads Config flags introduced in Composer 2.X cannot be used when updating Composer 1.X environments.scheduler_cpuscheduler_memory_gbscheduler_storage_gbscheduler_count
worker_cpuworker_memory_gbworker_storage_gbmin_workersmax_workersweb_server_cpuweb_server_memory_gbweb_server_storage_gbclear_maintenance_windowmaintenance_window_startmaintenance_window_endmaintenance_window_recurrenceairflow_database_retention_daysz\Cannot specify --enable-master-authorized-networks with --disable-master-authorized-networkszUCannot specify --disable-master-authorized-networks with --master-authorized-networkszWCannot specify --master-authorized-networks without --enable-master-authorized-networksF"master_authorized_networks_enabledmaster_authorized_networksenable_high_resiliencedisable_high_resilience!enable_logs_in_cloud_logging_only"disable_logs_in_cloud_logging_onlyz%enable-cloud-data-lineage-integrationz&disable-cloud-data-lineage-integration&cloud_data_lineage_integration_enabled )aenvironments_api_utilGetReleaseTrackimage_versions_command_utilIsImageVersionStringComposerV1configsoftwareConfigimageVersiondictr;   r<   r=   r>   update_pypi_packagerG   rH   rI   rJ   rK   rL   rM   rN   rO   _getImageVersionBuildWebServerAllowedIpsupdate_web_server_allow_ipweb_server_allow_allweb_server_deny_allrS   rB   InvalidUserInputError _INVALID_OPTION_FOR_V2_ERROR_MSGformatrT   _support_environment_sizerU    _INVALID_OPTION_FOR_V1_ERROR_MSGr   GAr	   ENVIRONMENT_SIZE_GAGetEnumForChoiceBETAENVIRONMENT_SIZE_BETAALPHAENVIRONMENT_SIZE_ALPHA_support_autoscalingrW   r[   r`   scheduler_memoryworker_memoryweb_server_memoryscheduler_storageworker_storageweb_server_storager^   r_   enable_triggererdisable_triggerertriggerer_counttriggerer_cputriggerer_memoryworkloadsConfig	schedulercpumemoryGb	storageGbcountworkerminCountmaxCount	webServerrZ   MemorySizeBytesToGB_addScheduledSnapshotFields_addTriggererFields_support_maintenance_windowrc   rd   re   rf   rg   !enable_master_authorized_networks"disable_master_authorized_networksri    ValidateMasterAuthorizedNetworksrj   rk   boolrl   rm   %enable_cloud_data_lineage_integration&disable_cloud_data_lineage_integration_addComposer3Fields
patch_utilConstructPatch)selfr:   argsenv_objr9   paramss         r4   _ConstructPatchzUpdate._ConstructPatchj   s
   #''t0024G0OO%%224N  % ?? (,'J'J	
 !44 "66 " "/--"/ / && (( (( #88  $::  $::  !44!" "66#$ "66%& '')'F, &*%:%:gw 1 1 3&F!" 	66++%%$$	
 -. "">..
*
1
16N
1
O  ##N..
*
1
16O
1
P  (,'B'BF#$(,(D(DF$%%%			>00,338J3K
 	
 
			 1 1 4 4	4%*%>%>%O%O!!&
!" $"3"3"8"88''889N9NO 	!" $"3"3"9"99((99$:O:OP 	!"   


__  ""####  $$##''%%1##&& &*!"22I  
	'	'>>))33$+NN$B$B$L$L$P$P&
!nn,,66?? &
' nn,,66@@ '
( nn,,66<< "
# >>))00!(!?!?!F!F!J!J&
 nn,,33<< #
$ nn,,33== $
% #*.."@"@"G"G"P"P&
").."@"@"G"G"P"P&
>>))33nn,,66:: !
" nn,,66?? '
( nn,,66@@ (
) 
			)$($8$8 !'+&#
$				'"&"4"4		$#|				(#'#6#6 				*!55d6K6KL 	$% 
			'%:%N%N&
!" 
			+!55d6L6LM 	%& 
			+!55d6L6LM 	%& 
			(&;&O&O'
"# 
	 	 	,!55d6M6MN 	&' 
		 $ 0 0}			 $ 0 0}$$VT>BVT73''+/+H+Hf'(+/+H+Hf'()-)D)Df%&-1-O-O 
)+ 	,, ,- --$2Y2Y..
h  ..43R3R..
a  --5$:Y:Y..
c  --1X1X:>:`:`$fk 
.011'')+/+J+JF'(""d&B&B	00,33.. - 4 
 	
 / 4 
 	
 *.d.I.I)Jf%& 	..22	00,3399 8 4 
 	
 : 4 
 	
 59

0
05f01
 	2266	00,33== < 4 
 	
 > 4 
 	
 :>

4
4:f56 	VT73$$.v..r6   c                 2   |t         j                  j                  k7  rt        j                  |j
                  j                  j                        }|j                  s|j                  r`|s^t        j                  |j                        r?t        j                  |j                  |j                        }t        j                  |       |j                  rCt        j                  |j                  |j
                  j                  j                        |_        |j                  rit        j                  |j
                  j                  j                  |j                        }|j                   st#        j$                  |j&                        |j                  S rA   )r   rr   r   rs   IsVersionComposer3Compatibleru   rv   rw   image_versionairflow_versionIsDefaultImageVersion"BuildDefaultComposerVersionWarningr   warningImageVersionFromAirflowVersionIsValidImageVersionUpgradeupgrade_validrB   r   error)r   r   r:   r   r2   is_composer_3messageupgrade_validations           r4   rz   zUpdate._getImageVersion]  s;   )),,,1NN
..
'
'
4
4m
 $"6"6})??$$ (JJ""D$8$8 	
 	G			'FF$$gnn&C&C&P&P 	 
%
@
@nn++88$:L:L 
  --001C1I1IJJr6   c                    t        j                  |j                  j                  j                        }|j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  d}|j%                         D ]L  \  }}|	|rt'        j(                  t*        j,                  j/                  |t*        j0                               |j                  $|j                  s|j                  s|j                  rd|d<   d }d }	d }
d }|j                  j2                  rp|j                  j2                  j4                  rP|j                  j2                  j4                  }|j6                  }|j8                  }	|j:                  }
|j<                  }|j                  |j                  }|j                  r|j                  }	|j                  rt?        j@                  |j                        }
|j                  rt?        j@                  |j                        }|j
                  |j
                  |d<   |j                  s|j                  r|j                  rdnd|d<   |j                  |j                  |d<   |j                  |j                  |d	<   ||d
<   |	|d<   |
|d<   ||d<   |j                  rd|d<   |jB                  r|jB                  |d<   |j                  r|j                  |d<   |j                   r|j                   |d<   y y )N)zsupport-web-server-pluginszenable-private-builds-onlyzdisable-private-builds-onlyzdag-processor-cpuzdag-processor-memoryzdag-processor-countzdag-processor-storagezdisable-vpc-connectivityzenable-private-environmentzdisable-private-environmentnetwork
subnetworkzclear-maintenance-window)rR   composer_versionTrV   support_web_server_pluginsFsupport_private_builds_onlyenable_private_environmentdisable_private_environmentdag_processor_countdag_processor_cpudag_processor_memory_gbdag_processor_storage_gbdisable_vpc_connectivitynetwork_attachmentr   r   )"rs   r   ru   rv   rw   r   enable_private_builds_onlydisable_private_builds_onlyr   dag_processor_memoryr   dag_processor_storager   r   r   r   r   rc   itemsrB   r   r	   COMPOSER3_IS_REQUIRED_MSGr   MIN_COMPOSER3_VERSIONr   dagProcessorr   r   r   r   rp   r   r   )r   r   r   r   is_composer3possible_argskvr   r   r   r   dag_processor_resources                r4   r   zUpdate._addComposer3Fields  s-   .KK%%22L
 '+&E&E&*&E&E'+'G'G!33 $ 9 9#77!%!;!;$($A$A&*&E&E'+'G'G<<oo$($A$AM ##%1	
|00++22!&!<!< 3 
 	
 & 	  ,!!$$%%#'f "# 	&&NN**77&~~==JJ288044 6 ? ?!7!A!A+ 4400   5 I I

#
#! !!!6!J!J

$
$" &&2-1-L-Lf)*&&$*J*J11$u *+ &&2-1-L-Lf)*''3.2.N.Nf*+$7F !"3F(?F$%)AF%&$$+/f'(%)%<%<f!"||,,fY!__f\ r6   c                    |j                   s|j                  r|rt        j                  d      |j                   rd|d<   |j                  r3d|d<   |j                  |d<   |j
                  |d<   |j                  |d<   y y )NzjScheduled Snapshots flags introduced in Composer 2.X cannot be used when creating Composer 1 environments.F"enable_scheduled_snapshot_creationTsnapshot_locationsnapshot_schedule_timezonesnapshot_creation_schedule)#disable_scheduled_snapshot_creationr   rB   r   r   r   r   )r   r   r   r9   s       r4   r   z"Update._addScheduledSnapshotFields  s    00//^..CD D //5:f12..59f12$($:$:f !-1-L-Lf)*-1-L-Lf)*	 /r6   c                 J   t        j                  |j                  j                  j                        }d }d }d }|j                  j
                  r|j                  j
                  j                  r|j                  j
                  j                  j                  dk7  r~|j                  j
                  j                  j                  }|j                  j
                  j                  j                  }|j                  j
                  j                  j                  }|j                  s|j                  r|j                  rdnd}|j                  |j                  }|j                  r|j                  }|j                  rt        j                   |j                        }|j                  |j                  |j                  d}|j#                         D ][  \  }	}
|
s	|rt%        j&                  t(        j*                  j-                  |	t(        j.                  t(        j0                               |sB|j                  rt%        j&                  d      |j                  rt%        j&                  d      |dk(  r|r|st%        j&                  d      ||d<   |r||d	<   ||d
<   y y )Nr      )ztriggerer-countztriggerer-cpuztriggerer-memory)rR   r   r   z8Cannot specify --triggerer-cpu without enabled triggererz;Cannot specify --triggerer-memory without enabled triggererzCCannot enable triggerer without providing triggerer memory and cpu.r   r   triggerer_memory_gb)rs   IsVersionTriggererCompatibleru   rv   rw   r   	triggererr   r   r   r   r   r   r   r   rp   r   r   rB   r   r	   .INVALID_OPTION_FOR_MIN_IMAGE_VERSION_ERROR_MSGr   MIN_TRIGGERER_COMPOSER_VERSIONMIN_TRIGGERER_AIRFLOW_VERSION)r   r   r   r   triggerer_supportedr   r   r   r   r   r   s              r4   r   zUpdate._addTriggererFields  sP   5RR%%224OM&&&&00&&0066!;66@@FFo#NN::DDMMnn44>>BBm!6!6!22o',,o((m1EE


!  00++ 11M
 ##%1	
&00@@GG!&!E!E % C C H EF 	F & 			00FH 	H			00IK 	K!%8]..
OQ Q /F -f_&9f"# r6   c                     |j                   j                  j                         }| j                  ||      \  }}t	        j
                  ||||j                  | j                               S )Nr8   )CONCEPTSenvironmentParser   r   Patchasync_rr   )r   r   r:   
field_maskpatchs        r4   Runz
Update.Run  s`    mm''--/G,,Wd;J'')+ +r6   N)__name__
__module____qualname____doc__DETAILED_HELPdetailed_helpr   r   r   staticmethodr   rr   r   r5   r   rz   r   r   r   r   ro   r6   r4   r   r   1   se     ;- $"!%!2!2!5!5 ,= ,=\q/f$LV-rM.:`+r6   r   c                   n    e Zd ZdZdZdZdZeej                  j                  fd       Zed        Zd Zy)
UpdateBetar   Tc                 2    t         j                  | |       y)z0Arguments available only in both alpha and beta.r8   N)r   r5   )r1   r2   s     r4   AlphaAndBetaArgszUpdateBeta.AlphaAndBetaArgs/  s     KKmK4r6   c                 `    t         j                  | t        j                  j                         y)z/Arguments available only in beta, not in alpha.N)r   r   r   rr   r   r1   s    r4   r5   zUpdateBeta.Args4  s      (9(9(>(>?r6   c                    |j                   j                  j                         }| j                         t        j                  j
                  k(  r<|j                  r0t        j                  |j                  D cg c]  }|d   	 c}       | j                  ||      \  }}t        j                  ||||j                  | j                               S c c}w )Nip_ranger8   )r   r   r   rr   r   r   r|   r	   ValidateIpRangesr   r   r   r   )r   r   r:   aclr   r   s         r4   r   zUpdateBeta.Run9  s    mm''--/G 	t00555''&*&E&E
F&Es3z?&E
FH ,,Wd;J'')+ +	 Gs   9CN)r   r   r   r   r   r   r   r   r   rr   r   r   r5   r   ro   r6   r4   r   r   &  sU     ; $"-1->->-C-C 5 5 @ @+r6   r   c                   $    e Zd ZdZdZed        Zy)UpdateAlphar   Tc                 `    t         j                  | t        j                  j                         y rA   )r   r   r   rr   r   r   s    r4   r5   zUpdateAlpha.ArgsS  s    (9(9(?(?@r6   N)r   r   r   r   r   r   r5   ro   r6   r4   r  r  L  s!     ;A Ar6   r  N)"r   
__future__r   r   r   googlecloudsdk.api_lib.composerr   rp   googlecloudsdk.callioper   #googlecloudsdk.command_lib.composerr   r   r	   r
   rs   r   r   rB   googlecloudsdk.corer   r   r   r   DefaultUniverseOnlyReleaseTracksrr   r   Commandr   r   r   r   r  ro   r6   r4   <module>r     s   @ &  ' V ( T 5 b = D # 	
$  $  
 D%%(()p+T\\ p+ * p+f D%%**+!+ !+ , !+H D%%++,A* A - Ar6   