Skip to content

Commit 91c70b3

Browse files
afedorchrcohenma
authored andcommitted
KMS Tagging
1 parent 479fbc2 commit 91c70b3

18 files changed

+264
-40
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Enable regional Subnets by making Availability Domain optional when creating a S
1414
- Support for Health Check Service
1515
- Adding database connection information to the `oci_database_database` and `oci_database_databases` data sources
1616
- Adding support for Steering Policies in DNS
17+
- Support for the tagging of applicable KMS resources
1718

1819
## 3.14.1 (February 05, 2019)
1920

oci/kms_key_data_source.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,20 @@ func KmsKeyDataSource() *schema.Resource {
3232
Type: schema.TypeString,
3333
Computed: true,
3434
},
35+
"defined_tags": {
36+
Type: schema.TypeMap,
37+
Computed: true,
38+
Elem: schema.TypeString,
39+
},
3540
"display_name": {
3641
Type: schema.TypeString,
3742
Computed: true,
3843
},
44+
"freeform_tags": {
45+
Type: schema.TypeMap,
46+
Computed: true,
47+
Elem: schema.TypeString,
48+
},
3949
"key_shape": {
4050
Type: schema.TypeList,
4151
Computed: true,

oci/kms_key_resource.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,21 @@ func KmsKeyResource() *schema.Resource {
6868
Required: true,
6969
ForceNew: true,
7070
},
71+
7172
// Optional
73+
"defined_tags": {
74+
Type: schema.TypeMap,
75+
Optional: true,
76+
Computed: true,
77+
DiffSuppressFunc: definedTagsDiffSuppressFunction,
78+
Elem: schema.TypeString,
79+
},
80+
"freeform_tags": {
81+
Type: schema.TypeMap,
82+
Optional: true,
83+
Computed: true,
84+
Elem: schema.TypeString,
85+
},
7286
"desired_state": {
7387
Type: schema.TypeString,
7488
Optional: true,
@@ -228,11 +242,23 @@ func (s *KmsKeyResourceCrud) Create() error {
228242
request.CompartmentId = &tmp
229243
}
230244

245+
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
246+
convertedDefinedTags, err := mapToDefinedTags(definedTags.(map[string]interface{}))
247+
if err != nil {
248+
return err
249+
}
250+
request.DefinedTags = convertedDefinedTags
251+
}
252+
231253
if displayName, ok := s.D.GetOkExists("display_name"); ok {
232254
tmp := displayName.(string)
233255
request.DisplayName = &tmp
234256
}
235257

258+
if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok {
259+
request.FreeformTags = objectMapToStringMap(freeformTags.(map[string]interface{}))
260+
}
261+
236262
if keyShape, ok := s.D.GetOkExists("key_shape"); ok {
237263
if tmpList := keyShape.([]interface{}); len(tmpList) > 0 {
238264
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "key_shape", 0)
@@ -275,11 +301,23 @@ func (s *KmsKeyResourceCrud) Get() error {
275301
func (s *KmsKeyResourceCrud) Update() error {
276302
request := oci_kms.UpdateKeyRequest{}
277303

304+
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
305+
convertedDefinedTags, err := mapToDefinedTags(definedTags.(map[string]interface{}))
306+
if err != nil {
307+
return err
308+
}
309+
request.DefinedTags = convertedDefinedTags
310+
}
311+
278312
if displayName, ok := s.D.GetOkExists("display_name"); ok {
279313
tmp := displayName.(string)
280314
request.DisplayName = &tmp
281315
}
282316

317+
if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok {
318+
request.FreeformTags = objectMapToStringMap(freeformTags.(map[string]interface{}))
319+
}
320+
283321
tmp := s.D.Id()
284322
request.KeyId = &tmp
285323

@@ -289,6 +327,7 @@ func (s *KmsKeyResourceCrud) Update() error {
289327
if err != nil {
290328
return err
291329
}
330+
292331
s.Res = &response.Key
293332

294333
// Handle activation/deactivation here
@@ -332,10 +371,16 @@ func (s *KmsKeyResourceCrud) SetData() error {
332371
s.D.Set("current_key_version", *s.Res.CurrentKeyVersion)
333372
}
334373

374+
if s.Res.DefinedTags != nil {
375+
s.D.Set("defined_tags", definedTagsToMap(s.Res.DefinedTags))
376+
}
377+
335378
if s.Res.DisplayName != nil {
336379
s.D.Set("display_name", *s.Res.DisplayName)
337380
}
338381

382+
s.D.Set("freeform_tags", s.Res.FreeformTags)
383+
339384
s.D.Set("desired_state", s.Res.LifecycleState)
340385

341386
if s.Res.KeyShape != nil {

oci/kms_key_test.go

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ import (
1111
)
1212

1313
var (
14-
KeyResourceConfig = KeyResourceDependencies +
14+
KeyRequiredOnlyResource = KeyResourceDependencies +
1515
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Required, Create, keyRepresentation)
1616

17+
KeyResourceConfig = KeyResourceDependencies +
18+
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Optional, Update, keyRepresentation)
19+
1720
keySingularDataSourceRepresentation = map[string]interface{}{
1821
"key_id": Representation{repType: Required, create: `${oci_kms_key.test_key.id}`},
1922
"management_endpoint": Representation{repType: Required, create: `${data.oci_kms_vault.test_vault.management_endpoint}`},
@@ -34,6 +37,8 @@ var (
3437
"key_shape": RepresentationGroup{Required, keyKeyShapeRepresentation},
3538
"management_endpoint": Representation{repType: Required, create: `${data.oci_kms_vault.test_vault.management_endpoint}`},
3639
"desired_state": Representation{repType: Optional, create: `ENABLED`, update: `DISABLED`},
40+
"defined_tags": Representation{repType: Optional, create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
41+
"freeform_tags": Representation{repType: Optional, create: map[string]string{"bar-key": "value"}, update: map[string]string{"Department": "Accounting"}},
3742
}
3843
keyKeyShapeRepresentation = map[string]interface{}{
3944
"algorithm": Representation{repType: Required, create: `AES`},
@@ -88,7 +93,7 @@ func TestKmsKeyResource_basic(t *testing.T) {
8893
Steps: []resource.TestStep{
8994
// verify create
9095
{
91-
Config: config + compartmentIdVariableStr + KeyResourceDependencies +
96+
Config: config + compartmentIdVariableStr + KeyResourceDependencies + DefinedTagsDependencies +
9297
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Required, Create, keyRepresentation),
9398
Check: resource.ComposeAggregateTestCheckFunc(
9499
resource.TestCheckResourceAttr(resourceName, "compartment_id", tenancyId),
@@ -104,14 +109,46 @@ func TestKmsKeyResource_basic(t *testing.T) {
104109
),
105110
},
106111

112+
// delete before next create
113+
{
114+
Config: config + compartmentIdVariableStr + KeyResourceDependencies,
115+
},
116+
// verify create with optionals
117+
{
118+
Config: config + compartmentIdVariableStr + KeyResourceDependencies + DefinedTagsDependencies +
119+
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Optional, Create, keyRepresentation),
120+
Check: resource.ComposeAggregateTestCheckFunc(
121+
resource.TestCheckResourceAttr(resourceName, "compartment_id", tenancyId),
122+
resource.TestCheckResourceAttrSet(resourceName, "current_key_version"),
123+
resource.TestCheckResourceAttr(resourceName, "defined_tags.%", "1"),
124+
resource.TestCheckResourceAttr(resourceName, "display_name", "Key C"),
125+
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
126+
resource.TestCheckResourceAttrSet(resourceName, "id"),
127+
resource.TestCheckResourceAttr(resourceName, "key_shape.#", "1"),
128+
resource.TestCheckResourceAttr(resourceName, "key_shape.0.algorithm", "AES"),
129+
resource.TestCheckResourceAttr(resourceName, "key_shape.0.length", "16"),
130+
resource.TestCheckResourceAttrSet(resourceName, "management_endpoint"),
131+
resource.TestCheckResourceAttrSet(resourceName, "state"),
132+
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
133+
resource.TestCheckResourceAttrSet(resourceName, "vault_id"),
134+
135+
func(s *terraform.State) (err error) {
136+
resId, err = fromInstanceState(s, resourceName, "id")
137+
return err
138+
},
139+
),
140+
},
141+
107142
// verify updates to updatable parameters
108143
{
109-
Config: config + compartmentIdVariableStr + KeyResourceDependencies +
144+
Config: config + compartmentIdVariableStr + KeyResourceDependencies + DefinedTagsDependencies +
110145
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Optional, Update, keyRepresentation),
111146
Check: resource.ComposeAggregateTestCheckFunc(
112147
resource.TestCheckResourceAttr(resourceName, "compartment_id", tenancyId),
113148
resource.TestCheckResourceAttrSet(resourceName, "current_key_version"),
149+
resource.TestCheckResourceAttr(resourceName, "defined_tags.%", "1"),
114150
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
151+
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
115152
resource.TestCheckResourceAttrSet(resourceName, "id"),
116153
resource.TestCheckResourceAttr(resourceName, "key_shape.#", "1"),
117154
resource.TestCheckResourceAttr(resourceName, "key_shape.0.algorithm", "AES"),
@@ -133,14 +170,16 @@ func TestKmsKeyResource_basic(t *testing.T) {
133170
{
134171
Config: config +
135172
generateDataSourceFromRepresentationMap("oci_kms_keys", "test_keys", Optional, Update, keyDataSourceRepresentation) +
136-
compartmentIdVariableStr + KeyResourceDependencies +
173+
compartmentIdVariableStr + KeyResourceDependencies + DefinedTagsDependencies +
137174
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Optional, Update, keyRepresentation),
138175
Check: resource.ComposeAggregateTestCheckFunc(
139176
resource.TestCheckResourceAttr(datasourceName, "compartment_id", tenancyId),
140177

141178
resource.TestCheckResourceAttr(datasourceName, "keys.#", "1"),
142179
resource.TestCheckResourceAttr(datasourceName, "keys.0.compartment_id", tenancyId),
180+
resource.TestCheckResourceAttr(datasourceName, "keys.0.defined_tags.%", "1"),
143181
resource.TestCheckResourceAttr(datasourceName, "keys.0.display_name", "displayName2"),
182+
resource.TestCheckResourceAttr(datasourceName, "keys.0.freeform_tags.%", "1"),
144183
resource.TestCheckResourceAttrSet(datasourceName, "keys.0.id"),
145184
resource.TestCheckResourceAttrSet(datasourceName, "keys.0.state"),
146185
resource.TestCheckResourceAttrSet(datasourceName, "keys.0.time_created"),
@@ -151,13 +190,15 @@ func TestKmsKeyResource_basic(t *testing.T) {
151190
{
152191
Config: config +
153192
generateDataSourceFromRepresentationMap("oci_kms_key", "test_key", Required, Create, keySingularDataSourceRepresentation) +
154-
compartmentIdVariableStr + KeyResourceConfig,
193+
compartmentIdVariableStr + KeyResourceConfig + DefinedTagsDependencies,
155194
Check: resource.ComposeAggregateTestCheckFunc(
156195
resource.TestCheckResourceAttrSet(singularDatasourceName, "key_id"),
157196

158197
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", tenancyId),
159198
resource.TestCheckResourceAttrSet(singularDatasourceName, "current_key_version"),
199+
resource.TestCheckResourceAttr(singularDatasourceName, "defined_tags.%", "1"),
160200
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
201+
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
161202
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
162203
resource.TestCheckResourceAttr(singularDatasourceName, "key_shape.#", "1"),
163204
resource.TestCheckResourceAttr(singularDatasourceName, "key_shape.0.algorithm", "AES"),
@@ -169,11 +210,11 @@ func TestKmsKeyResource_basic(t *testing.T) {
169210
},
170211
// remove singular datasource from previous step so that it doesn't conflict with import tests
171212
{
172-
Config: config + compartmentIdVariableStr + KeyResourceConfig,
213+
Config: config + compartmentIdVariableStr + KeyResourceConfig + DefinedTagsDependencies,
173214
},
174215
// revert the updates
175216
{
176-
Config: config + compartmentIdVariableStr + KeyResourceDependencies +
217+
Config: config + compartmentIdVariableStr + KeyResourceDependencies + DefinedTagsDependencies +
177218
generateResourceFromRepresentationMap("oci_kms_key", "test_key", Optional, Create, keyRepresentation),
178219
Check: resource.ComposeAggregateTestCheckFunc(
179220
resource.TestCheckResourceAttr(resourceName, "display_name", "Key C"),

oci/kms_keys_data_source.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,16 @@ func (s *KmsKeysDataSourceCrud) SetData() error {
103103
"compartment_id": *r.CompartmentId,
104104
}
105105

106+
if r.DefinedTags != nil {
107+
key["defined_tags"] = definedTagsToMap(r.DefinedTags)
108+
}
109+
106110
if r.DisplayName != nil {
107111
key["display_name"] = *r.DisplayName
108112
}
109113

114+
key["freeform_tags"] = r.FreeformTags
115+
110116
if r.Id != nil {
111117
key["id"] = *r.Id
112118
}

oci/kms_vault_data_source.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,20 @@ func KmsVaultDataSource() *schema.Resource {
2626
Type: schema.TypeString,
2727
Computed: true,
2828
},
29+
"defined_tags": {
30+
Type: schema.TypeMap,
31+
Computed: true,
32+
Elem: schema.TypeString,
33+
},
2934
"display_name": {
3035
Type: schema.TypeString,
3136
Computed: true,
3237
},
38+
"freeform_tags": {
39+
Type: schema.TypeMap,
40+
Computed: true,
41+
Elem: schema.TypeString,
42+
},
3343
"management_endpoint": {
3444
Type: schema.TypeString,
3545
Computed: true,

oci/kms_vault_resource.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ func KmsVaultResource() *schema.Resource {
3838
},
3939

4040
// Optional
41+
"defined_tags": {
42+
Type: schema.TypeMap,
43+
Optional: true,
44+
Computed: true,
45+
DiffSuppressFunc: definedTagsDiffSuppressFunction,
46+
Elem: schema.TypeString,
47+
},
48+
"freeform_tags": {
49+
Type: schema.TypeMap,
50+
Optional: true,
51+
Computed: true,
52+
Elem: schema.TypeString,
53+
},
4154

4255
// Computed
4356
"crypto_endpoint": {
@@ -141,11 +154,23 @@ func (s *KmsVaultResourceCrud) Create() error {
141154
request.CompartmentId = &tmp
142155
}
143156

157+
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
158+
convertedDefinedTags, err := mapToDefinedTags(definedTags.(map[string]interface{}))
159+
if err != nil {
160+
return err
161+
}
162+
request.DefinedTags = convertedDefinedTags
163+
}
164+
144165
if displayName, ok := s.D.GetOkExists("display_name"); ok {
145166
tmp := displayName.(string)
146167
request.DisplayName = &tmp
147168
}
148169

170+
if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok {
171+
request.FreeformTags = objectMapToStringMap(freeformTags.(map[string]interface{}))
172+
}
173+
149174
if vaultType, ok := s.D.GetOkExists("vault_type"); ok {
150175
request.VaultType = oci_kms.CreateVaultDetailsVaultTypeEnum(vaultType.(string))
151176
}
@@ -181,11 +206,23 @@ func (s *KmsVaultResourceCrud) Get() error {
181206
func (s *KmsVaultResourceCrud) Update() error {
182207
request := oci_kms.UpdateVaultRequest{}
183208

209+
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
210+
convertedDefinedTags, err := mapToDefinedTags(definedTags.(map[string]interface{}))
211+
if err != nil {
212+
return err
213+
}
214+
request.DefinedTags = convertedDefinedTags
215+
}
216+
184217
if displayName, ok := s.D.GetOkExists("display_name"); ok {
185218
tmp := displayName.(string)
186219
request.DisplayName = &tmp
187220
}
188221

222+
if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok {
223+
request.FreeformTags = objectMapToStringMap(freeformTags.(map[string]interface{}))
224+
}
225+
189226
tmp := s.D.Id()
190227
request.VaultId = &tmp
191228

@@ -221,10 +258,16 @@ func (s *KmsVaultResourceCrud) SetData() error {
221258
s.D.Set("crypto_endpoint", *s.Res.CryptoEndpoint)
222259
}
223260

261+
if s.Res.DefinedTags != nil {
262+
s.D.Set("defined_tags", definedTagsToMap(s.Res.DefinedTags))
263+
}
264+
224265
if s.Res.DisplayName != nil {
225266
s.D.Set("display_name", *s.Res.DisplayName)
226267
}
227268

269+
s.D.Set("freeform_tags", s.Res.FreeformTags)
270+
228271
if s.Res.ManagementEndpoint != nil {
229272
s.D.Set("management_endpoint", *s.Res.ManagementEndpoint)
230273
}

0 commit comments

Comments
 (0)