Skip to content

Commit 865594e

Browse files
Manage User Environment Variables (#58)
* Add provider parameter skip_envs_managed_by_tsuru * Bump version to add skip_envs_managed_by_tsuru option * Fix style * Change parameter name to full_management_of_user_environment_variables * Improve filter logic to read ManagedBy terraform or empty * Simplify full management envs mode logic * ManagedBy logic Co-authored-by: Wilson Júnior <wilsonpjunior@gmail.com> * Rename parameter Env --------- Co-authored-by: Wilson Júnior <wilsonpjunior@gmail.com>
1 parent d6d2c22 commit 865594e

File tree

5 files changed

+30
-17
lines changed

5 files changed

+30
-17
lines changed

GNUmakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ HOSTNAME=registry.terraform.io
22
NAMESPACE=tsuru
33
NAME=tsuru
44
BINARY=terraform-provider-${NAME}
5-
VERSION=2.12.0
5+
VERSION=2.13.0
66

77
UNAME_S := $(shell uname -s)
88
UNAME_P := $(shell uname -p)

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ description: |-
1717

1818
### Optional
1919

20+
- `full_management_of_user_environment_variables` (Boolean) Use `true` to manage all user environment variables. (Default: false)
2021
- `host` (String) Target to tsuru API
2122
- `skip_cert_verification` (Boolean) Disable certificate verification
2223
- `token` (String) Token to authenticate on tsuru API (optional)

internal/provider/provider.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ func Provider() *schema.Provider {
4444
Optional: true,
4545
DefaultFunc: schema.EnvDefaultFunc("TSURU_SKIP_CERT_VERIFICATION", nil),
4646
},
47+
"full_management_of_user_environment_variables": {
48+
Type: schema.TypeBool,
49+
Description: "Use `true` to manage all user environment variables. (Default: false)",
50+
Default: false,
51+
Optional: true,
52+
DefaultFunc: schema.EnvDefaultFunc("TSURU_FULL_MANAGEMENT_OF_USER_ENVIRONMENT_VARIABLES", nil),
53+
},
4754
},
4855
ResourcesMap: map[string]*schema.Resource{
4956
"tsuru_service_instance_bind": resourceTsuruServiceInstanceBind(),
@@ -85,9 +92,10 @@ func Provider() *schema.Provider {
8592
}
8693

8794
type tsuruProvider struct {
88-
Host string
89-
Token string
90-
TsuruClient *tsuru.APIClient
95+
Host string
96+
Token string
97+
TsuruClient *tsuru.APIClient
98+
FullManagementEnvs bool
9199
}
92100

93101
func providerConfigure(ctx context.Context, d *schema.ResourceData, terraformVersion string) (interface{}, diag.Diagnostics) {
@@ -134,10 +142,13 @@ func providerConfigure(ctx context.Context, d *schema.ResourceData, terraformVer
134142
return nil, diag.FromErr(err)
135143
}
136144

145+
fullManagementEnvs := d.Get("full_management_of_user_environment_variables").(bool)
146+
137147
return &tsuruProvider{
138-
Host: host,
139-
Token: token,
140-
TsuruClient: client,
148+
Host: host,
149+
Token: token,
150+
TsuruClient: client,
151+
FullManagementEnvs: fullManagementEnvs,
141152
}, nil
142153
}
143154

internal/provider/resource_tsuru_app_env.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ func resourceTsuruApplicationEnvironmentRead(ctx context.Context, d *schema.Reso
125125
}
126126
return diag.Errorf("unable to read envs for app %s: %v", app, err)
127127
}
128-
129-
envs = filterUnmanagedTerraformEnvs(envs)
128+
129+
envs = filterUnmanagedTerraformEnvs(envs, provider.FullManagementEnvs)
130130

131131
envVars := map[string]string{}
132132
sensitiveEnvVars := map[string]string{}
@@ -237,18 +237,19 @@ func envsFromResource(envvars interface{}, private bool) []tsuru_client.Env {
237237
return envs
238238
}
239239

240-
func filterUnmanagedTerraformEnvs(envs []tsuru.EnvVar) []tsuru.EnvVar {
240+
func filterUnmanagedTerraformEnvs(envs []tsuru.EnvVar, fullManagementEnvs bool) []tsuru.EnvVar {
241241
n := 0
242242
for _, env := range envs {
243-
if isReservedEnv(env.Name) {
244-
continue
245-
}
246-
if env.ManagedBy != "terraform" {
243+
if isReservedEnv(env.Name) { //reserved Envs, skip
247244
continue
248245
}
249-
envs[n] = env
250-
n++
246+
247+
if env.ManagedBy == "terraform" || (fullManagementEnvs && env.ManagedBy == "") {
248+
envs[n] = env
249+
n++
250+
}
251251
}
252+
252253
envs = envs[:n]
253254
return envs
254255
}

internal/provider/resource_tsuru_job_env.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func resourceTsuruJobEnvironmentRead(ctx context.Context, d *schema.ResourceData
109109
return diag.Errorf("unable to read envs for job %s: %v", job, err)
110110
}
111111

112-
envs = filterUnmanagedTerraformEnvs(envs)
112+
envs = filterUnmanagedTerraformEnvs(envs, provider.FullManagementEnvs)
113113

114114
envVars := map[string]string{}
115115
sensitiveEnvVars := map[string]string{}

0 commit comments

Comments
 (0)