Skip to content

Commit dc9c189

Browse files
authored
Merge branch 'main' into dependabot/go_modules/github.com/stackitcloud/stackit-sdk-go/services/rabbitmq-1.2.1
2 parents 7ed945d + 815dd61 commit dc9c189

4 files changed

Lines changed: 110 additions & 35 deletions

File tree

docs/stackit_beta_sqlserverflex_instance_create.md

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,22 @@ stackit beta sqlserverflex instance create [flags]
2424
### Options
2525

2626
```
27-
--acl strings The access control list (ACL). Must contain at least one valid subnet, for instance '0.0.0.0/0' for open access (discouraged), '1.2.3.0/24 for a public IP range of an organization, '1.2.3.4/32' for a single IP range, etc. (default [])
28-
--backup-schedule string Backup schedule
29-
--cpu int Number of CPUs
30-
--edition string Edition of the SQLServer instance
31-
--flavor-id string ID of the flavor
32-
-h, --help Help for "stackit beta sqlserverflex instance create"
33-
-n, --name string Instance name
34-
--ram int Amount of RAM (in GB)
35-
--retention-days int32 The days for how long the backup files should be stored before being cleaned up
36-
--storage-class string Storage class
37-
--storage-size int Storage size (in GB)
38-
--version string SQLServer version
27+
--acl strings The access control list (ACL). Must contain at least one valid subnet, for instance '0.0.0.0/0' for open access (discouraged), '1.2.3.0/24 for a public IP range of an organization, '1.2.3.4/32' for a single IP range, etc. (default [])
28+
--backup-schedule string Backup schedule
29+
--cpu int Number of CPUs
30+
--edition string Edition of the SQLServer instance
31+
--encryption-kek-key-id string The key identifier
32+
--encryption-kek-key-version string The key version
33+
--encryption-kek-keyring-id string The keyring identifier
34+
--encryption-service-account string The service account
35+
--flavor-id string ID of the flavor
36+
-h, --help Help for "stackit beta sqlserverflex instance create"
37+
-n, --name string Instance name
38+
--ram int Amount of RAM (in GB)
39+
--retention-days int32 The days for how long the backup files should be stored before being cleaned up
40+
--storage-class string Storage class
41+
--storage-size int Storage size (in GB)
42+
--version string SQLServer version
3943
```
4044

4145
### Options inherited from parent commands

internal/cmd/beta/sqlserverflex/instance/create/create.go

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ const (
3636
versionFlag = "version"
3737
editionFlag = "edition"
3838
retentionDaysFlag = "retention-days"
39+
40+
encryptionKekKeyIdFlag = "encryption-kek-key-id"
41+
encryptionKekKeyringIdFlag = "encryption-kek-keyring-id"
42+
encryptionKekKeyVersionFlag = "encryption-kek-key-version"
43+
encryptionServiceAccountFlag = "encryption-service-account"
3944
)
4045

