
                            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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Zej8                  j:                  Zddd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) Z3d4d*Z4d+ Z5d5d,Z6d- Z7d. Z8d/ Z9 G d0 d1e:      Z; G d2 d3e;      Z<y)63Common utility functions for sql instance commands.    )absolute_import)division)unicode_literalsN)	constants)
exceptions)instance_prop_reducers)	instances)validate)base)info_holder)labels_util)execution_utils)log)
properties)
console_ioPD_HDDPD_SSDHYPERDISK_BALANCED)HDDSSDr   c                     t        j                  | j                         |j                  j	                  | j                  dt
        j                  j                  j                  j                  id      S )z-Validates and returns the instance reference.projectzsql.instances)params
collection)
r   ValidateInstanceNameinstanceresource_parserParser   VALUEScorer   	GetOrFail)argsclients     /lib/googlecloudsdk/command_lib/sql/instances.pyGetInstanceRefr&   0   s\    
.				%	%
mm**//77AAB  
& 
     c                     g }| j                  d      r#	 |j                  |d   | j                  g       |S |S # t        $ r t	        j
                  dd      w xY w)zCGets the args for specifying a database during instance connection.databasez
--databasez5This instance does not support the database argument.)IsSpecifiedextendr)   KeyErrorr   InvalidArgumentException)r#   flagscommand_line_argss      r%   GetDatabaseArgsr0   :   so    	j!j 14==AB
 
		  //
O s	    9  Ac                 ^   	 t         j                  j                  dj                  |             t	        j
                  |        y# t        $ r] t        j                  dj                  dj                  |                    t        j                  t        j                                Y yw xY w)z0Connects to the instance using the relevant CLI.z+Connecting to database with SQL user [{0}].zFailed to execute command "{0}" N)r   statuswriteformatr   ExecOSErrorerrorjoinPrintr   
InfoHolder)cmd_argssql_users     r%   ConnectToInstancer>   G   s|    (JJ5<<XF "	 (II/66sxx7IJKIIk$$&'(s   AA A#B,+B,c                     | j                   j                  j                         }|r|r
t                |j	                         S dD ]5  }t        | |j                  dd      d      s!t        j                  dd       y)zDParses the CMEK resource arg, makes sure the key format was correct.)zdisk-encryption-keyzdisk-encryption-key-keyringzdisk-encryption-key-locationzdisk-encryption-key-project-_Nz--disk-encryption-keyznot fully specified.)	CONCEPTSkms_keyr   _ShowCmekPromptRelativeNamegetattrreplacer   r-   )r#   
is_primarykms_refkeywords       r%   _GetAndValidateCmekKeyNamerK   S   su    MM!!'')' !! 
wsC0$	711#%;
 	
r'   c                 6    | j                   xs | j                  S N)zonegce_zoner#   s    r%   _GetZonerQ   j   s    		#dmm#r'   c                 $    d| v r| j                   S y )Nsecondary_zone)rS   rP   s    r%   _GetSecondaryZonerT   n   s    	r'   c                 L   | j                  d      r3t        t        j                  d|       j	                  d            }|dkD  S | j                  d      rOt        j                  d|       }t        |j	                  d            t        |j	                  d            f}|dkD  S y	)
a  Checks if the replica inherits the tier of the primary for E+ instances.

  Ideally, this would be the case for all database versions. However, changing
  it now is technically a breaking change, so we are only adding support for new
  database types going forward.

  Args:
    replica_database_version: The database version of the replica.

  Returns:
    True if the replica infers the tier from the primary (database version is
    PG16+).
  	POSTGRES_z^POSTGRES_(\d+).*      MYSQL_z^MYSQL_(\d+)_(\d+).*   )   r   F)
