Skip to content

Commit 9fe58c6

Browse files
committed
ci: support prepare test
1 parent a1567e9 commit 9fe58c6

File tree

7 files changed

+151
-9
lines changed

7 files changed

+151
-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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 创建 VPC
2+
resource "alicloud_vpc" "default" {
3+
}
4+
5+
output "vpc_id" {
6+
value = alicloud_vpc.default.id
7+
}

scripts/terraform-test.sh

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

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

67
f=$(echo $f | xargs echo -n)
78

8-
exitCode=0
9+
# set up prerequisite resources
10+
varfile=""
11+
if [ -d "$f/prepare" ]; then
12+
echo ""
13+
echo "====> Found prepare directory. Creating prerequisite resources in $f/prepare"
14+
terraform -chdir=$f/prepare init -upgrade >/dev/null
15+
if [[ $? -ne 0 ]]; then
16+
success=false
17+
exitCode=1
18+
echo -e "\033[31m[ERROR]\033[0m: running terraform init in prepare directory failed."
19+
bash scripts/generate-test-record.sh $f "Prepare Init: running terraform init in prepare directory failed."
20+
else
21+
terraform -chdir=$f/prepare apply -auto-approve >/dev/null
22+
if [[ $? -ne 0 ]]; then
23+
success=false
24+
exitCode=3
25+
echo -e "\033[31m[ERROR]\033[0m: running terraform apply in prepare directory failed."
26+
bash scripts/generate-test-record.sh $f "Prepare Apply: running terraform apply in prepare directory failed."
27+
else
28+
echo -e "\033[32m - prepare apply: success\033[0m"
29+
terraform -chdir=$f/prepare output > $f/prepare/terraform.tfvars
30+
varfile="-var-file=./prepare/terraform.tfvars"
31+
fi
32+
fi
33+
fi
34+
if [[ $success == "false" ]]; then
35+
rm -rf $f/prepare/.terraform
36+
rm -rf $f/prepare/.terraform.lock.hcl
37+
exit $exitCode
38+
fi
39+
40+
941
echo ""
1042
echo "====> Terraform testing in" $f
1143
terraform -chdir=$f init -upgrade >/dev/null
@@ -17,7 +49,7 @@ if [[ $? -ne 0 ]]; then
1749
else
1850
echo ""
1951
echo " ----> Plan Testing"
20-
terraform -chdir=$f plan >/dev/null
52+
terraform -chdir=$f plan $varfile >/dev/null
2153
if [[ $? -ne 0 ]]; then
2254
success=false
2355
exitCode=2
@@ -27,7 +59,7 @@ else
2759
echo -e "\033[32m - plan check: success\033[0m"
2860
echo ""
2961
echo " ----> Apply Testing"
30-
terraform -chdir=$f apply -auto-approve >/dev/null
62+
terraform -chdir=$f apply -auto-approve $varfile >/dev/null
3163
if [[ $? -ne 0 ]]; then
3264
success=false
3365
exitCode=3
@@ -37,7 +69,7 @@ else
3769
echo -e "\033[32m - apply check: success\033[0m"
3870
echo ""
3971
echo -e " ----> Apply Diff Checking\n"
40-
terraform -chdir=$f plan -detailed-exitcode
72+
terraform -chdir=$f plan $varfile -detailed-exitcode
4173
if [[ $? -ne 0 ]]; then
4274
success=false
4375
exitCode=4
@@ -53,7 +85,7 @@ else
5385
fi
5486
echo ""
5587
echo " ----> Destroying"
56-
terraform -chdir=$f destroy -auto-approve >/dev/null
88+
terraform -chdir=$f destroy $varfile -auto-approve >/dev/null
5789
if [[ $? -ne 0 ]]; then
5890
success=false
5991
if [[ $exitCode -eq 0 ]]; then
@@ -66,14 +98,31 @@ else
6698
fi
6799
fi
68100

69-
if [[ $success == "true" ]]; then
70-
bash scripts/generate-test-record.sh $f
71-
fi
72-
73101
rm -rf $f/.terraform
74102
rm -rf $f/.terraform.lock.hcl
75103
fi
76104

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

79128
exit $exitCode

0 commit comments

Comments
 (0)