From 0f41590d6adccc4b13bb6d126f386aeee564780c Mon Sep 17 00:00:00 2001 From: Grraahaam <72856427+Grraahaam@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:32:31 +0100 Subject: [PATCH 1/5] feat(cli): --plain, --expand, --include-imports in 'secrets get' subcommand --- cli/packages/cmd/secrets.go | 49 ++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 778ac574e..e4e0db126 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -68,6 +68,11 @@ var secretsCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } + plainOutput, err := cmd.Flags().GetBool("plain") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports}, "") if err != nil { util.HandleError(err) @@ -83,7 +88,14 @@ var secretsCmd = &cobra.Command{ secrets = util.ExpandSecrets(secrets, infisicalToken, "") } - visualize.PrintAllSecretDetails(secrets) + if plainOutput { + for _, secret := range secrets { + fmt.Println(secret.Value) + } + } else { + visualize.PrintAllSecretDetails(secrets) + } + Telemetry.CaptureEvent("cli-command:secrets", posthog.NewProperties().Set("secretCount", len(secrets)).Set("version", util.CLI_VERSION)) }, } @@ -406,11 +418,30 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse path flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath}, "") + plainOutput, err := cmd.Flags().GetBool("plain") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + includeImports, err := cmd.Flags().GetBool("include-imports") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + shouldExpandSecrets, err := cmd.Flags().GetBool("expand") + if err != nil { + util.HandleError(err) + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports}, "") if err != nil { util.HandleError(err, "To fetch all secrets") } + if shouldExpandSecrets { + secrets = util.ExpandSecrets(secrets, infisicalToken, "") + } + requestedSecrets := []models.SingleEnvironmentVariable{} secretsMap := getSecretsByKeys(secrets) @@ -427,7 +458,13 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { } } - visualize.PrintAllSecretDetails(requestedSecrets) + if plainOutput { + for _, secret := range requestedSecrets { + fmt.Println(secret.Value) + } + } else { + visualize.PrintAllSecretDetails(requestedSecrets) + } Telemetry.CaptureEvent("cli-command:secrets get", posthog.NewProperties().Set("secretCount", len(secrets)).Set("version", util.CLI_VERSION)) } @@ -661,6 +698,9 @@ func init() { secretsGetCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") secretsCmd.AddCommand(secretsGetCmd) secretsGetCmd.Flags().String("path", "/", "get secrets within a folder path") + secretsGetCmd.Flags().Bool("plain", false, "print values without formatting, one per line") + secretsGetCmd.Flags().Bool("include-imports", true, "Imported linked secrets ") + secretsGetCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets, and process your referenced secrets") secretsCmd.Flags().Bool("secret-overriding", true, "Prioritizes personal secrets, if any, with the same name over shared secrets") secretsCmd.AddCommand(secretsSetCmd) @@ -703,9 +743,10 @@ func init() { secretsCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") secretsCmd.PersistentFlags().String("env", "dev", "Used to select the environment name on which actions should be taken on") - secretsCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets") + secretsCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets, and process your referenced secrets") secretsCmd.Flags().Bool("include-imports", true, "Imported linked secrets ") secretsCmd.PersistentFlags().StringP("tags", "t", "", "filter secrets by tag slugs") secretsCmd.Flags().String("path", "/", "get secrets within a folder path") + secretsCmd.Flags().Bool("plain", false, "print values without formatting, one per line") rootCmd.AddCommand(secretsCmd) } From f83c2215a579da9519fc1051774bb7c9de8a5a01 Mon Sep 17 00:00:00 2001 From: Grraahaam <72856427+Grraahaam@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:44:55 +0100 Subject: [PATCH 2/5] doc(cli): --plain --- docs/cli/commands/secrets.mdx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 8e2183ad9..08e858e9d 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -59,6 +59,14 @@ This command enables you to perform CRUD (create, read, update, delete) operatio infisical secrets --path="/" --env=dev ``` + + The `--plain` flag will output all your secret values without formatting, one per line. + + ```bash + # Example + infisical secrets --plain + ``` + @@ -70,6 +78,7 @@ This command enables you to perform CRUD (create, read, update, delete) operatio # Example $ infisical secrets get DOMAIN +$ infisical secrets get DOMAIN PORT ``` @@ -79,6 +88,17 @@ This command enables you to perform CRUD (create, read, update, delete) operatio Default value: `dev` + + The `--plain` flag will output all your requested secret values without formatting, one per line. + + ```bash + # Example + infisical secrets get FOO --plain + + # Fetch a single value and assign it to a variable + API_KEY=$(infisical secrets get FOO --plain) + ``` + From 637b0b955fe7b6702fcedee001e5e857f96e7d60 Mon Sep 17 00:00:00 2001 From: Grraahaam <72856427+Grraahaam@users.noreply.github.com> Date: Fri, 24 May 2024 17:28:52 +0200 Subject: [PATCH 3/5] fix(cli): add backward compatibility for --raw-value --- cli/packages/cmd/secrets.go | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 90239deeb..c3cec597a 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -470,10 +470,10 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse recursive flag") } - //deprecated (showOnlyValue) in favor of --plain + // deprecated, in favor of --plain showOnlyValue, err := cmd.Flags().GetBool("raw-value") if err != nil { - util.HandleError(err, "Unable to parse path flag") + util.HandleError(err, "Unable to parse flag") } plainOutput, err := cmd.Flags().GetBool("plain") @@ -533,7 +533,8 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { } } - if plainOutput { + // showOnlyValue deprecated in favor of --plain, below only for backward compatibility + if plainOutput || showOnlyValue { for _, secret := range requestedSecrets { fmt.Println(secret.Value) } @@ -541,16 +542,6 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { visualize.PrintAllSecretDetails(requestedSecrets) } - // deprecated (showOnlyValue) - if showOnlyValue && len(requestedSecrets) > 1 { - util.PrintErrorMessageAndExit("--raw-value only works with one secret.") - } - - if showOnlyValue { - fmt.Printf(requestedSecrets[0].Value) - } else { - visualize.PrintAllSecretDetails(requestedSecrets) - } Telemetry.CaptureEvent("cli-command:secrets get", posthog.NewProperties().Set("secretCount", len(secrets)).Set("version", util.CLI_VERSION)) } From f9a959965916909471261a97c5cbc1dc656dc95c Mon Sep 17 00:00:00 2001 From: Grraahaam <72856427+Grraahaam@users.noreply.github.com> Date: Fri, 24 May 2024 17:29:44 +0200 Subject: [PATCH 4/5] doc(cli): improve --plain example --- docs/cli/commands/secrets.mdx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 81fa4de4c..941820227 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -106,8 +106,8 @@ $ infisical secrets ```bash $ infisical secrets get ... - # Example - $ infisical secrets get DOMAIN +# Example +$ infisical secrets get DOMAIN $ infisical secrets get DOMAIN PORT ``` @@ -124,9 +124,12 @@ $ infisical secrets get DOMAIN PORT The `--plain` flag will output all your requested secret values without formatting, one per line. + Default value: `false` + ```bash # Example infisical secrets get FOO --plain + infisical secrets get FOO BAR --plain # Fetch a single value and assign it to a variable API_KEY=$(infisical secrets get FOO --plain) From 2160c66e209b7c40b19ebcf739af40dd2a4e08f2 Mon Sep 17 00:00:00 2001 From: Grraahaam <72856427+Grraahaam@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:15:19 +0200 Subject: [PATCH 5/5] doc(cli): improve --plain example + add --silent notice --- docs/cli/commands/secrets.mdx | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 7428a84a1..03ebde1c0 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -93,11 +93,23 @@ $ infisical secrets ```bash # Example - infisical secrets --plain + infisical secrets --plain --silent ``` + + The `--silent` flag disables output of tip/info messages. Useful when running in scripts or CI/CD pipelines. + + ```bash + # Example + infisical secrets --silent + ``` + + Can be used inline to replace `INFISICAL_DISABLE_UPDATE_CHECK` + + + @@ -132,16 +144,30 @@ $ infisical secrets get DOMAIN PORT infisical secrets get FOO BAR --plain # Fetch a single value and assign it to a variable - API_KEY=$(infisical secrets get FOO --plain) + API_KEY=$(infisical secrets get FOO --plain --silent) ``` - When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK` env to `true`. This will help hide any CLI update messages and only show the secret value. + When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK=true` or add the `--silent` flag. This will help hide any CLI info/debug output and only show the secret value. + + The `--silent` flag disables output of tip/info messages. Useful when running in scripts or CI/CD pipelines. + + ```bash + # Example + infisical secrets get FOO --plain --silent + ``` + + Can be used inline to replace `INFISICAL_DISABLE_UPDATE_CHECK` + + + + Use `--plain` instead, as it supports single and multiple secrets. + Used to print the plain value of a single requested secret without any table style. Default value: `false` @@ -149,7 +175,7 @@ $ infisical secrets get DOMAIN PORT Example: `infisical secrets get DOMAIN --raw-value` - When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK` env to `true`. This will help hide any CLI update messages and only show the secret value. + When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK=true` or add the `--silent` flag. This will help hide any CLI info/debug output and only show the secret value.