Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve rename.sh and add to README.md. #205

Merged
merged 1 commit into from
Apr 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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}