Skip to content

Commit 634dd1a

Browse files
committed
ci: support prepare test
1 parent a1567e9 commit 634dd1a

File tree

7 files changed

+158
-9
lines changed

7 files changed

+158
-9
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ TestRecordImport
1818
TestRecordTfer
1919
terraform.tfstate
2020
terraform.tfstate.backup
21+
**/terraform.tfvars
2122
quickstarts/**/header.md
2223
quickstarts/**/footer.md
2324
quickstarts/**/plan.tftest.hcl
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# 指定VPC所在地域
2+
provider "alicloud" {
3+
region = "cn-hangzhou"
4+
}
5+
6+
# 指定VPC的ID
7+
variable "vpc_id" {
8+
default = "vpc-xxx" # 修改为VPC的实际ID
9+
}
10+
11+
# 指定对方账号的UID
12+
variable "cen_owner_uid" {
13+
default = "18xxx" # 修改为对方账号的UID
14+
}
15+
16+
# 指定对方账号中CEN的ID
17+
variable "cen_id" {
18+
default = "cen-xxx" # 修改为对方账号中CEN的ID
19+
}
20+
21+
# 将VPC授权给对方账号中的CEN
22+
resource "alicloud_cen_instance_grant" "child_account" {
23+
child_instance_id = var.vpc_id
24+
cen_owner_id = var.cen_owner_uid
25+
cen_id = var.cen_id
26+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
# 创建 VPC
3+
provider "alicloud" {
4+
region = "cn-hangzhou"
5+
}
6+
7+
resource "alicloud_vpc" "default" {
8+
}
9+
10+
output "vpc_id" {
11+
value = alicloud_vpc.default.id
12+
}
13+
14+
# 创建 CEN
15+
variable "another_uid" {
16+
default = "1344xxxx"
17+
18+
}
19+
provider "alicloud" {
20+
assume_role {
21+
role_arn = "acs:ram::${var.another_uid}:role/terraform-example-assume-role"
22+
}
23+
alias = "assumerole"
24+
}
25+
26+
resource "alicloud_cen_instance" "default" {
27+
provider = alicloud.assumerole
28+
cen_instance_name = "tf_example"
29+
}
30+
31+
output "cen_owner_uid" {
32+
value = var.another_uid
33+
}
34+
35+
output "cen_id" {
36+
value = alicloud_cen_instance.default.id
37+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
required_providers {
3+
alicloud = {
4+
source = "aliyun/alicloud"
5+
}
6+
}
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# 指定创建VPC的地域
2+
provider "alicloud" {
3+
region = "cn-hangzhou"
4+
}
5+
6+
# 指定VPC的ID
7+
variable "vpc_id" {
8+
default = "vpc-xxx" # 修改为VPC的实际ID
9+
}
10+
11+
# 在VPC中创建附加网段
12+
resource "alicloud_vpc_ipv4_cidr_block" "test_secondary_cidr_block" {
13+
vpc_id = var.vpc_id
14+
secondary_cidr_block = "192.168.0.0/16" # 指定附加网段
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 指定创建VPC的地域
2+
provider "alicloud" {
3+
region = "cn-hangzhou"
4+
}
5+
6+
# 创建 VPC
7+
resource "alicloud_vpc" "default" {
8+
}
9+
10+
output "vpc_id" {
11+
value = alicloud_vpc.default.id
12+
}

scripts/terraform-test.sh

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,44 @@
22

33
f=$1
44
success=true
5+
exitCode=0
56

67
f=$(echo $f | xargs echo -n)
8+
f="${f%/}"
9+
10+
# set up prerequisite resources
11+
varfile=""
12+
if [ -d "$f/prepare" ]; then
13+
echo ""
14+
echo "====> Found prepare directory. Creating prerequisite resources in $f/prepare"
15+
terraform -chdir=$f/prepare init -upgrade >/dev/null
16+
if [[ $? -ne 0 ]]; then
17+
success=false
18+
exitCode=1
19+
echo -e "\033[31m[ERROR]\033[0m: running terraform init in prepare directory failed."
20+
bash scripts/generate-test-record.sh $f "Prepare Init: running terraform init in prepare directory failed."
21+
else
22+
terraform -chdir=$f/prepare apply -auto-approve >/dev/null
23+
if [[ $? -ne 0 ]]; then
24+
success=false
25+
exitCode=3
26+
echo -e "\033[31m[ERROR]\033[0m: running terraform apply in prepare directory failed."
27+
bash scripts/generate-test-record.sh $f "Prepare Apply: running terraform apply in prepare directory failed."
28+
terraform -chdir=$f/prepare destroy -auto-approve >/dev/null
29+
else
30+
echo -e "\033[32m - prepare apply: success\033[0m"
31+
terraform -chdir=$f/prepare output > $f/prepare/terraform.tfvars
32+
varfile="-var-file=./prepare/terraform.tfvars"
33+
fi
34+
fi
35+
fi
36+
if [[ $success == "false" ]]; then
37+
rm -rf $f/prepare/.terraform
38+
rm -rf $f/prepare/.terraform.lock.hcl
39+
exit $exitCode
40+
fi
41+
742

8-
exitCode=0
943
echo ""
1044
echo "====> Terraform testing in" $f
1145
terraform -chdir=$f init -upgrade >/dev/null
@@ -17,7 +51,7 @@ if [[ $? -ne 0 ]]; then
1751
else
1852
echo ""
1953
echo " ----> Plan Testing"
20-
terraform -chdir=$f plan >/dev/null
54+
terraform -chdir=$f plan $varfile >/dev/null
2155
if [[ $? -ne 0 ]]; then
2256
success=false
2357
exitCode=2
@@ -27,7 +61,7 @@ else
2761
echo -e "\033[32m - plan check: success\033[0m"
2862
echo ""
2963
echo " ----> Apply Testing"
30-
terraform -chdir=$f apply -auto-approve >/dev/null
64+
terraform -chdir=$f apply -auto-approve $varfile >/dev/null
3165
if [[ $? -ne 0 ]]; then
3266
success=false
3367
exitCode=3
@@ -37,7 +71,7 @@ else
3771
echo -e "\033[32m - apply check: success\033[0m"
3872
echo ""
3973
echo -e " ----> Apply Diff Checking\n"
40-
terraform -chdir=$f plan -detailed-exitcode
74+
terraform -chdir=$f plan $varfile -detailed-exitcode
4175
if [[ $? -ne 0 ]]; then
4276
success=false
4377
exitCode=4
@@ -53,7 +87,7 @@ else
5387
fi
5488
echo ""
5589
echo " ----> Destroying"
56-
terraform -chdir=$f destroy -auto-approve >/dev/null
90+
terraform -chdir=$f destroy $varfile -auto-approve >/dev/null
5791
if [[ $? -ne 0 ]]; then
5892
success=false
5993
if [[ $exitCode -eq 0 ]]; then
@@ -66,14 +100,31 @@ else
66100
fi
67101
fi
68102

69-
if [[ $success == "true" ]]; then
70-
bash scripts/generate-test-record.sh $f
71-
fi
72-
73103
rm -rf $f/.terraform
74104
rm -rf $f/.terraform.lock.hcl
75105
fi
76106

107+
# destroy prerequisite resources
108+
if [ -d "$f/prepare" ]; then
109+
echo ""
110+
echo "====> Destroying prerequisite resources in $f/prepare"
111+
terraform -chdir=$f/prepare destroy -auto-approve >/dev/null
112+
if [[ $? -ne 0 ]]; then
113+
success=false
114+
exitCode=5
115+
echo -e "\033[31m[ERROR]\033[0m: running terraform destroy in prepare directory failed."
116+
bash scripts/generate-test-record.sh $f "Prepare Destroy: running terraform destroy in prepare directory failed."
117+
else
118+
echo -e "\033[32m - prepare destroy: success\033[0m"
119+
fi
120+
rm -rf $f/prepare/.terraform
121+
rm -rf $f/prepare/.terraform.lock.hcl
122+
fi
123+
124+
125+
if [[ $success == "true" ]]; then
126+
bash scripts/generate-test-record.sh $f
127+
fi
77128
echo -e "\n"
78129

79130
exit $exitCode

0 commit comments

Comments
 (0)