startswithintresearchgroup)replica_database_versiondatabase_major_versionmatchs      r%   1DoesEnterprisePlusReplicaInferTierForDatabaseTyperd   u   s     ((5 !
		&(@AGGJ "B&&((2 II-/GHE!%++a.13u{{1~3FG!F**	r'   c                 <    | t         j                  j                  k(  S rM   )r   ReleaseTrackALPHArelease_tracks    r%   _IsAlpharj      s    	$++11	11r'   c                 V    | t         j                  j                  k(  xs t        |       S rM   )r   rf   BETArj   rh   s    r%   IsBetaOrNewerrm      s#    	$++00	0	KH]4KKr'   c                     |rC| j                   j                  j                  |j                  dd      j	                               S y Nr@   rA   )SettingsActivationPolicyValueValuesEnumlookup_by_namerG   upper)sql_messagespolicys     r%   _ParseActivationPolicyrv      s@      @@OOsC &&(  
r'   c                 n    |r3| j                   j                  j                  |j                               S y rM   )rp   AvailabilityTypeValueValuesEnumrr   rs   )rt   availability_types     r%   _ParseAvailabilityTyperz      s5      @@OO!  
r'   c                 n    |r3| j                   j                  j                  |j                               S y rM   )DatabaseInstanceDatabaseVersionValueValuesEnumrr   rs   )rt   database_versions     r%   ParseDatabaseVersionr      s5    ((GGVV   
r'   c                 n    |r3| j                   j                  j                  |j                               S y rM   )rp   PricingPlanValueValuesEnumrr   rs   )rt   pricing_plans     r%   _ParsePricingPlanr      s5      ;;JJ  
r'   c                 n    |r3| j                   j                  j                  |j                               S y rM   )rp   ReplicationTypeValueValuesEnumrr   rs   )rt   replications     r%   _ParseReplicationTyper      s5      ??NN  
r'   c                 n    |r3| j                   j                  j                  |j                               S y rM   )rp   DataDiskTypeValueValuesEnumrr   rs   )rt   storage_types     r%   _ParseStorageTyper      s5      <<KK  
r'   c                     |rC| j                   j                  j                  |j                  dd      j	                               S y ro   )rp   EditionValueValuesEnumrr   rG   rs   )rt   editions     r%   _ParseEditionr      s@      77FFS!'')  
r'   c                     |rC| j                   j                  j                  |j                  dd      j	                               S y ro   )r|   InstanceTypeValueValuesEnumrr   rG   rs   )rt   instance_types     r%   _ParseInstanceTyper      sB    ((DDSSc3'--/  
r'   c                 h    | j                   j                  j                  |j                               S rM   )rp   #ConnectorEnforcementValueValuesEnumrr   rs   )rt   connector_enforcements     r%   _ParseConnectorEnforcementr      s-    ??NN

%
%
'r'   c                 h    | j                   j                  j                  |j                               S rM   )IpConfigurationSslModeValueValuesEnumrr   rs   )rt   ssl_modes     r%   _ParseSslModer      s+    		%	%	<	<	K	Knn
 r'   c                 h    | j                   j                  j                  |j                               S rM   )r   ServerCaModeValueValuesEnumrr   rs   )rt   server_ca_modes     r%   _ParseServerCaModer      s-    "">>MM



 r'   c                     d}| r&t        j                  |j                  dd             y t        j                  |j                  dd             y )NzUpgrade your First Generation instance{} to Second Generation before we auto-upgrade {} on March 4, 2020, ahead of the full decommission of First Generation on March 25, 2020.sthem itr   warningr5   )pluralmessages     r%   ShowV1DeprecationWarningr      s?    , 

 KKsF+,KKr4()r'   c                     | j                  d      }| j                  d      xs | j                  d      }|s|st        j                  d       yyy)zShow warnings if both region and zone are specified or neither is.

  Args:
      args: argparse.Namespace, The arguments that the command was invoked with.
  regionrO   rN   zhStarting with release 233.0.0, you will need to specify either a region or a zone to create an instance.N)r*   r   r   )r#   region_specifiedzone_specifieds      r%   ShowZoneDeprecationWarningsr      sU     %%h/##J/K43C3CF3K. nKK	; -
r'   c                     |%t        j                  dj                  |              y t        j                  dj                  | |             y )NzYour {} will be encrypted with a customer-managed key. If anyone destroys this key, all data encrypted with it will be permanently lost.zYour {} will be encrypted with {}'s customer-managed encryption key. If anyone destroys this key, all data encrypted with it will be permanently lost.r   )resource_type_labelinstance_type_labels     r%   ShowCmekWarningr     sE     KK	*+ KK	"F#68KLr'   c                  Z    t        j                  d       t        j                  d       y )NzYou are creating a Cloud SQL instance encrypted with a customer-managed key. If anyone destroys a customer-managed key, all data encrypted with it will be permanently lost.
T)cancel_on_no)r   r   r   PromptContinue r'   r%   rD   rD      s#    ++'
 .r'   c                  .    t        j                  d       y )Na"  Failover replicas will soon be deprecated and support will be discontinued. We recommend migrating to the new high availability configuration, based on regional persistent disks (RePD). For more information, see https://cloud.google.com/sql/docs/mysql/configure-legacy-ha#update-from-legacyr   r   r   r'   r%   &_ShowFailoverReplicaDeprecationWarningr   )  s    ++Wr'   c                  .    t        j                  d       y )NzoSetting the accelerated replica mode for a replica may cause recreate of the replica instance in case of crash.r   r   r'   r%   "_ShowAcceleratedReplicaModeWarningr   3  s    ++Ar'   c                       e Zd ZdZedefd       Zedefd       Zeefd       Zeddefd       Z	eddefd       Z
