forked from rancher/terraform-rancher2-aws
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsplitrole_test.go
More file actions
155 lines (143 loc) · 4.96 KB
/
splitrole_test.go
File metadata and controls
155 lines (143 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package downstream
import (
"os"
"path/filepath"
"strings"
"testing"
aws "github.com/gruntwork-io/terratest/modules/aws"
g "github.com/gruntwork-io/terratest/modules/git"
"github.com/gruntwork-io/terratest/modules/ssh"
"github.com/gruntwork-io/terratest/modules/terraform"
util "github.com/rancher/terraform-rancher2-aws/test/tests"
)
func TestDownstreamSplitrole(t *testing.T) {
t.Parallel()
var err error
var err2 error
id := util.GetId()
region := util.GetRegion()
accessKey := util.GetAwsAccessKey()
secretKey := util.GetAwsSecretKey()
sessionToken := util.GetAwsSessionToken()
directory := "downstream"
owner := "terraform-ci@suse.com"
acme_server_url := util.SetAcmeServer(t)
repoRoot, err := filepath.Abs(g.GetRepoRoot(t))
if err != nil {
t.Fatalf("Error getting git root directory: %v", err)
}
exampleDir := filepath.Join(repoRoot, "examples", directory)
testDir := filepath.Join(repoRoot, "test/tests/data", id)
pluginsDir := filepath.Join(testDir, "plugins")
err = util.CreateTestDirectories(t, id)
if err != nil {
err2 = os.RemoveAll(testDir)
if err2 != nil {
t.Logf("Error removing data directories: %s", err2)
}
t.Fatalf("Error creating test data directories: %s", err)
}
keyPair, err := util.CreateKeypair(t, region, owner, id)
if err != nil {
err2 = os.RemoveAll(testDir)
if err2 != nil {
t.Logf("Error removing data directories: %s", err2)
}
t.Fatalf("Error creating test key pair: %s", err)
}
keyPairObj := keyPair.KeyPair
privateKey := keyPairObj.PrivateKey
publicKey := strings.TrimSuffix(keyPairObj.PublicKey, "\n")
keyPairName := keyPair.Name
err = os.WriteFile(testDir+"/id_rsa", []byte(privateKey), 0600)
if err != nil {
err2 = os.RemoveAll(testDir)
if err2 != nil {
t.Logf("Error removing data directories: %s", err2)
}
t.Fatalf("Error creating test key pair: %s", err)
}
sshAgent := ssh.SshAgentWithKeyPair(t, keyPairObj)
t.Logf("Key %s created and added to agent", keyPairName)
// use oldest RKE2, remember it releases much more than Rancher
_, _, rke2Version, err := util.GetRke2Releases()
if err != nil {
err2 = os.RemoveAll(testDir)
if err2 != nil {
t.Logf("Error removing data directories: %s", err2)
}
aws.DeleteEC2KeyPair(t, keyPair)
sshAgent.Stop()
t.Fatalf("Error getting Rke2 release version: %s", err)
}
rancherVersion := os.Getenv("RANCHER_VERSION")
if rancherVersion == "" {
// use stable version if not specified
// using stable prevents problems where the Rancher provider hasn't released to fit the latest Rancher
_, rancherVersion, _, err = util.GetRancherReleases()
}
if err != nil {
err2 = os.RemoveAll(testDir)
if err2 != nil {
t.Logf("Error removing data directories: %s", err2)
}
aws.DeleteEC2KeyPair(t, keyPair)
sshAgent.Stop()
t.Fatalf("Error getting Rancher release version: %s", err)
}
terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
TerraformDir: exampleDir,
// Variables to pass to our Terraform code using -var options
Vars: map[string]any{
"identifier": id,
"owner": owner,
"key_name": keyPairName,
"key": publicKey,
"zone": os.Getenv("ZONE"),
"rke2_version": rke2Version,
"rancher_version": rancherVersion,
"file_path": testDir,
"aws_access_key_id": accessKey,
"aws_secret_access_key": secretKey,
"aws_session_token": sessionToken,
"aws_region": region,
"acme_server_url": acme_server_url,
"downstream_node_config": "split-role-node-config",
},
// Environment variables to set when running Terraform
EnvVars: map[string]string{
"AWS_DEFAULT_REGION": region,
"AWS_REGION": region,
"TF_DATA_DIR": testDir,
"TF_PLUGIN_CACHE_DIR": pluginsDir,
"TF_IN_AUTOMATION": "1",
"KUBECONFIG": testDir + "/kubeconfig",
"KUBE_CONFIG_PATH": testDir + "/kubeconfig",
"TF_CLI_ARGS_plan": "-no-color -state=" + testDir + "/tfstate",
"TF_CLI_ARGS_apply": "-no-color -state=" + testDir + "/tfstate",
"TF_CLI_ARGS_destroy": "-no-color -state=" + testDir + "/tfstate",
"TF_CLI_ARGS_output": "-no-color -state=" + testDir + "/tfstate",
},
RetryableTerraformErrors: util.GetRetryableTerraformErrors(),
NoColor: true,
SshAgent: sshAgent,
Upgrade: true,
})
var tfOptions []*terraform.Options
tfOptions = append(tfOptions, terraformOptions)
_, err = terraform.InitAndApplyE(t, terraformOptions)
if err != nil {
t.Log("Test failed, tearing down...")
util.GetErrorLogs(t, testDir+"/kubeconfig")
util.Teardown(t, testDir, exampleDir, tfOptions, keyPair, sshAgent)
t.Fatalf("Error creating cluster: %s", err)
}
util.CheckReady(t, testDir+"/kubeconfig")
util.CheckRunning(t, testDir+"/kubeconfig")
if t.Failed() {
t.Log("Test failed...")
} else {
t.Log("Test passed...")
}
util.Teardown(t, testDir, exampleDir, tfOptions, keyPair, sshAgent)
}