Skip to content

Add argus grafana single-sign-on commands #228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/stackit_argus_grafana.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ stackit argus grafana [flags]

* [stackit argus](./stackit_argus.md) - Provides functionality for Argus
* [stackit argus grafana describe](./stackit_argus_grafana_describe.md) - Shows details of the Grafana configuration of an Argus instance
* [stackit argus grafana single-sign-on](./stackit_argus_grafana_single-sign-on.md) - Enable or disable single sign-on for Grafana in Argus instances

35 changes: 35 additions & 0 deletions docs/stackit_argus_grafana_single-sign-on.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## stackit argus grafana single-sign-on

Enable or disable single sign-on for Grafana in Argus instances

### Synopsis

Enable or disable single sign-on for Grafana in Argus instances.
When enabled for an instance, overwrites the generic OAuth2 authentication and configures STACKIT single sign-on for that instance.

```
stackit argus grafana single-sign-on [flags]
```

### Options

```
-h, --help Help for "stackit argus grafana single-sign-on"
```

### Options inherited from parent commands

```
-y, --assume-yes If set, skips all confirmation prompts
--async If set, runs the command asynchronously
-o, --output-format string Output format, one of ["json" "pretty"]
-p, --project-id string Project ID
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit argus grafana](./stackit_argus_grafana.md) - Provides functionality for the Grafana configuration of Argus instances
* [stackit argus grafana single-sign-on disable](./stackit_argus_grafana_single-sign-on_disable.md) - Disables single sign-on for Grafana on Argus instances
* [stackit argus grafana single-sign-on enable](./stackit_argus_grafana_single-sign-on_enable.md) - Enables single sign-on for Grafana on Argus instances

41 changes: 41 additions & 0 deletions docs/stackit_argus_grafana_single-sign-on_disable.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
## stackit argus grafana single-sign-on disable

Disables single sign-on for Grafana on Argus instances

### Synopsis

Disables single sign-on for Grafana on Argus instances.
When disabled for an instance, the generic OAuth2 authentication is used for that instance.

```
stackit argus grafana single-sign-on disable [flags]
```

### Examples

```
Disable single sign-on for Grafana on an Argus instance with ID "xxx"
$ stackit argus grafana single-sign-on disable --instance-id xxx
```

### Options

```
-h, --help Help for "stackit argus grafana single-sign-on disable"
--instance-id string Instance ID
```

### Options inherited from parent commands

```
-y, --assume-yes If set, skips all confirmation prompts
--async If set, runs the command asynchronously
-o, --output-format string Output format, one of ["json" "pretty"]
-p, --project-id string Project ID
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit argus grafana single-sign-on](./stackit_argus_grafana_single-sign-on.md) - Enable or disable single sign-on for Grafana in Argus instances

41 changes: 41 additions & 0 deletions docs/stackit_argus_grafana_single-sign-on_enable.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
## stackit argus grafana single-sign-on enable

Enables single sign-on for Grafana on Argus instances

### Synopsis

Enables single sign-on for Grafana on Argus instances.
When enabled for an instance, overwrites the generic OAuth2 authentication and configures STACKIT single sign-on for that instance.

```
stackit argus grafana single-sign-on enable [flags]
```

### Examples

```
Enable single sign-on for Grafana on an Argus instance with ID "xxx"
$ stackit argus grafana single-sign-on enable --instance-id xxx
```

### Options

```
-h, --help Help for "stackit argus grafana single-sign-on enable"
--instance-id string Instance ID
```

### Options inherited from parent commands

