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