func newConnectionParamsCmd()

in internal/onetime/configure/redis/redis.go [61:123]


func newConnectionParamsCmd(cfg *cliconfig.Configure) *cobra.Command {
	var (
		port                            int
		projectID, secretName, password string
	)

	cpCmd := &cobra.Command{
		Use:   "connection-params",
		Short: "Add connection parameters for a Redis database.",
		Long: `Sets the port, password, and Secret Manager details
for connecting to the Redis database specified in the main configuration.

Existing connection parameters will be overwritten by the provided flags.

WARNING: Using the --password flag is not recommended for security reasons
as it can expose the password in shell history or logs. Please prefer storing
the password in Google Cloud Secret Manager and using the --project-id and
--secret-name flags instead.`,
		Run: func(cmd *cobra.Command, args []string) {
			cfg.ValidateRedisConnectionParams()
			cp := cfg.Configuration.RedisConfiguration.ConnectionParameters

			if cmd.Flags().Changed("port") {
				msg := fmt.Sprintf("Setting Redis Port: %v", port)
				cfg.LogToBoth(cmd.Context(), msg)
				cp.Port = int32(port)
				cfg.RedisConfigModified = true
			}
			if cmd.Flags().Changed("password") {
				msg := fmt.Sprintf("Setting Redis Password: %v", password)
				cfg.LogToBoth(cmd.Context(), msg)
				cp.Password = password
				cfg.RedisConfigModified = true
			}

			spChanged := cmd.Flags().Changed("project-id")
			snChanged := cmd.Flags().Changed("secret-name")
			if (spChanged || snChanged) && (cp.Secret == nil) {
				cp.Secret = &cpb.SecretRef{}
			}
			if spChanged {
				msg := fmt.Sprintf("Setting Redis Project ID: %v", projectID)
				cfg.LogToBoth(cmd.Context(), msg)
				cp.Secret.ProjectId = projectID
				cfg.RedisConfigModified = true
			}
			if snChanged {
				msg := fmt.Sprintf("Setting Redis Secret Name: %v", secretName)
				cfg.LogToBoth(cmd.Context(), msg)
				cp.Secret.SecretName = secretName
				cfg.RedisConfigModified = true
			}
		},
	}

	// Add flags for the connection
	cpCmd.Flags().IntVar(&port, "port", configuration.DefaultRedisPort, "Port")
	cpCmd.Flags().StringVar(&projectID, "project-id", "", "Project ID")
	cpCmd.Flags().StringVar(&secretName, "secret-name", "", "Secret name")
	cpCmd.Flags().StringVar(&password, "password", "", "Password")

	return cpCmd
}