Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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