edefd       Zy)	_BaseInstancesr   Nc           
         d|vrd|_         d|vrd|_        d|vrd|_        |j                  d      sd|_        |j                  dt        j                  ||j                  |j                  |j                        t        ||j                        t        ||j                        t        ||j                              }|j                   r|j                   |_        t!        |j"                  du|j$                  du|j&                  g      r|j)                         |_        |j"                  | j-                  ||j"                         |j&                  r'| j/                  ||j&                  |j0                         |j$                  |j$                  |j*                  _        t!        |j                  t5        |      t7        |      g      r6|j9                  d	|j                  t5        |      t7        |      
      |_        |j<                  r+t?        |j<                  t@        jB                  z        |_"        |j                  d      rt?        |jF                        |_$        |j                  d      rt?        |jJ                        |_&        |jN                  |jN                  |_(        |jS                  d      rtU        ||jV                        |_,        |jS                  d      rO|j*                  s|j)                         |_        t        jZ                  |j\                        |j*                  _/        |j                  d      r<|j*                  s|j)                         |_        |j`                  |j*                  _1        |j                  d      r{|j*                  s|j)                         |_        |j*                  jd                  s|jg                         |j*                  _2        |jh                  |j*                  jd                  _5        |jS                  d      r{|j*                  s|j)                         |_        |j*                  jd                  s|jg                         |j*                  _2        |jl                  |j*                  jd                  _7        |j                  d      rq|j*                  s|j)                         |_        |j*                  jd                  s|jg                         |j*                  _2        g |j*                  jd                  _7        |j                  d      r{|j*                  s|j)                         |_        |j*                  jd                  s|jg                         |j*                  _2        |jp                  |j*                  jd                  _9        |j                  d      rq|j*                  s|j)                         |_        |j*                  jd                  s|jg                         |j*                  _2        d|j*                  jd                  _9        |jt                  |jt                  |_;        |jS                  d      rty        ||jz                        |_>        |j                  d      r|j~                  |_@        |jS                  d      rt        ||j                        |_B        |j                  d      r<|j                  s|j                         |_C        |j                  |j                  _F        |jS                  d      rF|j*                  s|j)                         |_        t        ||j                        |j*                  _I        |j                  |j                  |_K        |j                  |j                  |_M        |j                  d      rF|j*                  s|j)                         |_        t        ||j                        |j*                  _P        |j                  |j                  |_R        |j                  d      r<|j*                  s|j)                         |_        |j                  |j*                  _T        |j                  d      rX|j                  rL|j*                  j                  |j(                  j                  j                  k7  rnt        j                  d      |j*                  rM|j*                  j                  |j(                  j                  j                  k(  rt        j                  dd      |j                  d       r<|j*                  s|j)                         |_        |j                  |j*                  _\        |j                  d!      r2|j*                  s|j)                         |_        g |j*                  _\        t        |      r|jS                  d"      rP|r|j                  jP                  s|jN                  r|j                  xs d#|_`        nt        j                  d$d%      |j                  |j                  |_b        |j                  d&      r<|j                  s|j                         |_c        |j                  |j                  _f        |j                  d'      rt                |j                  |_i        |j                  d(      rd)|_j        |S )*a  Constructs instance settings from the command line arguments.

    Args:
      sql_messages: module, The messages module that should be used.
      args: argparse.Namespace, The arguments that this command was invoked
        with.
      instance: sql_messages.DatabaseInstance, The original instance, for
        settings that depend on the previous state.
      release_track: base.ReleaseTrack, the release track that this was run
        under.

    Returns:
      A settings object representing the instance settings.

    Raises:
      ToolException: An error other than http error occurred while executing the
          command.
    authorized_gae_appsNfollow_gae_appr   PER_USEr   zsql#settings)kindtierpricingPlanreplicationTypeactivationPolicysql#locationPreferencer   followGaeApplicationrN   secondaryZonestorage_provisioned_iopsstorage_provisioned_throughputry   networkenable_google_private_pathenable_private_service_connectallowed_psc_projectsclear_allowed_psc_projectspsc_network_attachment_uri clear_psc_network_attachment_urir   r   "recreate_replicas_on_primary_crashr   enable_data_cacher   r   server_ca_poolz\`--server-ca-pool` can only be specified when the server CA mode is CUSTOMER_MANAGED_CAS_CA.z--server-ca-poolzhTo create an instance with server CA mode CUSTOMER_MANAGED_CAS_CA, [--server-ca-pool] must be specified. custom_subject_alternative_names&clear_custom_subject_alternative_namesstorage_auto_increase_limitr   z--storage-auto-increasezsTo set the storage capacity limit using [--storage-auto-increase-limit], [--storage-auto-increase] must be enabled.enable_db_aligned_atomic_writesenable_accelerated_replica_mode!enable_auto_upgrade_minor_versionT)kr   r   r   IsKnownAndSpecifiedr   rp   reducersMachineTyper   memorycpur   r   rv   activation_policyauthorizedGaeApplicationsany	assign_iprequire_sslauthorized_networksr   ipConfigurationSetIpConfigurationEnabledSetAuthorizedNetworksAclEntry
