Skip to content
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_object-storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ stackit object-storage [flags]

* [stackit](./stackit.md) - Manage STACKIT resources using the command line
* [stackit object-storage bucket](./stackit_object-storage_bucket.md) - Provides functionality for Object Storage buckets
* [stackit object-storage compliance-lock](./stackit_object-storage_compliance-lock.md) - Provides functionality to manage Object Storage compliance lock
* [stackit object-storage credentials](./stackit_object-storage_credentials.md) - Provides functionality for Object Storage credentials
* [stackit object-storage credentials-group](./stackit_object-storage_credentials-group.md) - Provides functionality for Object Storage credentials group
* [stackit object-storage disable](./stackit_object-storage_disable.md) - Disables Object Storage for a project
Expand Down
36 changes: 36 additions & 0 deletions docs/stackit_object-storage_compliance-lock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## stackit object-storage compliance-lock

Provides functionality to manage Object Storage compliance lock

### Synopsis

Provides functionality to manage Object Storage compliance lock.

```
stackit object-storage compliance-lock [flags]
```

### Options

```
-h, --help Help for "stackit object-storage compliance-lock"
```

### 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" "none" "yaml"]
-p, --project-id string Project ID
--region string Target region for region-specific requests
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit object-storage](./stackit_object-storage.md) - Provides functionality for Object Storage
* [stackit object-storage compliance-lock describe](./stackit_object-storage_compliance-lock_describe.md) - Describe object storage compliance lock
* [stackit object-storage compliance-lock lock](./stackit_object-storage_compliance-lock_lock.md) - Create object storage compliance lock
* [stackit object-storage compliance-lock unlock](./stackit_object-storage_compliance-lock_unlock.md) - Delete object storage compliance lock

40 changes: 40 additions & 0 deletions docs/stackit_object-storage_compliance-lock_describe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## stackit object-storage compliance-lock describe

Describe object storage compliance lock

### Synopsis

Describe object storage compliance lock.

```
stackit object-storage compliance-lock describe [flags]
```

### Examples

```
Describe object storage compliance lock
$ stackit object-storage compliance-lock describe
```

### Options

```
-h, --help Help for "stackit object-storage compliance-lock describe"
```

### 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" "none" "yaml"]
-p, --project-id string Project ID
--region string Target region for region-specific requests
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit object-storage compliance-lock](./stackit_object-storage_compliance-lock.md) - Provides functionality to manage Object Storage compliance lock

40 changes: 40 additions & 0 deletions docs/stackit_object-storage_compliance-lock_lock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## stackit object-storage compliance-lock lock

Create object storage compliance lock

### Synopsis

Create object storage compliance lock.

```
stackit object-storage compliance-lock lock [flags]
```

### Examples

```
Create object storage compliance lock
$ stackit object-storage compliance-lock lock
```

### Options

```
-h, --help Help for "stackit object-storage compliance-lock lock"
```

### 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" "none" "yaml"]
-p, --project-id string Project ID
--region string Target region for region-specific requests
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit object-storage compliance-lock](./stackit_object-storage_compliance-lock.md) - Provides functionality to manage Object Storage compliance lock

40 changes: 40 additions & 0 deletions docs/stackit_object-storage_compliance-lock_unlock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## stackit object-storage compliance-lock unlock

Delete object storage compliance lock

### Synopsis

Delete object storage compliance lock.

```
stackit object-storage compliance-lock unlock [flags]
```

### Examples

```
Delete object storage compliance lock
$ stackit object-storage compliance-lock unlock
```

### Options

```
-h, --help Help for "stackit object-storage compliance-lock unlock"
```

### 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" "none" "yaml"]
-p, --project-id string Project ID
--region string Target region for region-specific requests
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
```

### SEE ALSO

* [stackit object-storage compliance-lock](./stackit_object-storage_compliance-lock.md) - Provides functionality to manage Object Storage compliance lock

30 changes: 30 additions & 0 deletions internal/cmd/object-storage/compliance-lock/compliance-lock.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package compliancelock

import (
"github.com/stackitcloud/stackit-cli/internal/cmd/object-storage/compliance-lock/describe"
"github.com/stackitcloud/stackit-cli/internal/cmd/object-storage/compliance-lock/lock"
"github.com/stackitcloud/stackit-cli/internal/cmd/object-storage/compliance-lock/unlock"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
"github.com/stackitcloud/stackit-cli/internal/pkg/types"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"

"github.com/spf13/cobra"
)

func NewCmd(params *types.CmdParams) *cobra.Command {
cmd := &cobra.Command{
Use: "compliance-lock",
Short: "Provides functionality to manage Object Storage compliance lock",
Long: "Provides functionality to manage Object Storage compliance lock.",
Args: args.NoArgs,
Run: utils.CmdHelp,
}
addSubcommands(cmd, params)
return cmd
}

func addSubcommands(cmd *cobra.Command, params *types.CmdParams) {
cmd.AddCommand(lock.NewCmd(params))
cmd.AddCommand(unlock.NewCmd(params))
cmd.AddCommand(describe.NewCmd(params))
}
111 changes: 111 additions & 0 deletions internal/cmd/object-storage/compliance-lock/describe/describe.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package describe

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/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/client"
objectStorageUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
"github.com/stackitcloud/stackit-cli/internal/pkg/types"

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

type inputModel struct {
*globalflags.GlobalFlagModel
}

func NewCmd(params *types.CmdParams) *cobra.Command {
cmd := &cobra.Command{
Use: "describe",
Short: "Describe object storage compliance lock",
Long: "Describe object storage compliance lock.",
Args: args.NoArgs,
Example: examples.Build(
examples.NewExample(
`Describe object storage compliance lock`,
"$ stackit object-storage compliance-lock describe"),
),
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
model, err := parseInput(params.Printer, cmd, args)
if err != nil {
return err
}

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

// Check if the project is enabled before trying to describe
enabled, err := objectStorageUtils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region)
if err != nil {
return fmt.Errorf("check if Object Storage is enabled: %w", err)
}
if !enabled {
return &errors.ServiceDisabledError{
Service: "object-storage",
}
}

// Call API
req := buildRequest(ctx, model, apiClient)
resp, err := req.Execute()
if err != nil {
return fmt.Errorf("get object storage compliance lock: %w", err)
}

return outputResult(params.Printer, model.OutputFormat, resp)
},
}
return cmd
}

func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
globalFlags := globalflags.Parse(p, cmd)
if globalFlags.ProjectId == "" {
return nil, &errors.ProjectIdError{}
}

model := inputModel{
GlobalFlagModel: globalFlags,
}

p.DebugInputModel(model)
return &model, nil
}

func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstorage.APIClient) objectstorage.ApiGetComplianceLockRequest {
req := apiClient.DefaultAPI.GetComplianceLock(ctx, model.ProjectId, model.Region)
return req
}

func outputResult(p *print.Printer, outputFormat string, resp *objectstorage.ComplianceLockResponse) error {
return p.OutputResult(outputFormat, resp, func() error {
if resp == nil {
return fmt.Errorf("response is empty")
}

table := tables.NewTable()
table.AddRow("PROJECT ID", resp.Project)
table.AddSeparator()
table.AddRow("MAX RETENTION DAYS", resp.MaxRetentionDays)
table.AddSeparator()

err := table.Display(p)
if err != nil {
return fmt.Errorf("render table: %w", err)
}

return nil
})
}
Loading
Loading