```
-y, --assume-yes If set, skips all confirmation prompts
--async If set, runs the command asynchronously
-o, --output-format string Output format, one of ["json" "pretty"]
-p, --project-id string Project ID
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit argus grafana single-sign-on](./stackit_argus_grafana_single-sign-on.md) - Enable or disable single sign-on for Grafana in Argus instances

2 changes: 2 additions & 0 deletions internal/cmd/argus/grafana/grafana.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package grafana

import (
"github.com/stackitcloud/stackit-cli/internal/cmd/argus/grafana/describe"
singlesignon "github.com/stackitcloud/stackit-cli/internal/cmd/argus/grafana/single-sign-on"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
Expand All @@ -23,4 +24,5 @@ func NewCmd(p *print.Printer) *cobra.Command {

func addSubcommands(cmd *cobra.Command, p *print.Printer) {
cmd.AddCommand(describe.NewCmd(p))
cmd.AddCommand(singlesignon.NewCmd(p))
}
115 changes: 115 additions & 0 deletions internal/cmd/argus/grafana/single-sign-on/disable/disable.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package disable

import (
"context"
"fmt"

"github.com/stackitcloud/stackit-cli/internal/pkg/args"
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/argus/client"
argusUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/argus/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"

"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-sdk-go/services/argus"
)

const (
instanceIdFlag = "instance-id"
)

type inputModel struct {
*globalflags.GlobalFlagModel
InstanceId string
}

func NewCmd(p *print.Printer) *cobra.Command {
cmd := &cobra.Command{
Use: "disable",
Short: "Disables single sign-on for Grafana on Argus instances",
Long: fmt.Sprintf("%s\n%s",
"Disables single sign-on for Grafana on Argus instances.",
"When disabled for an instance, the generic OAuth2 authentication is used for that instance.",
),
Args: args.NoArgs,
Example: examples.Build(
examples.NewExample(
`Disable single sign-on for Grafana on an Argus instance with ID "xxx"`,
"$ stackit argus grafana single-sign-on disable --instance-id xxx"),
),
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
model, err := parseInput(cmd)
if err != nil {
return err
}

// Configure API client
apiClient, err := client.ConfigureClient(p)
if err != nil {
return err
}

instanceLabel, err := argusUtils.GetInstanceName(ctx, apiClient, model.InstanceId, model.ProjectId)
if err != nil || instanceLabel == "" {
instanceLabel = model.InstanceId
}

if !model.AssumeYes {
prompt := fmt.Sprintf("Are you sure you want to disable single sign-on for instance %q?", instanceLabel)
err = p.PromptForConfirmation(prompt)
if err != nil {
return err
}
}

// Call API
req, err := buildRequest(ctx, model, apiClient)
if err != nil {
return fmt.Errorf("build request: %w", err)
}
_, err = req.Execute()
if err != nil {
return fmt.Errorf("disable single sign-on: %w", err)
}

p.Info("Disabled single sign-on for instance %q\n", instanceLabel)
return nil
},
}
configureFlags(cmd)
return cmd
}

func configureFlags(cmd *cobra.Command) {
cmd.Flags().Var(flags.UUIDFlag(), instanceIdFlag, "Instance ID")

err := flags.MarkFlagsRequired(cmd, instanceIdFlag)
cobra.CheckErr(err)
}

func parseInput(cmd *cobra.Command) (*inputModel, error) {
globalFlags := globalflags.Parse(cmd)
if globalFlags.ProjectId == "" {
return nil, &errors.ProjectIdError{}
}

return &inputModel{
GlobalFlagModel: globalFlags,
InstanceId: flags.FlagToStringValue(cmd, instanceIdFlag),
}, nil
}

func buildRequest(ctx context.Context, model *inputModel, apiClient argusUtils.ArgusClient) (argus.ApiUpdateGrafanaConfigsRequest, error) {
req := apiClient.UpdateGrafanaConfigs(ctx, model.InstanceId, model.ProjectId)
payload, err := argusUtils.GetPartialUpdateGrafanaConfigsPayload(ctx, apiClient, model.InstanceId, model.ProjectId, utils.Ptr(false), nil)
if err != nil {
return req, fmt.Errorf("build request payload: %w", err)
}
req = req.UpdateGrafanaConfigsPayload(*payload)
return req, nil
}
Loading