requireSslrQ   rT   LocationPreferencelocationPreferencestorage_sizer]   r   BYTES_TO_GBdataDiskSizeGbr   dataDiskProvisionedIopsr   dataDiskProvisionedThroughputstorage_auto_increasestorageAutoResizer*   rz   ry   availabilityTypePrivateNetworkUrlr   privateNetworkr   'enablePrivatePathForGoogleCloudServices	pscConfig	PscConfigr   
pscEnabledr   allowedConsumerProjectsr   networkAttachmentUrideletion_protectiondeletionProtectionEnabledr   r   connectorEnforcementr   recreateReplicasOnPrimaryCrashr   r   dataCacheConfigDataCacheConfigr   dataCacheEnabledr   r   sslModeenable_google_ml_integrationenableGoogleMlIntegrationenable_dataplex_integrationenableDataplexIntegrationr   r   serverCaModeretain_backups_on_deleteretainBackupsOnDeleter   serverCaPoolr   CUSTOMER_MANAGED_CAS_CAsql_exceptionsArgumentErrorr   RequiredArgumentExceptionr   customSubjectAlternativeNamesrm   settingsr   storageAutoResizeLimit(replication_lag_max_seconds_for_recreatereplicationLagMaxSecondsdbAlignedAtomicWritesConfigDbAlignedAtomicWritesConfigr   dbAlignedAtomicWritesr   r   acceleratedReplicaModeautoUpgradeEnabled)clsrt   r#   r   ri   r  s         r%   _ConstructBaseSettingsFromArgsz-_BaseInstances._ConstructBaseSettingsFromArgs=  s7	   : D(!%dt# dT!#d##M2d$$!!(DIIt{{DHHM%lD4E4EF-lD<L<LM/$00
 % H +/+C+Ch(
d"$   
 ".!=!=!?h		#%%h?		!	!!!d..0E0E	
 
			%.2.>.>  +
D$1B41HIJ$0$C$C'#22~)$/	 %D %h!  #D$5$5	8M8M$M Nh :;),T-J-J)Kh& @A/2

-
-0h, !!-#'#=#=h +,"8
..#h 	"%%#/#?#?#A 080J0J
,,1h-  <=%%#/#?#?#A 

)
) F  @A%%#/#?#?#A %%//-9-C-C-E  *

