Skip to content

Commit 6102adf

Browse files
feat: add labels validations (#10387) (#17806)
[upstream:e5ad07ac8e3776862d985a21ec2b5fff92c068a1] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent 10f3226 commit 6102adf

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

.changelog/10387.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
storage: added labels validation to 'google_storage_bucket' resource
3+
```

google/services/storage/resource_storage_bucket.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"log"
1111
"math"
12+
"regexp"
1213
"runtime"
1314
"strconv"
1415
"strings"
@@ -94,10 +95,11 @@ func ResourceStorageBucket() *schema.Resource {
9495
},
9596

9697
"labels": {
97-
Type: schema.TypeMap,
98-
Optional: true,
99-
Elem: &schema.Schema{Type: schema.TypeString},
100-
Description: `A set of key/value label pairs to assign to the bucket.`,
98+
Type: schema.TypeMap,
99+
ValidateFunc: labelKeyValidator,
100+
Optional: true,
101+
Elem: &schema.Schema{Type: schema.TypeString},
102+
Description: `A set of key/value label pairs to assign to the bucket.`,
101103
},
102104

103105
"terraform_labels": {
@@ -519,6 +521,22 @@ func ResourceStorageBucket() *schema.Resource {
519521
const resourceDataplexGoogleLabelPrefix = "goog-dataplex"
520522
const resourceDataplexGoogleProvidedLabelPrefix = "labels." + resourceDataplexGoogleLabelPrefix
521523

524+
var labelKeyRegex = regexp.MustCompile(`^[a-z0-9_-]{1,63}$`)
525+
526+
func labelKeyValidator(val interface{}, key string) (warns []string, errs []error) {
527+
if val == nil {
528+
return
529+
}
530+
531+
m := val.(map[string]interface{})
532+
for k := range m {
533+
if !labelKeyRegex.MatchString(k) {
534+
errs = append(errs, fmt.Errorf("%q is an invalid label key. See https://cloud.google.com/storage/docs/tags-and-labels#bucket-labels", k))
535+
}
536+
}
537+
return
538+
}
539+
522540
func resourceDataplexLabelDiffSuppress(k, old, new string, d *schema.ResourceData) bool {
523541
if strings.HasPrefix(k, resourceDataplexGoogleProvidedLabelPrefix) && new == "" {
524542
return true

0 commit comments

Comments
 (0)