4146
type inputModel struct {
@@ -51,6 +56,11 @@ type inputModel struct {
5156
StorageSize *int64
5257
Version string
5358
RetentionDays int32
59+
60+
EncryptionKekKeyId *string
61+
EncryptionKekKeyringId *string
62+
EncryptionKekKeyVersion *string
63+
EncryptionServiceAccount *string
5464
}
5565

5666
func NewCmd(params *types.CmdParams) *cobra.Command {
@@ -134,9 +144,15 @@ func configureFlags(cmd *cobra.Command) {
134144
cmd.Flags().String(versionFlag, "", "SQLServer version")
135145
cmd.Flags().String(editionFlag, "", "Edition of the SQLServer instance")
136146
cmd.Flags().Int32(retentionDaysFlag, 0, "The days for how long the backup files should be stored before being cleaned up")
147+
cmd.Flags().String(encryptionKekKeyIdFlag, "", "The key identifier")
148+
cmd.Flags().String(encryptionKekKeyringIdFlag, "", "The keyring identifier")
149+
cmd.Flags().String(encryptionKekKeyVersionFlag, "", "The key version")
150+
cmd.Flags().String(encryptionServiceAccountFlag, "", "The service account")
137151

138152
err := flags.MarkFlagsRequired(cmd, instanceNameFlag, backupScheduleFlag, retentionDaysFlag, storageClassFlag, storageSizeFlag, versionFlag)
139153
cobra.CheckErr(err)
154+
155+
cmd.MarkFlagsRequiredTogether(encryptionKekKeyIdFlag, encryptionKekKeyringIdFlag, encryptionKekKeyVersionFlag, encryptionServiceAccountFlag)
140156
}
141157

142158
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
@@ -174,6 +190,11 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
174190
StorageSize: flags.FlagToInt64Pointer(p, cmd, storageSizeFlag),
175191
Version: flags.FlagToStringValue(p, cmd, versionFlag),
176192
RetentionDays: flags.FlagWithDefaultToInt32Value(p, cmd, retentionDaysFlag),
193+
194+
EncryptionKekKeyId: flags.FlagToStringPointer(p, cmd, encryptionKekKeyIdFlag),
195+
EncryptionKekKeyringId: flags.FlagToStringPointer(p, cmd, encryptionKekKeyringIdFlag),
196+
EncryptionKekKeyVersion: flags.FlagToStringPointer(p, cmd, encryptionKekKeyVersionFlag),
197+
EncryptionServiceAccount: flags.FlagToStringPointer(p, cmd, encryptionServiceAccountFlag),
177198
}
178199

179200
p.DebugInputModel(model)
@@ -217,12 +238,22 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient sqlserverfle
217238
return req, err
218239
}
219240