-
- ((3 ./%%#/#?#?#A %%//-9-C-C-E  *

#
# ((@  <=%%#/#?#?#A %%//-9-C-C-E  *CEh((@ <=%%#/#?#?#A %%//-9-C-C-E  *

)
) ((=  BC%%#/#?#?#A %%//-9-C-C-E  *@Bh((=++/+C+Ch(/0&@
22'h#  DE

1
1 - 	"&|T\\Bh 34%%#/#?#?#A 262H2Hh/
#%%#/#?#?#A )6
*h& ((4+/+L+Lh(''3+/+K+Kh( 01%%#/#?#?#A .@
++/h+ $$0'+'D'Dh$ 01%%#/#?#?#A .2.A.Ah+  01d6I6I

"
"
/
/))EE]]^ **+
 	

 	  $$11''CC[[\ 00
   BC%%#/#?#?#A 

/
/ <  HI%%#/#?#?#A ?Ah< ]#			7	8 **<<&&
 ..3! 
) 44'?  
	6	6	B99 	) 
	!	!"C	D33668 
. 00 	,,B 
	!	!"C	D*,*.*N*N'		!	!"E	F&*#Or'   c                    |r|j                   nd}| j                  ||||      }t        j                  |||j                  |j
                  |j                  |j                  |j                  |j                  |j                  d
      }|r| j                  ||       |r8|j                  d      r't        j                  |||j                        |_        t        j                   |||j"                  |j$                  |j&                        |_        |j*                  rd|j,                  rXg |_        |j.                  j1                  t        j2                  |||j*                  |j,                  |j4                               t        j6                  ||j8                  |j:                  |j<                  |j>                  |j@                        |_!        |jD                  r.tG        |tH        jK                  |jD                              |_&        t        jN                  ||jP                  |jR                  |jT                  |jV                  |jX                  	      |_-        |j                  d
      r]t        j\                  ||j^                  |j`                  |jb                  |jd                  |jf                  |jh                        |_5        t        jl                  ||jn                  |jp                  |jr                        |_:        |jv                  |jv                  |_<        |j                  d      r<|jz                  0|j}                         |_?        |jz                  |j~                  _@        |j                  d      r|j                  s|j                         |_B        |j                  j                  s|j                         |j                  _D        t        j                  ||j                        |j                  j                  _H        t        j                  |||j                  |j                        }|r| j                  ||       |j                  d      s|j                  d      r7t        j                  ||j                  |j                  dd      }	|	|	|_P        t        |      rt        j                  ||j                  j                        |_V        |j                  r<|j                  s|j                         |_B        |j                  |j                  _X        t        j                  ||j                        }
|
|
|_[        t        |      rlt        j                  ||j                  |j                  |j                  |j                  |j                  |j                  |j                        }|||_e        |S )z>Constructs create settings object from base settings and args.NFbackup_enabledbackup_locationbackup_start_timeenable_bin_logenable_point_in_time_recoveryretained_backups_countretained_transaction_log_dayspatch_requestdatabase_flags)r*  maintenance_release_channelmaintenance_window_daymaintenance_window_hour"deny_maintenance_period_start_date deny_maintenance_period_end_datedeny_maintenance_period_time&insights_config_query_insights_enabled#insights_config_query_string_length'insights_config_record_application_tags%insights_config_record_client_address&insights_config_query_plans_per_minutedomainmodedns_serversadmin_credential_secret_keyorganizational_unitpassword_policy_min_lengthr?  password_policy_complexitypassword_policy_reuse_interval+password_policy_disallow_username_substring(password_policy_password_change_intervalenable_password_policythreads_per_corepsc_auto_connectionsfinal_backup_enabledfinal_backup_retention_daysenable_connection_poolingconnection_pool_flagsrK  rL  clear_connection_pool_flagscurrent_config)db_aligned_atomic_writes)auto_scale_enabledauto_scale_min_node_countauto_scale_max_node_countauto_scale_target_metricsauto_scale_disable_scale_inauto_scale_in_cooldown_secondsauto_scale_out_cooldown_seconds)fr  r  r   BackupConfigurationbackupr#  r$  r%  r&  r'  r(  AddBackupConfigToSettingsr   DatabaseFlagsr*  databaseFlagsMaintenanceWindowr,  r-  r.  maintenanceWindowr0  r1  denyMaintenancePeriodsappendDenyMaintenancePeriodr2  InsightsConfigr4  r5  r6  r7  r8  insightsConfigr   r   STORAGE_TYPE_MAPPINGgetdataDiskTypeActiveDirectoryConfigactive_directory_domainactive_directory_modeactive_directory_dns_servers#active_directory_secret_manager_key$active_directory_organizational_unitactiveDirectoryConfigPasswordPolicyr?  rA  rB  rC  rD  rE  passwordValidationPolicySqlServerAuditConfigaudit_bucket_pathaudit_retention_intervalaudit_upload_intervalsqlServerAuditConfig	time_zonetimeZonerF  AdvancedMachineFeaturesadvancedMachineFeaturesthreadsPerCorer*   r   r   r   r   PscAutoConnectionsrG  pscAutoConnectionsFinalBackupConfigurationfinal_backuprJ  AddFinalBackupConfigToSettingsConnectionPoolConfigrK  rL  connectionPoolConfigrm   r   ParseCreateArgsrp   UserLabelsValue
userLabelsallocated_ip_range_nameallocatedIpRanger  r   r  rj   ReadPoolAutoScaleConfigrQ  rR  rS  rT  rU  rV  rW  readPoolAutoScaleConfig)r  rt   r#   r   ri   original_settingsr  backup_configurationfinal_backup_configuration
mcp_configdb_aligned_atomic_writes_configread_pool_auto_scale_configs               r%    _ConstructCreateSettingsFromArgsz/_BaseInstances._ConstructCreateSettingsFromArgsV  s#    .6))411dHmH $77{{,,00**&*&H&H#::&*&H&H 	##H.BC(()9:'55
)$:M:M h "*!;!;$($D$D#:: $ < <"H 	//11(*h%%%,,

(
(151X1X/3/T/T+/+L+L '55/3/Z/Z,0,T,T040\0\.2.X.X/3/Z/ZH /
,001B1BCh &.%C%C++''55$($L$L EE&H"  <=*2*A*A
%)%D%D%)%D%D)-)L)L6:6f6f373`3`!%!<!<+h' %-$A$A%%""	%H! ~~!..h 	  !34!!-)5)M)M)Oh&8<8M8Mh&&5./%%#/#?#?#A %%//-9-C-C-E  *

%
%lD4M4M
N ((; "*!B!B!..$($D$D	" "	((3MN #		!	!"9	:00
$($B$B $ : :&*j 
	(2% ]#'77
%%55h 
	%	%''%1%A%A%C(
"484P4P  1(0(L(L
#'#G#G)% 
)	4/N, $,$D$D
!44$($B$B$($B$B$($B$B&*&F&F)-)L)L*.*N*N	%! 
%	0+F(Or'   c                    |j                   }| j                  ||||      }|j                  rg |_        t	        |j
                  t        |      t        |      g      r6|j                  d|j
                  t        |      t        |            |_	        |j                  r2|j                  s|j                         |_        g |j                  _        |j                  |j                  |_        t!        j"                  |||j$                   |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  d
      }|r| j3                  ||       |rC|j5                  d      r2t!        j6                  |||j8                  |j:                        |_        t!        j>                  |||j@                  |jB                  |jD                        |_#        |jH                  rg |_%        |jL                  s|jN                  s|jP                  rXg |_%        |jJ                  jS                  t!        jT                  |||jL                  |jN                  |jP                               t!        jV                  ||jX                  |jZ                  |j\                  |j^                  |j`                  	      |_1        t!        jd                  ||jf                  |jh                  |jj                  |jl                  |jn                  
      |_8        t!        jr                  ||jt                  |jv                  |jx                  |jz                  |j|                  |j~                        |_@        t!        j                  ||j                  |j                  |j                        |_E        |j                  0|j                         |_H        |j                  |j                  _I        |j                  |j                  |_K        t!        j                  |||j                  |j                        }|r| j                  ||       t!        j                  ||j                  |j                  |j                  |j                        }	|	|	|_T        |j5                  d      r|j                  s|j                         |_        |j                  j                  s|j                         |j                  _U        t!        j                  ||j                        |j                  j                  _Y        |j5                  d      rq|j                  s|j                         |_        |j                  j                  s|j                         |j                  _U        g |j                  j                  _Y        t        |      r t        j                  j                  |      }
