1
+ name : Avi - 2 Site GSLB Deployment
2
+
3
+ # Controls when the workflow will run
4
+ on :
5
+ # Triggers the workflow on push or pull request events but only for the main branch
6
+ push :
7
+ branches : [ main ]
8
+ pull_request :
9
+ branches : [ main ]
10
+ release :
11
+ types : [released]
12
+
13
+
14
+ # Allows you to run this workflow manually from the Actions tab
15
+ workflow_dispatch :
16
+
17
+ # These scenarios will be ran in parallel
18
+ jobs :
19
+ # This workflow contains multiple jobs to test various scenarios
20
+ dual-site :
21
+ name : gslb (HA_${{ matrix.controller_ha }})
22
+ runs-on : ubuntu-latest
23
+ env :
24
+ site_type : " gslb"
25
+ AWS_SECRET_ACCESS_KEY : ${{ secrets.TF_VAR_AWS_SECRET_KEY }}
26
+ AWS_ACCESS_KEY_ID : ${{ secrets.TF_VAR_AWS_ACCESS_KEY }}
27
+ TF_VAR_aws_secret_key : ${{ secrets.TF_VAR_AWS_SECRET_KEY }}
28
+ TF_VAR_aws_access_key : ${{ secrets.TF_VAR_AWS_ACCESS_KEY }}
29
+ TF_VAR_create_iam : ${{ matrix.create_iam }}
30
+ TF_VAR_create_networking : ${{ matrix.create_networking }}
31
+ TF_VAR_custom_vpc_id_east : ${{ secrets.TF_VAR_CUSTOM_VPC_ID_EAST }}
32
+ TF_VAR_custom_subnet_ids_east : ${{ secrets.TF_VAR_CUSTOM_SUBNET_IDS_EAST }}
33
+ TF_VAR_avi_cidr_block_east : " 10.252.0.0/16"
34
+ TF_VAR_dns_vs_settings_east : ${{ secrets.TF_VAR_DNS_VS_SETTINGS_EAST }}
35
+ TF_VAR_custom_vpc_id_west : ${{ secrets.TF_VAR_CUSTOM_VPC_ID_WEST }}
36
+ TF_VAR_custom_subnet_ids_west : ${{ secrets.TF_VAR_CUSTOM_SUBNET_IDS_WEST }}
37
+ TF_VAR_avi_cidr_block_west : " 10.254.0.0/16"
38
+ TF_VAR_dns_vs_settings_west : ${{ secrets.TF_VAR_DNS_VS_SETTINGS_WEST }}
39
+ TF_VAR_controller_ha : ${{ matrix.controller_ha }}
40
+ TF_VAR_controller_password : ${{ secrets.TF_VAR_CONTROLLER_PASSWORD }}
41
+ TF_VAR_controller_public_address : ${{ matrix.controller_public_address }}
42
+ TF_VAR_private_key_path : " /home/runner/pkey"
43
+ TF_VAR_key_pair_name : ${{ secrets.TF_VAR_KEY_PAIR_NAME }}
44
+ TF_VAR_avi_version : ${{ matrix.avi_version }}
45
+ avi_version : ${{ matrix.avi_version }}
46
+ defaults :
47
+ run :
48
+ shell : bash
49
+ working-directory : test
50
+ strategy :
51
+ matrix :
52
+ include :
53
+ - avi_version : " 20.1.6"
54
+ create_networking : false
55
+ controller_ha : false
56
+ controller_public_address : true
57
+ create_iam : false
58
+ - avi_version : " 20.1.6"
59
+ create_networking : false
60
+ controller_ha : true
61
+ controller_public_address : true
62
+ create_iam : false
63
+ - avi_version : " 21.1.1"
64
+ create_networking : false
65
+ controller_ha : false
66
+ controller_public_address : true
67
+ create_iam : false
68
+ - avi_version : " 21.1.1"
69
+ create_networking : false
70
+ controller_ha : true
71
+ controller_public_address : true
72
+ create_iam : false
73
+ fail-fast : false
74
+
75
+
76
+ # Steps represent a sequence of tasks that will be executed as part of the job
77
+ steps :
78
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
79
+ - uses : actions/checkout@v2
80
+
81
+ - name : Setup Go environment
82
+
83
+ with :
84
+ go-version : 1.16
85
+
86
+ - name : Setup Env
87
+ run : |
88
+ go mod download
89
+ pipx inject ansible-core avisdk requests --include-deps --include-apps
90
+ pipx list
91
+ ansible-galaxy collection install vmware.alb
92
+ echo "$PKEY" > pkey_enc
93
+ cat pkey_enc | base64 -d > /home/runner/pkey
94
+ chmod 600 /home/runner/pkey
95
+ env :
96
+ PKEY : ${{ secrets.PKEY }}
97
+
98
+ - name : Create Infrastructure and run Go Tests
99
+ run : go test -v create_infra_test.go -tags=e2e -timeout 120m
100
+
101
+ - name : Run Ansible Playbook to verify Avi Controller Status
102
+ run : |
103
+ export name_prefix_east=$(cat ../examples/gslb/.test-data/TF_VAR_name_prefix_east.json)
104
+ export name_prefix_west=$(cat ../examples/gslb/.test-data/TF_VAR_name_prefix_west.json)
105
+ export controller_west_ip=$(terraform -chdir="../examples/gslb" output -no-color -json | jq .controllers_west.value[0].public_ip_address)
106
+ export controller_east_ip=$(terraform -chdir="../examples/gslb" output -no-color -json | jq .controllers_east.value[0].public_ip_address)
107
+ ansible-playbook ansible_test.yml -e password=$TF_VAR_controller_password -e controller_ip=$controller_east_ip -e avi_version=$avi_version -e name_prefix=$name_prefix_east -e controller_ha=$TF_VAR_controller_ha
108
+ ansible-playbook ansible_test.yml -e password=$TF_VAR_controller_password -e controller_ip=$controller_west_ip -e verify_gslb=true -e avi_version=$avi_version -e name_prefix=$name_prefix_west -e controller_ha=$TF_VAR_controller_ha
109
+
110
+ - name : Cleanup Avi Created Infra
111
+ if : ${{ always() }}
112
+ run : |
113
+ export controller_west_ip=$(terraform -chdir="../examples/gslb" output -no-color -json | jq .controllers_west.value[0].public_ip_address)
114
+ export controller_east_ip=$(terraform -chdir="../examples/gslb" output -no-color -json | jq .controllers_east.value[0].public_ip_address)
115
+ ansible-playbook ansible_avi_cleanup.yml -e password=$TF_VAR_controller_password -e controller_ip=$controller_east_ip -e avi_version=$TF_VAR_avi_version
116
+ ansible-playbook ansible_avi_cleanup.yml -e password=$TF_VAR_controller_password -e controller_ip=$controller_west_ip -e avi_version=$TF_VAR_avi_version
117
+
118
+
119
+ - name : Run Terraform Destroy
120
+ if : ${{ always() }}
121
+ run : |
122
+ go test -v destroy_infra_test.go -timeout 30m
0 commit comments