Skip to content

Commit 9d8ba16

Browse files
authored
chore: get the env before create (#31)
* fix: update api response * chore: update version * chore: get the env before create
1 parent 8194ab4 commit 9d8ba16

File tree

8 files changed

+36
-19
lines changed

8 files changed

+36
-19
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.0.6-beta.2
1+
0.0.6-beta.3

api/auth.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,5 @@ type Login struct {
88

99
// AuthResponse is the API message for user login response.
1010
type AuthResponse struct {
11-
UserID int `json:"userId"`
12-
Username string `json:"username"`
13-
Email string `json:"email"`
14-
Token string `json:"token"`
11+
Token string `json:"token"`
1512
}

examples/environments/main.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
terraform {
33
required_providers {
44
bytebase = {
5-
version = "0.0.6-beta"
5+
version = "0.0.6-beta.3"
66
# For local development, please use "terraform.local/bytebase/bytebase" instead
77
source = "registry.terraform.io/bytebase/bytebase"
88
}
@@ -19,8 +19,8 @@ provider "bytebase" {
1919
}
2020

2121
locals {
22-
environment_name_dev = "dev_test"
23-
environment_name_prod = "prod_test"
22+
environment_name_dev = "dev"
23+
environment_name_prod = "prod"
2424
}
2525

2626
# List all environment

examples/instances/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
terraform {
33
required_providers {
44
bytebase = {
5-
version = "0.0.6-beta"
5+
version = "0.0.6-beta.3"
66
# For local development, please use "terraform.local/bytebase/bytebase" instead
77
source = "registry.terraform.io/bytebase/bytebase"
88
}

examples/role/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "0.0.6-beta"
4+
version = "0.0.6-beta.3"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/setup/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Setup examples
22

33
This is the setup for examples.
4-
We will create two environments named `dev_test` and `prod_test`. Each environment contains one instance.
4+
We will create two environments named `dev` and `prod`. Each environment contains one instance.
55

66
Before you start, please make sure you have running your Bytebase service and have created the service account, and replace the provider initial variables. Check the [README](../README.md) for details.
77

examples/setup/main.tf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "0.0.6-beta"
4+
version = "0.0.6-beta.3"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}
@@ -18,14 +18,14 @@ provider "bytebase" {
1818
}
1919

2020
locals {
21-
environment_name_dev = "dev_test"
22-
environment_name_prod = "prod_test"
21+
environment_name_dev = "dev"
22+
environment_name_prod = "prod"
2323
instance_name_dev = "dev_instance_test"
2424
instance_name_prod = "prod_instance_test"
2525
role_name_dev = "dev_role_test"
2626
}
2727

28-
# Create a new environment named "dev_test"
28+
# Create a new environment named "dev"
2929
resource "bytebase_environment" "dev" {
3030
name = local.environment_name_dev
3131
order = 0
@@ -34,7 +34,7 @@ resource "bytebase_environment" "dev" {
3434
backup_plan_policy = "UNSET"
3535
}
3636

37-
# Create another environment named "prod_test"
37+
# Create another environment named "prod"
3838
resource "bytebase_environment" "prod" {
3939
name = local.environment_name_prod
4040
order = 1

provider/resource_environment.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,40 @@ func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, m in
9898
return diag.Errorf("Invalid pipeline approval policy: %v", err.Error())
9999
}
100100

101-
create := &api.EnvironmentUpsert{
101+
upsert := &api.EnvironmentUpsert{
102102
Name: &name,
103103
Order: &order,
104104
EnvironmentTierPolicy: convertEnvironmentTierPolicy(d),
105105
PipelineApprovalPolicy: pipelineApprovalPolicy,
106106
BackupPlanPolicy: convertBackupPlanPolicy(d),
107107
}
108108

109-
env, err := c.CreateEnvironment(ctx, create)
109+
envList, err := c.ListEnvironment(ctx, &api.EnvironmentFind{
110+
Name: name,
111+
})
110112
if err != nil {
111113
return diag.FromErr(err)
112114
}
115+
if len(envList) > 1 {
116+
return diag.Errorf("found %v environments with same name %s", len(envList), name)
117+
}
118+
119+
if len(envList) == 0 {
120+
env, err := c.CreateEnvironment(ctx, upsert)
121+
if err != nil {
122+
return diag.FromErr(err)
123+
}
113124

114-
d.SetId(strconv.Itoa(env.ID))
125+
d.SetId(strconv.Itoa(env.ID))
126+
} else {
127+
existed := envList[0]
128+
env, err := c.UpdateEnvironment(ctx, existed.ID, upsert)
129+
if err != nil {
130+
return diag.FromErr(err)
131+
}
132+
133+
d.SetId(strconv.Itoa(env.ID))
134+
}
115135

116136
return resourceEnvironmentRead(ctx, d, m)
117137
}

0 commit comments

Comments
 (0)