|
j                  |j                  j                  |j                   j                        }|j                  r|j                  |_a        |j                  r<|j                  s|j                         |_        |j                  |j                  _e        |j5                  d      r1t!        j                  ||j                  |j                        |_i        t        |      rwt!        j                  ||j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  	      }|||_s        |S )z=Constructs patch settings object from base settings and args.r   r   Tr!  r*  )r*  clear_database_flagsr+  r/  r3  r9  r@  )bucketretention_intervalupload_intervalrH  rM  rG  clear_psc_auto_connectionsunc_mappings)r  clear_unc_mappings)rQ  rR  rS  rT  rU  rV  rW  rO  )tr  r  clear_gae_appsr   r   r   rQ   rT   r   r   clear_authorized_networksr   r   authorizedNetworksenable_database_replicationdatabaseReplicationEnabledr   rX  	no_backupr#  r$  r%  r&  r'  r(  rZ  r   r[  r*  r  r\  r]  r,  r-  r.  r^  remove_deny_maintenance_periodr_  r0  r1  r2  r`  ra  rb  r4  r5  r6  r7  r8  rc  rg  rh  ri  rj  rk  rl  rm  rn  r?  rA  rB  rC  rD  rE  ro  rp  rq  rr  rs  rt  rF  rw  rx  ry  ru  rv  r|  r}  rJ  r~  r  rK  rL  rN  r  r   r   rz  rG  r{  rm   r   ExplicitNullificationDiffFromUpdateArgsApplyrp   r  r  needs_updatelabelsr  r  UncMappingsr  r  uncMappingsrj   r  rQ  rR  rS  rT  rU  rV  rW  r  )r  rt   r#   r   ri   r  r  r  r  updated_configlabels_difflabels_updater  s                r%   _ConstructPatchSettingsFromArgsz._BaseInstances._ConstructPatchSettingsFromArgs  sC   
 !))11dHmH +-h(
D$1B41HIJ$0$C$C'#22~)$/	 %D %h! %%%%#/#?#?#A 46h1''3,0,L,Lh)#77>>),,00**&*&H&H#::&*&H&H 	##H.BC(()9:'55

,,#88	 h "*!;!;$($D$D#:: $ < <"H **(*h% 	//00,,(*h%%%,,

(
(151X1X/3/T/T+/+L+L '55/3/Z/Z,0,T,T040\0\.2.X.X/3/Z/ZH &.%C%C++''55$($L$L EE&H" )1(?(?#'#B#B#'#B#B'+'J'J484d4d151^1^#::)H% %-$A$A%%8822	%H! ()5)M)M)Oh&8<8M8Mh&&5~~!..h!)!B!B!..$($D$D	" "	((3MN 22"&"@"@"88$($D$D(==N !&4h# 67%%#/#?#?#A %%//-9-C-C-E  *

%
%lD4M4M
N ((;  <=%%#/#?#?#A %%//-9-C-C-E  *>@h((; ]#99HHNk!''



/
/1B1B1M1Mm 
	#	#+22 
	%	%''%1%A%A%C(
"484P4P  1		!	!.	1'33**#66 
 $,$D$D
!44$($B$B$($B$B$($B$B&*&F&F)-)L)L*.*N*N*BB
%! 
%	0+F(Or'   c                 X    ~~~|j                  d      }|r| j                  ||       |S )a  Construct a Cloud SQL instance from command line args.

    Args:
      sql_messages: module, The messages module that should be used.
      args: argparse.Namespace, The CLI arg namespace.
      original: sql_messages.DatabaseInstance, The original instance, if some of
        it might be used to fill fields in the new one.
      instance_ref: reference to DatabaseInstance object, used to fill project
        and instance information.
      release_track: base.ReleaseTrack, the release track that this was run
        under.

    Returns:
      sql_messages.DatabaseInstance, The constructed (and possibly partial)
      database instance.

    Raises:
      ToolException: An error other than http error occurred while executing the
          command.
    zsql#instance)r   )r|   SetProjectAndInstanceFromRef)r  rt   r#   originalinstance_refri   instance_resources          r%   _ConstructBaseInstanceFromArgsz-_BaseInstances._ConstructBaseInstanceFromArgs  s9    : 	h$55>5J	&&'8,Gr'   c           
      	   t        |       | j                  ||||      }t        j                  |j                  t        |      t        |            |_        t        ||j                        |_	        |j                  d      r|j                  |_        |j                  d      r|j                  |_        t        |      rE|j!                  d      r4t        j"                  ||j$                  |j&                        }||_        |S | j+                  ||||      |_        |j                  d      r%|j.                  j0                  j2                  |_        |j                  d      r|j6                  j8                  j:                  }|j<                  dk(  r"t?                |jA                  dd      |_!        |jD                  rk|jB                  r|jD                  |jB                  _#        nC|jA                  d	|jD                  
      |_!        n |j6                  j8                  jH                  }|j                  d      s||j,                  _%        |j                  d      r5t?                |j.                  jM                  |jN                        |_(        |jR                  r|jR                  |j,                  _)        t        |      r|j!                  d      r|j!                  d      stU        jV                  dd      |j!                  d      s'|j!                  d      stU        jV                  dd      |jX                  rt[        j\                  d      |_/        t        j@                  ||j`                  |j^                  |jb                  |jd                  |jf                  |jh                        |_!        |j                  du }	tk        ||	      }
|
r|jm                  d|
      }||_7        tq        |d      }|l|j.                  js                  tu        jv                  |      D cg c],  \  }}|j.                  jr                  jy                  ||      . c}}      |_=        |j                  d      rt}        ||j~                        |_@        |j                  d      r|j                  |_B        |S c c}}w )zCConstructs Instance for create request from base instance and args.master_instance_nameroot_passwordsource_ip_address$enforce_new_sql_network_architectureFAILOVERz)sql#demoteMasterMysqlReplicaConfigurationT)r   failoverTargetzsql#replicaConfiguration)r   cascadableReplicar   failover_replica_name)namemaster_usernamez--master-instance-namezcTo create a read replica of an external master instance, [--master-instance-name] must be specifiedmaster_passwordprompt_for_master_passwordz--master-passwordzTo create a read replica of an external master instance, [--master-password] or [--prompt-for-master-password] must be specifiedzMaster Instance Password: Nzsql#diskEncryptionConfiguration)r   
