Skip to content

Commit

Permalink
Improve rename.sh and add to README.md. (#205)
Browse files Browse the repository at this point in the history
  • Loading branch information
xingao267 committed Apr 22, 2020
1 parent e707a60 commit d113518
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 35 deletions.
4 changes: 4 additions & 0 deletions Terraform/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ To see what resources each deployment provisions, check out the comments in each
$ ROOT=$PWD
```

If you would like to deploy the same infrastructure based on the Terraform
configs in this directory but in a different organization with different
resource prefix or namings, use the `rename.sh` script.

1. The bootstrap config must be deployed first in order to create the `devops`
project which will host your Terraform state and CICD pipelines.

Expand Down
90 changes: 55 additions & 35 deletions Terraform/rename.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,67 +3,87 @@
# Disclaimer: This is originally for my own debugging and testing purposes. Use with caution.

export PWD=$(pwd)
export OUTPUT_PATH=/usr/local/google/home/xingao/gitrepos/demo

# Phase 1
# Use Engine to generate baseline configs. Need to git clone the dpt repo first, and copy the
# engine.tmpl.yaml to engine/samples/demo.yaml.
cd ~/gitrepos/src/github.com/GoogleCloudPlatform/healthcare/deploy && \
git checkout demo && \
rm -rf ${OUTPUT_PATH}/* && \
bazel run engine:main -- --config_path=engine/samples/demo.yaml --output_path=${OUTPUT_PATH}

cp -r /usr/local/google/home/xingao/gitrepos/fda-mystudies/Terraform/secrets ${OUTPUT_PATH}/

cd ${OUTPUT_PATH}
export INPUT_TF_BASE=/usr/local/google/home/xingao/gitrepos/fda-mystudies/Terraform
export OUTPUT_TF_BASE=/usr/local/google/home/xingao/gitrepos/demo

export OLD_STATE="heroes-hat-dev-terraform-state-08679"
export NEW_STATE="dpt-demo-042110-terraform-state"
export NEW_STATE="dpt-demo-terraform-state"
export OLD_PREFIX="heroes-hat-dev"
export NEW_PREFIX="dpt-demo-042110"
export NEW_PREFIX="dpt-demo"
export OLD_GKE_PREFIX="heroes-hat"
export NEW_GKE_PREFIX="dpt-demo-042110"
export NEW_GKE_PREFIX="dpt-demo"
export OLD_FOLDER="fda-my-studies"
export NEW_FOLDER="dpt-demo-042110"
export SRC_BASE=/usr/local/google/home/xingao/gitrepos/fda-mystudies/Terraform/org/folder.${OLD_FOLDER}/project.${OLD_PREFIX}
export DST_BASE=${OUTPUT_PATH}/org/folder.${NEW_FOLDER}/project.${NEW_PREFIX}
export NEW_FOLDER="dpt-demo"

export OLD_ORG_ID="707577601068"
export NEW_ORG_ID="18510592047"
export OLD_BILLING_ACCOUNT="01EA90-3519E1-89CB1F"
export NEW_BILLING_ACCOUNT="01B494-31B256-17B2A6"
export OLD_ADMIN_GROUP="rocketturtle-gcp-admin@rocketturtle.net"
export NEW_ADMIN_GROUP="dpt-dev@hcls.joonix.net"

export SRC_PROJ_BASE=${INPUT_TF_BASE}/org/folder.${OLD_FOLDER}/project.${OLD_PREFIX}
export DST_PROJ_BASE=${OUTPUT_TF_BASE}/org/folder.${NEW_FOLDER}/project.${NEW_PREFIX}

# Cleanup output directory.
rm -rf ${OUTPUT_TF_BASE}/*

# Phase 1
for d in bootstrap secrets cicd
do
cp -r ${INPUT_TF_BASE}/$d ${OUTPUT_TF_BASE}/
done

mkdir -p ${OUTPUT_TF_BASE}/org
cp -r ${INPUT_TF_BASE}/org/README.md ${OUTPUT_TF_BASE}/org/
cp -r ${INPUT_TF_BASE}/org/terragrunt.hcl ${OUTPUT_TF_BASE}/org/
cp -r ${INPUT_TF_BASE}/org/audit ${OUTPUT_TF_BASE}/org/
cp -r ${INPUT_TF_BASE}/org/org_policies ${OUTPUT_TF_BASE}/org/
cp -r ${INPUT_TF_BASE}/org/project.${OLD_PREFIX}-audit ${OUTPUT_TF_BASE}/org/project.${NEW_PREFIX}-audit

mkdir -p ${OUTPUT_TF_BASE}/org/folder.${NEW_FOLDER}
cp -r ${INPUT_TF_BASE}/org/folder.${OLD_FOLDER}/folder ${OUTPUT_TF_BASE}/org/folder.${NEW_FOLDER}/

for d in networks data apps resp-firebase
do
mkdir -p ${DST_PROJ_BASE}-$d
cp -r ${SRC_PROJ_BASE}-$d/project ${DST_PROJ_BASE}-$d/
done

# Phase 2
cp -r ${SRC_BASE}-networks/networks ${DST_BASE}-networks/
cp -r ${SRC_BASE}-data/data ${DST_BASE}-data/
cp -r ${SRC_BASE}-resp-firebase/firebase ${DST_BASE}-resp-firebase/
cp -r ${SRC_PROJ_BASE}-networks/networks ${DST_PROJ_BASE}-networks/
cp -r ${SRC_PROJ_BASE}-data/data ${DST_PROJ_BASE}-data/
cp -r ${SRC_PROJ_BASE}-resp-firebase/firebase ${DST_PROJ_BASE}-resp-firebase/

# Phase 3
cp -r ${SRC_BASE}-apps/apps ${DST_BASE}-apps/
cp -r ${SRC_PROJ_BASE}-apps/apps ${DST_PROJ_BASE}-apps/

# Phase 4
cp -r ${SRC_BASE}-apps/kubernetes ${DST_BASE}-apps/
cp -r ${SRC_BASE}-data/iam ${DST_BASE}-data/
cp -r ${SRC_PROJ_BASE}-apps/kubernetes ${DST_PROJ_BASE}-apps/
cp -r ${SRC_PROJ_BASE}-data/iam ${DST_PROJ_BASE}-data/

cd ${OUTPUT_TF_BASE}

# Globally unique resources or resources that cannot reuse the same name right after destroying.
find . -type f -name *.tfvars -o -name *.tf -o -name *.hcl | xargs sed -i "s|${OLD_STATE}|${NEW_STATE}|"
find . -type f -name *.tfvars -o -name *.tf -o -name *.hcl | xargs sed -i "s|${OLD_PREFIX}|${NEW_PREFIX}|"
find . -type f -name *.tfvars -o -name *.tf -o -name *.hcl | xargs sed -i "s|${OLD_GKE_PREFIX}|${NEW_GKE_PREFIX}|"

export NEW_ORG_ID=
export NEW_BILLING_ACCOUNT=
export NEW_ADMIN_GROUP=

# Org info
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|707577601068|${NEW_ORG_ID}|"
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|01EA90-3519E1-89CB1F|${NEW_BILLING_ACCOUNT}|"
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|${OLD_ORG_ID}|${NEW_ORG_ID}|"
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|${OLD_BILLING_ACCOUNT}|${NEW_BILLING_ACCOUNT}|"

# Org group
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|rocketturtle-gcp-admin@rocketturtle.net|${NEW_ADMIN_GROUP}|"
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|${OLD_ADMIN_GROUP}|${NEW_ADMIN_GROUP}|"

# Folder
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i "s|${OLD_FOLDER}|${NEW_FOLDER}|"

# Repo
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i 's|"GoogleCloudPlatform"|"xingao267"|'
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i 's|"fda-mystudies"|"demo"|'
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i 's|"terraform"|"master"|'
find . -type f -name *.tfvars -o -name *.tf | xargs sed -i 's|"early-access"|"master"|'

# Only needed if doing it again in the same org.
# find . -type f -name *.tfvars -o -name *.tf -o -name *.hcl | xargs sed -i "s|storage-org-sink|${NEW_PREFIX}-storage-org-sink|"
# find . -type f -name *.tfvars -o -name *.tf -o -name *.hcl | xargs sed -i "s|bigquery-org-sink|${NEW_PREFIX}-bigquery-org-sink|"

cd ${PWD}

0 comments on commit d113518

Please sign in to comment.