220-
if model.ACL == nil {
221-
model.ACL = make([]string, 0)
241+
var encryption *sqlserverflex.InstanceEncryption
242+
if model.EncryptionKekKeyId != nil && model.EncryptionKekKeyringId != nil && model.EncryptionKekKeyVersion != nil && model.EncryptionServiceAccount != nil {
243+
encryption = &sqlserverflex.InstanceEncryption{
244+
KekKeyId: *model.EncryptionKekKeyId,
245+
KekKeyRingId: *model.EncryptionKekKeyringId,
246+
KekKeyVersion: *model.EncryptionKekKeyVersion,
247+
ServiceAccount: *model.EncryptionServiceAccount,
248+
}
249+
if model.ACL == nil {
250+
model.ACL = make([]string, 0)
251+
}
222252
}
223253

224254
req = req.CreateInstancePayload(sqlserverflex.CreateInstancePayload{
225-
Name: model.InstanceName,
255+
Name: model.InstanceName,
256+
Encryption: encryption,
226257
Network: sqlserverflex.CreateInstancePayloadNetwork{
227258
Acl: model.ACL,
228259
},

internal/cmd/beta/sqlserverflex/instance/create/create_test.go

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,21 @@ var testFlavorId = uuid.NewString()
5252

5353
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
5454
flagValues := map[string]string{
55-
globalflags.ProjectIdFlag: testProjectId,
56-
globalflags.RegionFlag: testRegion,
57-
instanceNameFlag: "example-name",
58-
aclFlag: "0.0.0.0/0",
59-
backupScheduleFlag: "0 0/6 * * *",
60-
flavorIdFlag: testFlavorId,
61-
storageClassFlag: "storage-class", // Non-default
62-
storageSizeFlag: "10",
63-
versionFlag: "6.0",
64-
editionFlag: "developer",
65-
retentionDaysFlag: "32",
55+
globalflags.ProjectIdFlag: testProjectId,
56+
globalflags.RegionFlag: testRegion,
57+
instanceNameFlag: "example-name",
58+
aclFlag: "0.0.0.0/0",
59+
backupScheduleFlag: "0 0/6 * * *",
60+
flavorIdFlag: testFlavorId,
61+
storageClassFlag: "storage-class", // Non-default
62+
storageSizeFlag: "10",
63+
versionFlag: "6.0",
64+
editionFlag: "developer",
65+
retentionDaysFlag: "32",
66+
encryptionKekKeyIdFlag: "key-id",
67+
encryptionKekKeyringIdFlag: "keyring-id",
68+
encryptionKekKeyVersionFlag: "key-version",
69+
encryptionServiceAccountFlag: "service-account",
6670
}
6771
for _, mod := range mods {
6872
mod(flagValues)
@@ -85,6 +89,11 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
8589
StorageSize: utils.Ptr(int64(10)),
8690
Version: "6.0",
8791
RetentionDays: 32,
92+
93+
EncryptionKekKeyId: utils.Ptr("key-id"),
94+
EncryptionKekKeyringId: utils.Ptr("keyring-id"),
95+
EncryptionKekKeyVersion: utils.Ptr("key-version"),
96+
EncryptionServiceAccount: utils.Ptr("service-account"),
8897
}
8998
for _, mod := range mods {
9099
mod(model)
@@ -108,7 +117,13 @@ func fixturePayload(mods ...func(payload *sqlserverflex.CreateInstancePayload))
108117
Acl: []string{"0.0.0.0/0"},
109118
},
110119
BackupSchedule: "0 0/6 * * *",
111-
FlavorId: testFlavorId,
120+
Encryption: &sqlserverflex.InstanceEncryption{
121+
KekKeyId: "key-id",
122+
KekKeyRingId: "keyring-id",
123+
KekKeyVersion: "key-version",
124+
ServiceAccount: "service-account",
125+
},
126+
FlavorId: testFlavorId,
112127
Storage: sqlserverflex.StorageCreate{
113128
Class: "storage-class",
114129
Size: int64(10),
@@ -137,6 +152,29 @@ func TestParseInput(t *testing.T) {
137152
isValid: true,
138153
expectedModel: fixtureInputModel(),
139154
},
155+
{
156+
description: "without encryption",
157+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
158+
delete(flagValues, encryptionKekKeyIdFlag)
159+
delete(flagValues, encryptionKekKeyringIdFlag)
160+
delete(flagValues, encryptionKekKeyVersionFlag)
161+
delete(flagValues, encryptionServiceAccountFlag)
162+
}),
163+
isValid: true,
164+
expectedModel: fixtureInputModel(func(model *inputModel) {
165+
model.EncryptionKekKeyId = nil
166+
model.EncryptionKekKeyringId = nil
167+
model.EncryptionKekKeyVersion = nil
168+
model.EncryptionServiceAccount = nil
169+
}),
170+
},
171+
{
172+
description: "incomplete encryption configuration",
173+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
174+
delete(flagValues, encryptionServiceAccountFlag)
175+
}),
176+
isValid: false,
177+
},
140178
{
141179
description: "use CPU and RAM",
142180
flagValues: fixtureFlagValues(func(flagValues map[string]string) {

internal/cmd/service-account/key/create/create.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
8686
return fmt.Errorf("create service account key: %w", err)
8787
}
8888

89-
params.Printer.Outputf("Created key for service account %s with ID %q\n", model.ServiceAccountEmail, resp.Id)
90-
91-
key, err := json.MarshalIndent(resp, "", " ")
92-
if err != nil {
93-
return fmt.Errorf("marshal key: %w", err)
94-
}
95-
params.Printer.Outputln(string(key))
96-
return nil
89+
return params.Printer.OutputResult(model.OutputFormat, resp, func() error {
90+
params.Printer.Outputf("Created key for service account %s with ID %q\n", model.ServiceAccountEmail, resp.Id)
91+
92+
key, err := json.MarshalIndent(resp, "", " ")
93+
if err != nil {
94+
return fmt.Errorf("marshal key: %w", err)
95+
}
96+
params.Printer.Outputln(string(key))
97+
return nil
98+
})
9799
},
98100
}
99101

0 commit comments

Comments
 (0)