kmsKeyNametags)keyvalue)additionalPropertiesr   
node_count)Cr   r  r   Regionr   rQ   rT   r   r~   databaseVersionr   r  masterInstanceNamer  rootPasswordrm   r*   OnPremisesConfigurationr  source_portonPremisesConfigurationr  r  r|   %SqlNetworkArchitectureValueValuesEnumNEW_NETWORK_ARCHITECTUREsqlNetworkArchitecturerp   r   ASYNCHRONOUSreplica_typer   ReplicaConfigurationreplicaConfigurationcascadable_replicar  SYNCHRONOUSr   FailoverReplicaValuer  failoverReplica	collationr   r  r  r   PromptPasswordr  r  master_dump_file_pathmaster_ca_certificate_pathclient_certificate_pathclient_key_pathrK   DiskEncryptionConfigurationdiskEncryptionConfigurationrF   	TagsValuesix	iteritemsAdditionalPropertyr  r   r   instanceTyper  	nodeCount)r  rt   r#   r  r  ri   r  on_premises_configurationr   rH   key_nameconfigr  tagr  s                  r%   ConstructCreateInstanceFromArgsz._BaseInstances.ConstructCreateInstanceFromArgs  s     %::dHl  (Xd^%6t%<  )=d++)%  67-1-F-F*0'+'9'9$ ]#(8(89L(M"*"B"B
..0@0@# 3L/!$!E!EdHm"  FG

'
'
M
M
f
f .  67



