From d25a12f6c7bcb0c9d443f875d0803183ffa1dcb2 Mon Sep 17 00:00:00 2001 From: miampf Date: Thu, 11 Apr 2024 14:21:02 +0200 Subject: [PATCH] parse `tags` flag --- cli/internal/cmd/configgenerate.go | 29 +++++++++++++++++++ internal/cloud/cloudprovider/cloudprovider.go | 3 ++ 2 files changed, 32 insertions(+) diff --git a/cli/internal/cmd/configgenerate.go b/cli/internal/cmd/configgenerate.go index 4fabe40e3..a4a6f88de 100644 --- a/cli/internal/cmd/configgenerate.go +++ b/cli/internal/cmd/configgenerate.go @@ -37,6 +37,7 @@ func newConfigGenerateCmd() *cobra.Command { } cmd.Flags().StringP("kubernetes", "k", semver.MajorMinor(string(config.Default().KubernetesVersion)), "Kubernetes version to use in format MAJOR.MINOR") cmd.Flags().StringP("attestation", "a", "", fmt.Sprintf("attestation variant to use %s. If not specified, the default for the cloud provider is used", printFormattedSlice(variant.GetAvailableAttestationVariants()))) + cmd.Flags().StringP("tags", "t", "", "Additional tags for created resources.") return cmd } @@ -45,6 +46,7 @@ type generateFlags struct { rootFlags k8sVersion versions.ValidK8sVersion attestationVariant variant.Variant + tags cloudprovider.Tags } func (f *generateFlags) parse(flags *pflag.FlagSet) error { @@ -64,6 +66,12 @@ func (f *generateFlags) parse(flags *pflag.FlagSet) error { } f.attestationVariant = variant + tags, err := parseTagsFlags(flags) + if err != nil { + return err + } + f.tags = tags + return nil } @@ -221,3 +229,24 @@ func parseAttestationFlag(flags *pflag.FlagSet) (variant.Variant, error) { return attestationVariant, nil } + +func parseTagsFlags(flags *pflag.FlagSet) (cloudprovider.Tags, error) { + tagsString, err := flags.GetString("tags") + if err != nil { + return nil, fmt.Errorf("getting tags flag: %w", err) + } + tagsString = strings.ReplaceAll(tagsString, " ", "") + tagsStringSplit := strings.Split(tagsString, ",") + + tags := make(cloudprovider.Tags) + for _, tag := range tagsStringSplit { + tagSplit := strings.Split(tag, "=") + if len(tagSplit) != 2 { + return nil, fmt.Errorf("wrong format of tags") + } + + tags[tagSplit[0]] = tagSplit[1] + } + + return tags, nil +} diff --git a/internal/cloud/cloudprovider/cloudprovider.go b/internal/cloud/cloudprovider/cloudprovider.go index 47791f943..204ae305c 100644 --- a/internal/cloud/cloudprovider/cloudprovider.go +++ b/internal/cloud/cloudprovider/cloudprovider.go @@ -16,6 +16,9 @@ import ( // Provider is cloud provider used by the CLI. type Provider uint32 +// Tags is the type that holds additional tags for cloud resources. +type Tags map[string]string + const ( // Unknown is default value for Provider. Unknown Provider = iota