diff --git a/docs/data-sources/instance.md b/docs/data-sources/instance.md index 9012a10..0e8af83 100644 --- a/docs/data-sources/instance.md +++ b/docs/data-sources/instance.md @@ -53,6 +53,7 @@ Read-Only: - `ssl_cert` (String) - `ssl_key` (String) - `type` (String) +- `use_ssl` (Boolean) - `username` (String) diff --git a/docs/data-sources/instance_list.md b/docs/data-sources/instance_list.md index 6abfd6a..6d9f66a 100644 --- a/docs/data-sources/instance_list.md +++ b/docs/data-sources/instance_list.md @@ -62,6 +62,7 @@ Read-Only: - `ssl_cert` (String) - `ssl_key` (String) - `type` (String) +- `use_ssl` (Boolean) - `username` (String) diff --git a/docs/resources/instance.md b/docs/resources/instance.md index d15749c..e3dc9d3 100644 --- a/docs/resources/instance.md +++ b/docs/resources/instance.md @@ -56,6 +56,7 @@ Optional: - `ssl_ca` (String, Sensitive) The CA certificate. Optional, you can set this if the engine type is MYSQL, POSTGRES, TIDB or CLICKHOUSE. - `ssl_cert` (String, Sensitive) The client certificate. Optional, you can set this if the engine type is MYSQL, POSTGRES, TIDB or CLICKHOUSE. - `ssl_key` (String, Sensitive) The client key. Optional, you can set this if the engine type is MYSQL, POSTGRES, TIDB or CLICKHOUSE. +- `use_ssl` (Boolean) Enable SSL connection. Required to use SSL certificates. - `username` (String) The connection user name used by Bytebase to perform DDL and DML operations. diff --git a/examples/database/main.tf b/examples/database/main.tf index 3ee9f24..e7ab2c4 100644 --- a/examples/database/main.tf +++ b/examples/database/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/database_group/main.tf b/examples/database_group/main.tf index f7f286d..c1719e5 100644 --- a/examples/database_group/main.tf +++ b/examples/database_group/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/environments/README.md b/examples/environments/README.md index 9587462..e6f7d19 100644 --- a/examples/environments/README.md +++ b/examples/environments/README.md @@ -8,6 +8,6 @@ You should replace the provider initial variables with your own and exec the [se ```terraform data "bytebase_setting" "environments" { - name = "ENVIRONMENT" + name = "settings/ENVIRONMENT" } ``` diff --git a/examples/environments/main.tf b/examples/environments/main.tf index 07429d6..dea81bb 100644 --- a/examples/environments/main.tf +++ b/examples/environments/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } @@ -19,7 +19,7 @@ provider "bytebase" { # List all environment data "bytebase_setting" "environments" { - name = "ENVIRONMENT" + name = "settings/ENVIRONMENT" } output "all_environments" { diff --git a/examples/groups/main.tf b/examples/groups/main.tf index c1c3e21..741d0b2 100644 --- a/examples/groups/main.tf +++ b/examples/groups/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/iamPolicy/main.tf b/examples/iamPolicy/main.tf index df08231..d4ec9e2 100644 --- a/examples/iamPolicy/main.tf +++ b/examples/iamPolicy/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/instances/main.tf b/examples/instances/main.tf index ab92d38..18417f7 100644 --- a/examples/instances/main.tf +++ b/examples/instances/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/policies/main.tf b/examples/policies/main.tf index 7d32e75..e9adc04 100644 --- a/examples/policies/main.tf +++ b/examples/policies/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/projects/main.tf b/examples/projects/main.tf index f5f2c8b..24b539e 100644 --- a/examples/projects/main.tf +++ b/examples/projects/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/risk/main.tf b/examples/risk/main.tf index cddef7d..645207d 100644 --- a/examples/risk/main.tf +++ b/examples/risk/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/roles/main.tf b/examples/roles/main.tf index f8e05a3..34fd4f7 100644 --- a/examples/roles/main.tf +++ b/examples/roles/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/settings/main.tf b/examples/settings/main.tf index 6ffe582..20f9f80 100644 --- a/examples/settings/main.tf +++ b/examples/settings/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/setup/environment.tf b/examples/setup/environment.tf index 927db40..4242f12 100644 --- a/examples/setup/environment.tf +++ b/examples/setup/environment.tf @@ -1,5 +1,6 @@ resource "bytebase_setting" "environments" { - name = "ENVIRONMENT" + name = "settings/ENVIRONMENT" + environment_setting { environment { id = local.environment_id_prod diff --git a/examples/setup/main.tf b/examples/setup/main.tf index cd72af4..88c7059 100644 --- a/examples/setup/main.tf +++ b/examples/setup/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/sql_review/main.tf b/examples/sql_review/main.tf index 4eec808..05ad7c8 100644 --- a/examples/sql_review/main.tf +++ b/examples/sql_review/main.tf @@ -1,7 +1,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/examples/users/main.tf b/examples/users/main.tf index 6f77f72..9fca6b1 100644 --- a/examples/users/main.tf +++ b/examples/users/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { bytebase = { - version = "3.7.1" + version = "3.7.2" # For local development, please use "terraform.local/bytebase/bytebase" instead source = "registry.terraform.io/bytebase/bytebase" } diff --git a/provider/data_source_database_group.go b/provider/data_source_database_group.go index 88c351d..03ce121 100644 --- a/provider/data_source_database_group.go +++ b/provider/data_source_database_group.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -29,7 +28,7 @@ func dataSourceDatabaseGroup() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), Description: "The project fullname in projects/{id} format.", }, diff --git a/provider/data_source_database_group_list.go b/provider/data_source_database_group_list.go index 789d7e6..25e18ea 100644 --- a/provider/data_source_database_group_list.go +++ b/provider/data_source_database_group_list.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strconv" "time" @@ -23,7 +22,7 @@ func dataSourceDatabaseGroupList() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), Description: "The project fullname in projects/{id} format.", }, diff --git a/provider/data_source_database_list.go b/provider/data_source_database_list.go index ef86ad8..940ffcc 100644 --- a/provider/data_source_database_list.go +++ b/provider/data_source_database_list.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strconv" "time" @@ -25,9 +24,9 @@ func dataSourceDatabaseList() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile("^workspaces/-$"), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern)), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s$", internal.WorkspaceName), + fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), }, "query": { @@ -41,22 +40,28 @@ func dataSourceDatabaseList() *schema.Resource { Description: "If not include unassigned databases in the response.", }, "environment": { - Type: schema.TypeString, - Optional: true, - Description: "The environment full name. Filter databases by environment.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The environment full name. Filter databases by environment.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), + ), }, "project": { - Type: schema.TypeString, - Optional: true, - Description: "The project full name. Filter databases by project.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The project full name. Filter databases by project.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), + ), }, "instance": { - Type: schema.TypeString, - Optional: true, - Description: "The instance full name. Filter databases by instance.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The instance full name. Filter databases by instance.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern), + ), }, "engines": { Type: schema.TypeSet, diff --git a/provider/data_source_group.go b/provider/data_source_group.go index 9f11af5..996d998 100644 --- a/provider/data_source_group.go +++ b/provider/data_source_group.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - "regexp" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -24,7 +23,7 @@ func dataSourceGroup() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s", internal.GroupNamePrefix)), + fmt.Sprintf("^%s", internal.GroupNamePrefix), ), Description: "The group name in groups/{email} format.", }, diff --git a/provider/data_source_iam_policy.go b/provider/data_source_iam_policy.go index 299b1f2..6c04105 100644 --- a/provider/data_source_iam_policy.go +++ b/provider/data_source_iam_policy.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - "regexp" "strconv" "strings" @@ -28,9 +27,9 @@ func dataSourceIAMPolicy() *schema.Resource { Required: true, ValidateDiagFunc: internal.ResourceNameValidation( // workspace policy - regexp.MustCompile("^workspaces/-$"), + fmt.Sprintf("^%s$", internal.WorkspaceName), // project policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), Description: `The IAM policy parent name for the policy, support "projects/{resource id}" or "workspaces/-"`, }, diff --git a/provider/data_source_instance_list.go b/provider/data_source_instance_list.go index 30ef0a4..ea34b59 100644 --- a/provider/data_source_instance_list.go +++ b/provider/data_source_instance_list.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strconv" "time" @@ -28,16 +27,20 @@ func dataSourceInstanceList() *schema.Resource { Description: "Filter instances by name or resource id with wildcard", }, "environment": { - Type: schema.TypeString, - Optional: true, - Description: "The environment full name. Filter instances by environment.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The environment full name. Filter instances by environment.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), + ), }, "project": { - Type: schema.TypeString, - Optional: true, - Description: "The project full name. Filter instances by project.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The project full name. Filter instances by project.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), + ), }, "host": { Type: schema.TypeString, diff --git a/provider/data_source_policy.go b/provider/data_source_policy.go index 829dab9..80786d3 100644 --- a/provider/data_source_policy.go +++ b/provider/data_source_policy.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - "regexp" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -29,15 +28,15 @@ func dataSourcePolicy() *schema.Resource { Default: "", ValidateDiagFunc: internal.ResourceNameValidation( // workspace policy - regexp.MustCompile(fmt.Sprintf("^%s$", internal.WorkspaceName)), + fmt.Sprintf("^%s$", internal.WorkspaceName), // environment policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), // instance policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern), // project policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), // database policy - regexp.MustCompile(fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern), ), Description: "The policy parent name for the policy, support projects/{resource id}, environments/{resource id}, instances/{resource id}, or instances/{resource id}/databases/{database name}", }, diff --git a/provider/data_source_policy_list.go b/provider/data_source_policy_list.go index cf51cf8..aecd72c 100644 --- a/provider/data_source_policy_list.go +++ b/provider/data_source_policy_list.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strconv" "time" @@ -27,15 +26,15 @@ func dataSourcePolicyList() *schema.Resource { Default: "", ValidateDiagFunc: internal.ResourceNameValidation( // workspace policy - regexp.MustCompile(fmt.Sprintf("^%s$", internal.WorkspaceName)), + fmt.Sprintf("^%s$", internal.WorkspaceName), // environment policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), // instance policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern), // project policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), // database policy - regexp.MustCompile(fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern), ), Description: "The policy parent name for the policy, support projects/{resource id}, environments/{resource id}, instances/{resource id}, or instances/{resource id}/databases/{database name}", }, diff --git a/provider/data_source_setting.go b/provider/data_source_setting.go index 31fed7b..e20a0b3 100644 --- a/provider/data_source_setting.go +++ b/provider/data_source_setting.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -27,11 +26,11 @@ func dataSourceSetting() *schema.Resource { Required: true, Description: `The setting name in settings/{name} format. The name support "WORKSPACE_APPROVAL", "WORKSPACE_PROFILE", "DATA_CLASSIFICATION", "SEMANTIC_TYPES" and "ENVIRONMENT". Check the proto https://github.com/bytebase/bytebase/blob/main/proto/v1/v1/setting_service.proto#L109 for details`, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_APPROVAL.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_PROFILE.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_DATA_CLASSIFICATION.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_SEMANTIC_TYPES.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_ENVIRONMENT.String())), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_APPROVAL.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_PROFILE.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_DATA_CLASSIFICATION.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_SEMANTIC_TYPES.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_ENVIRONMENT.String()), ), }, "approval_flow": getWorkspaceApprovalSetting(true), @@ -419,7 +418,7 @@ func getWorkspaceApprovalSetting(computed bool) *schema.Schema { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s", internal.RoleNamePrefix)), + fmt.Sprintf("^%s", internal.RoleNamePrefix), ), Description: "The role require to review in this step", }, diff --git a/provider/data_source_user.go b/provider/data_source_user.go index cdc3ecb..9ef0f6a 100644 --- a/provider/data_source_user.go +++ b/provider/data_source_user.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -24,7 +23,7 @@ func dataSourceUser() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s", internal.UserNamePrefix)), + fmt.Sprintf("^%s", internal.UserNamePrefix), ), Description: "The user name in users/{user id or email} format.", }, diff --git a/provider/data_source_user_list.go b/provider/data_source_user_list.go index d5332da..0ce6c5e 100644 --- a/provider/data_source_user_list.go +++ b/provider/data_source_user_list.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strconv" "time" @@ -33,10 +32,12 @@ func dataSourceUserList() *schema.Resource { Description: "Filter users by email with wildcard", }, "project": { - Type: schema.TypeString, - Optional: true, - Description: "The project full name. Filter users by project.", - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern))), + Type: schema.TypeString, + Optional: true, + Description: "The project full name. Filter users by project.", + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), + ), }, "state": { Type: schema.TypeString, diff --git a/provider/internal/utils.go b/provider/internal/utils.go index 21e35cc..537ef7e 100644 --- a/provider/internal/utils.go +++ b/provider/internal/utils.go @@ -54,7 +54,7 @@ var ( var ResourceIDValidation = validation.StringMatch(ResourceIDRegex, fmt.Sprintf("resource id must matches %v", ResourceIDRegex)) // ResourceNameValidation validate the resource name with prefix. -func ResourceNameValidation(regexs ...*regexp.Regexp) schema.SchemaValidateDiagFunc { +func ResourceNameValidation(stringPatterns ...string) schema.SchemaValidateDiagFunc { return func(i interface{}, path cty.Path) diag.Diagnostics { var diags diag.Diagnostics @@ -68,15 +68,17 @@ func ResourceNameValidation(regexs ...*regexp.Regexp) schema.SchemaValidateDiagF }) return diags } - for _, regex := range regexs { + for _, stringPattern := range stringPatterns { + regex := regexp.MustCompile(stringPattern) if ok := regex.MatchString(v); ok { return diags } } + diags = append(diags, diag.Diagnostic{ Severity: diag.Error, Summary: "Resource id not match", - Detail: fmt.Sprintf(`resource id "%s" must matches "%s" pattern`, v, ResourceIDPattern), + Detail: fmt.Sprintf(`The resource value "%s" doesn't must any patterns: %v`, v, strings.Join(stringPatterns, ",")), AttributePath: path, }) return diags diff --git a/provider/resource_database_group.go b/provider/resource_database_group.go index b336f96..1ee8eb4 100644 --- a/provider/resource_database_group.go +++ b/provider/resource_database_group.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" v1pb "github.com/bytebase/bytebase/proto/generated-go/v1" "github.com/hashicorp/terraform-plugin-log/tflog" @@ -37,7 +36,7 @@ func resourceDatabaseGroup() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), Description: "The project fullname in projects/{id} format.", }, diff --git a/provider/resource_group.go b/provider/resource_group.go index b6c7e4d..f537aa6 100644 --- a/provider/resource_group.go +++ b/provider/resource_group.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" v1pb "github.com/bytebase/bytebase/proto/generated-go/v1" "github.com/hashicorp/terraform-plugin-log/tflog" @@ -66,7 +65,7 @@ func resourceGroup() *schema.Resource { Type: schema.TypeString, Required: true, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s", internal.UserNamePrefix)), + fmt.Sprintf("^%s", internal.UserNamePrefix), ), Description: "The member in users/{email} format.", }, diff --git a/provider/resource_iam_policy.go b/provider/resource_iam_policy.go index 186f361..825ba67 100644 --- a/provider/resource_iam_policy.go +++ b/provider/resource_iam_policy.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strings" "time" @@ -34,9 +33,9 @@ func resourceIAMPolicy() *schema.Resource { Required: true, ValidateDiagFunc: internal.ResourceNameValidation( // workspace policy - regexp.MustCompile("^workspaces/-$"), + fmt.Sprintf("^%s$", internal.WorkspaceName), // project policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), ), Description: `The IAM policy parent name for the policy, support "projects/{resource id}" or "workspaces/-"`, }, diff --git a/provider/resource_instance.go b/provider/resource_instance.go index dfbfd32..85ea68f 100644 --- a/provider/resource_instance.go +++ b/provider/resource_instance.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - "regexp" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -37,10 +36,12 @@ func resourceInstance() *schema.Resource { Description: "The instance unique resource id.", }, "environment": { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: internal.ResourceNameValidation(regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern))), - Description: "The environment full name for the instance in environments/{environment id} format.", + Type: schema.TypeString, + Required: true, + ValidateDiagFunc: internal.ResourceNameValidation( + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), + ), + Description: "The environment full name for the instance in environments/{environment id} format.", }, "title": { Type: schema.TypeString, diff --git a/provider/resource_policy.go b/provider/resource_policy.go index 70ada04..21ed0a5 100644 --- a/provider/resource_policy.go +++ b/provider/resource_policy.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strings" "time" @@ -35,15 +34,15 @@ func resourcePolicy() *schema.Resource { Required: true, ValidateDiagFunc: internal.ResourceNameValidation( // workspace policy - regexp.MustCompile(fmt.Sprintf("^%s$", internal.WorkspaceName)), + fmt.Sprintf("^%s$", internal.WorkspaceName), // environment policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.EnvironmentNamePrefix, internal.ResourceIDPattern), // instance policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern), // project policy - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern), // database policy - regexp.MustCompile(fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern)), + fmt.Sprintf("^%s%s/%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern, internal.DatabaseIDPrefix, internal.ResourceIDPattern), ), Description: "The policy parent name for the policy, support projects/{resource id}, environments/{resource id}, instances/{resource id}, or instances/{resource id}/databases/{database name}", }, diff --git a/provider/resource_setting.go b/provider/resource_setting.go index 52cf7d7..b10d2c9 100644 --- a/provider/resource_setting.go +++ b/provider/resource_setting.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "regexp" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -33,11 +32,11 @@ func resourceSetting() *schema.Resource { Required: true, Description: `The setting name in settings/{name} format. The name support "WORKSPACE_APPROVAL", "WORKSPACE_PROFILE", "DATA_CLASSIFICATION", "SEMANTIC_TYPES" and "ENVIRONMENT". Check the proto https://github.com/bytebase/bytebase/blob/main/proto/v1/v1/setting_service.proto#L109 for details`, ValidateDiagFunc: internal.ResourceNameValidation( - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_APPROVAL.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_PROFILE.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_DATA_CLASSIFICATION.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_SEMANTIC_TYPES.String())), - regexp.MustCompile(fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_ENVIRONMENT.String())), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_APPROVAL.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_WORKSPACE_PROFILE.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_DATA_CLASSIFICATION.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_SEMANTIC_TYPES.String()), + fmt.Sprintf("^%s%s$", internal.SettingNamePrefix, v1pb.Setting_ENVIRONMENT.String()), ), }, "approval_flow": getWorkspaceApprovalSetting(false),