>
>
K
K  
		j	(.0--@# .  	. 
	 	 11%% 
0
0
B
 //1$($;$; 0  
0 


>
>
J
J  ##M23>  0 78,.

'
'
<
<-- =  ' ~~-1^^  * ]#(8(89J(K4522$N
 	
 

,
-:;22C
 	
 
	(	()88( 
 08/L/L








$
$

)
)

&
&


0, #55=J)$
;H770X 8 f 7=34 D+<<FF !$d 3 
 !4*#u	 ++55HH I  !4   G   0'9
**($ -$(OO!! s   ,1R;
c                    | j                  ||||      }t        ||j                        |_        |j                  |_        | j                  ||||      |_        |j                  r%|j                  j                  j                  |_        |j                  r%|j                  j                  j                  |_        |j                  d      r|j                  |_        |j#                  d      r/|j
                  |_        t$        j&                  j)                          |j#                  d      r7|j                  |j
                  k(  rt$        j&                  j)                          t+        |      r|j#                  d      rn|j                  j,                  |j/                         |j                  _        |j                  j,                  j0                  |j                  j,                  _        |j                  d      r(|j3                         }|j4                  |_        ||_        |j                  d      r&|j8                  |j8                  j;                          |j                  d      r|j<                  |_        |j                  d      rtA        ||jB                        |_"        |j                  d	      r|jF                  |_$        |S )
zBConstructs Instance for patch request from base instance and args.(switch_transaction_logs_to_cloud_storagesimulate_maintenance_eventmaintenance_versionreconcile_psa_networkingfailover_dr_replica_nameclear_failover_dr_replica_name*include_replicas_for_major_version_upgrader   r  )%r  r   r~   r  r  maintenanceVersionr  r   upgrade_sql_network_architecturer|   r  r  r  r  r   r  *switchTransactionLogsToCloudStorageEnabledr*   api_utilInstancesV1Beta4(PrintAndConfirmSimulatedMaintenanceEventrm   r   r   r   ReplicationClusterr  failoverDrReplicaNamereplicationClusterClearFailoverDrReplicaNamer  %includeReplicasForMajorVersionUpgrader   r   r  r  r  )r  rt   r#   r  r  ri   r  replication_clusters           r%   ConstructPatchInstanceFromArgsz-_BaseInstances.ConstructPatchInstanceFromArgs  s    ::dHl )=d++)% ,0+C+C(!$!D!DdHm" ,,

'
'
M
M
f
f . 00

'
'
M
M
f
f .  JK

7
7 B 45-5-H-H*HHJ
 	./$$(C(CCHHJ]#(8(8") 
	#	#	3	3	;((* 	""2 


+
+
:
:   00?  :;(;;=262O2O/-@* @A		-	-	9,,GGI LM

9
9 = 0'9
**($ -$(OO!r'   )__name__
__module____qualname____doc__classmethodDEFAULT_RELEASE_TRACKr  r  r  r  r  r  r   r'   r%   r   r   :  s    ;
 )V Vp 
 )k kZ 7LA AF 
 )" "H 
 )] ]~  )P Pr'   r   c                   `    e Zd ZdZed        Zed        Zed        Zed        Zed        Z	y)r  z3Common utility functions for sql instances V1Beta4.c                 H    |j                   | _         |j                  | _        y rM   )r   r   r  )r  r  s     r%   r  z-InstancesV1Beta4.SetProjectAndInstanceFromRef  s      , 4 4)22r'   c                     || _         y rM   )backupConfiguration)r  backup_configs     r%   rZ  z*InstancesV1Beta4.AddBackupConfigToSettings  s
    #0H r'   c                     || _         y rM   )finalBackupConfig)r  final_backup_configs     r%   r~  z/InstancesV1Beta4.AddFinalBackupConfigToSettings  s
    !4Hr'   c                 &    || j                   _        y rM   )r   ipv4Enabled)r  r   s     r%   r   z*InstancesV1Beta4.SetIpConfigurationEnabled  s    +4H(r'   c                 \    |D cg c]  } |d|       c}| j                   _        y c c}w )Nzsql#aclEntry)r   r  )r   r  )r  r   acl_entry_valuens       r%   r   z&InstancesV1Beta4.SetAuthorizedNetworks  s6     %3$A 	^15$3H/ 3s   )N)
r  r  r  r  staticmethodr  rZ  r~  r   r   r   r'   r%   r  r    sg    ;3 3 1 1 5 5 5 5  r'   r  )FrM   )=r  
__future__r   r   r   r^   googlecloudsdk.api_lib.sqlr   r   r  r	   r   r
   r  r   googlecloudsdk.callioper   googlecloudsdk.command_libr   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   r   r   googlecloudsdk.core.consoler   r  rf   GAr  rd  r&   r0   r>   rK   rQ   rT   rd   rj   rm   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   objectr   r  r   r'   r%   <module>r     s   : &  ' 	 0 C I < / ( . 2 < / # * 2 
)),,  . 
	(
.$<2L	*$/dV dN~ r'   