1+ function set_tf_variables {
2+ export TF_HTTP_USERNAME=root
3+ export TF_STATE_BASE_ADDRESS=$GITLAB_URL " /api/v4/projects/" $BOOTSTRAP_PROJECT_ID " /terraform/state"
4+ export TF_HTTP_LOCK_METHOD=POST
5+ export TF_HTTP_UNLOCK_METHOD=DELETE
6+ export TF_HTTP_RETRY_WAIT_MIN=5
7+ export TF_HTTP_PASSWORD=${GITLAB_ROOT_TOKEN}
8+
9+ export CONTROL_CENTER_CLOUD_PROVIDER=" aws"
10+ export ANSIBLE_BASE_OUTPUT_DIR=" ./"
11+ export PRIVATE_REPO_USER=nullvalue
12+ export PRIVATE_REPO_TOKEN=nullvalue
13+ export PRIVATE_REPO=example.com
14+ export IAC_TEMPLATES_TAG=$IAC_TERRAFORM_MODULES_TAG
15+
16+ set
17+
18+ }
19+
20+ function overwrite_terragrunt_file {
21+
22+ cat << 'EOT ' >terragrunt.hcl
23+ skip = true
24+ remote_state {
25+ backend = "local"
26+ config = {
27+ path = "${get_parent_terragrunt_dir()}/${path_relative_to_include()}/terraform.tfstate"
28+ }
29+
30+ generate = {
31+ path = "backend.tf"
32+ if_exists = "overwrite"
33+ }
34+ }
35+
36+ generate "required_providers" {
37+ path = "required_providers.tf"
38+
39+ if_exists = "overwrite_terragrunt"
40+
41+ contents = <<EOF
42+ terraform {
43+ required_version = "${local.common_vars.tf_version}"
44+
45+ required_providers {
46+ local = {
47+ source = "hashicorp/local"
48+ version = "${local.common_vars.local_provider_version}"
49+ }
50+ }
51+ }
52+ EOF
53+ }
54+
55+ locals {
56+ common_vars = yamldecode(file("common-vars.yaml"))
57+ env_vars = yamldecode(file("environment.yaml"))
58+ }
59+ EOT
60+
61+ }
62+
63+ if [ -n " $1 " ]
64+ then
65+ export INVENTORY_FILE_PATH=$1
66+ else
67+ echo " Please pass INVENTORY_FILE_PATH as the first parameter"
68+ echo " Usage move-state-from-gitlab.sh INVENTORY_FILE_PATH AWS_PROFILE IAC_TERRAFORM_MODULES_TAG [WORK_DIR] [BOOTSTRAP_PROJECT_ID]"
69+ exit 1
70+ fi
71+
72+
73+ if [ -n " $2 " ]
74+ then
75+ export AWS_PROFILE=$2
76+ else
77+ echo " Please pass AWS_PROFILE as the second parameter"
78+ echo " Usage move-state-from-gitlab.sh INVENTORY_FILE_PATH AWS_PROFILE IAC_TERRAFORM_MODULES_TAG [WORK_DIR] [BOOTSTRAP_PROJECT_ID]"
79+ exit 1
80+ fi
81+
82+ if [ -n " $3 " ]
83+ then
84+ export IAC_TERRAFORM_MODULES_TAG=$3
85+ else
86+ echo " Please pass AWS_PROFILE as the second parameter"
87+ echo " Usage move-state-from-gitlab.sh INVENTORY_FILE_PATH AWS_PROFILE IAC_TERRAFORM_MODULES_TAG [WORK_DIR] [BOOTSTRAP_PROJECT_ID]"
88+ exit 1
89+ fi
90+
91+ if [ -n " $4 " ]
92+ then
93+ export WORK_DIR=$4
94+ else
95+ WORK_DIR=/tmp/data/bootstrap
96+ fi
97+
98+ if [ -n " $5 " ]
99+ then
100+ export BOOTSTRAP_PROJECT_ID=$5
101+ else
102+ BOOTSTRAP_PROJECT_ID=1
103+ fi
104+
105+
106+ if [ -f $INVENTORY_FILE_PATH ]
107+ then
108+ GITLAB_HOST=$( yq eval " .gitlab.vars.server_hostname" $INVENTORY_FILE_PATH )
109+ ROOT_TOKEN=$( yq eval " .gitlab.vars.server_token" $INVENTORY_FILE_PATH )
110+ echo $GITLAB_HOST " is GITLAB HOST"
111+ if [ " ${GITLAB_HOST} " == " null" ] || [ " ${ROOT_TOKEN} " == " null" ]
112+ then
113+ echo " Could not get the GITLAB credentials value, may be wrong inventory file provided"
114+ exit 1
115+ fi
116+ GITLAB_URL=" https://" $GITLAB_HOST
117+ GITLAB_ROOT_TOKEN=$ROOT_TOKEN
118+ GITLAB_CLONE_URL=" https://oauth2:" $GITLAB_ROOT_TOKEN " @" $GITLAB_HOST " /iac/bootstrap.git"
119+ else
120+ echo " $INVENTORY_FILE_PATH does not exist"
121+ exit 1
122+ fi
123+
124+ rm -rf $WORK_DIR
125+ mkdir -p $WORK_DIR
126+
127+ BOOTSTRAP_PROJECT=$GITLAB_URL " /iac/bootstrap.git"
128+ git clone $GITLAB_CLONE_URL $WORK_DIR
129+
130+ set_tf_variables
131+ cd $WORK_DIR
132+ # init upgrade
133+ terragrunt run-all init -upgrade
134+ overwrite_terragrunt_file
135+ # migrate state
136+ terragrunt run-all init -migrate-state -force-copy
0 commit comments