diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..f06320a00e38b84747b50888b1c6520162b28462 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +**/*.md +**/Dockerfile +**/*.yml +**/*.yaml +.* diff --git a/provider/partition-gcp/bootstrap/Dockerfile b/provider/partition-gcp/bootstrap/Dockerfile index 550d9891b5f78d6122bce917b2b1617649b07e04..282aa2aeb9072658049465dd8f6b5d9345243af8 100644 --- a/provider/partition-gcp/bootstrap/Dockerfile +++ b/provider/partition-gcp/bootstrap/Dockerfile @@ -1,9 +1,11 @@ FROM google/cloud-sdk:slim -COPY ./provider/partition-gcp/bootstrap/bootstrap_partition.sh ./opt +WORKDIR /opt + +COPY ./provider/partition-gcp/bootstrap/ /opt/ ENV PREFIX=$(pwd) -RUN chmod 775 /opt/bootstrap_partition.sh +RUN chmod 775 bootstrap_partition.sh -CMD ["/bin/bash", "-c", "/opt/bootstrap_partition.sh && sleep 365d"] +CMD ["/bin/bash", "-c", "./bootstrap_partition.sh && sleep 365d"] diff --git a/provider/partition-gcp/bootstrap/bootstrap_partition.sh b/provider/partition-gcp/bootstrap/bootstrap_partition.sh index 7f34736dd8a0efcde8012606619d03a168a7a61c..3423ae084cb47521486ec7e6e363b42509bd373c 100644 --- a/provider/partition-gcp/bootstrap/bootstrap_partition.sh +++ b/provider/partition-gcp/bootstrap/bootstrap_partition.sh @@ -2,148 +2,10 @@ set -ex -DATA_PARTITION_ID_UPPER=${DATA_PARTITION_ID^^} - -generate_post_data() { - cat <<EOF -{ - "properties": { - "projectId": { - "sensitive": false, - "value": "${PROJECT_ID}" - }, - "serviceAccount": { - "sensitive": false, - "value": "${SERVICE_ACCOUNT}" - }, - "complianceRuleSet": { - "sensitive": false, - "value": "shared" - }, - "dataPartitionId": { - "sensitive": false, - "value": "${DATA_PARTITION_ID}" - }, - "name": { - "sensitive": false, - "value": "${DATA_PARTITION_ID}" - }, - "policy-service-enabled": { - "sensitive": false, - "value": "false" - }, - "bucket": { - "sensitive": false, - "value": "${PROJECT_ID}-${DATA_PARTITION_ID}-records" - }, - "crmAccountID": { - "sensitive": false, - "value": "[${DATA_PARTITION_ID},${DATA_PARTITION_ID}]" - }, - "osm.postgres.datasource.url": { - "sensitive": true, - "value": "POSTGRES_DATASOURCE_URL_${DATA_PARTITION_ID_UPPER}" - }, - "osm.postgres.datasource.username": { - "sensitive": true, - "value": "POSTGRES_DB_USERNAME_${DATA_PARTITION_ID_UPPER}" - }, - "osm.postgres.datasource.password": { - "sensitive": true, - "value": "POSTGRES_DB_PASSWORD_${DATA_PARTITION_ID_UPPER}" - }, - "file.minio.endpoint": { - "sensitive": false, - "value": "https://s3.${DOMAIN}" - }, - "file.minio.accessKey": { - "sensitive": true, - "value": "MINIO_ACCESS_KEY" - }, - "file.minio.secretKey": { - "sensitive": true, - "value": "MINIO_SECRET_KEY" - }, - "obm.minio.endpoint": { - "sensitive": false, - "value": "http://minio:9000" - }, - "obm.minio.accessKey": { - "sensitive": true, - "value": "MINIO_ACCESS_KEY" - }, - "obm.minio.secretKey": { - "sensitive": true, - "value": "MINIO_SECRET_KEY" - }, - "oqm.rabbitmq.amqp.host": { - "sensitive": false, - "value": "rabbitmq" - }, - "oqm.rabbitmq.amqp.port": { - "sensitive": false, - "value": "5672" - }, - "oqm.rabbitmq.amqp.path": { - "sensitive": false, - "value": "" - }, - "oqm.rabbitmq.amqp.username": { - "sensitive": true, - "value": "RABBITMQ_ADMIN_USERNAME" - }, - "oqm.rabbitmq.amqp.password": { - "sensitive": true, - "value": "RABBITMQ_ADMIN_PASSWORD" - }, - "oqm.rabbitmq.admin.schema": { - "sensitive": false, - "value": "http" - }, - "oqm.rabbitmq.admin.host": { - "sensitive": false, - "value": "rabbitmq" - }, - "oqm.rabbitmq.admin.port": { - "sensitive": false, - "value": "15672" - }, - "oqm.rabbitmq.admin.path": { - "sensitive": false, - "value": "/api" - }, - "oqm.rabbitmq.admin.username": { - "sensitive": true, - "value": "RABBITMQ_ADMIN_USERNAME" - }, - "oqm.rabbitmq.admin.password": { - "sensitive": true, - "value": "RABBITMQ_ADMIN_PASSWORD" - }, - "elasticsearch.host": { - "sensitive": true, - "value": "ELASTIC_HOST_${DATA_PARTITION_ID_UPPER}" - }, - "elasticsearch.port": { - "sensitive": true, - "value": "ELASTIC_PORT_${DATA_PARTITION_ID_UPPER}" - }, - "elasticsearch.user": { - "sensitive": true, - "value": "ELASTIC_USER_${DATA_PARTITION_ID_UPPER}" - }, - "elasticsearch.password": { - "sensitive": true, - "value": "ELASTIC_PASS_${DATA_PARTITION_ID_UPPER}" - } - } -} -EOF -} - -if [ "$ENVIRONMENT" == "anthos" ] -then +source ./data_anthos.sh +source ./data_gcp.sh +bootstrap_anthos() { if [ "$PARTITION_CLEAN_UP_ENABLED" == "true" ] then echo "Partition cleanup enabled, will delete partition ${DATA_PARTITION_ID}" @@ -153,9 +15,9 @@ then if [ "$delete_status_code" == 204 ] || [ "$delete_status_code" == 404 ] then - echo "Partition deletion was successful, with status code : ${delete_status_code}" + echo "Partition deletion was successful, with status code: ${delete_status_code}" else - echo "Not able to delete partition, response status code is : ${delete_status_code}" + echo "Not able to delete partition, status code is: ${delete_status_code}" exit 1 fi else @@ -165,25 +27,26 @@ then status_code=$(curl -X POST \ --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \ -H "Content-Type: application/json" \ - --data-raw "$(generate_post_data)") + --data-raw "$(generate_post_data_anthos)") + # shellcheck disable=SC2002 if [ "$status_code" == 201 ] then echo "Partition bootstrap finished successfully!" elif [ "$status_code" == 409 ] then - curl -X PATCH \ + patch_status_code=$(curl -X PATCH \ --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \ -H "Content-Type: application/json" \ - --data-raw "$(generate_post_data)" - echo "Partition was patched because Postgres Database had already had entities!" + --data-raw "$(generate_post_data_anthos)") + echo "Partition was patched because Postgres Database had already had entities! Status code of patching: $patch_status_code" else + echo "Exiting with status code: $status_code" exit 1 fi +} -elif [ "$ENVIRONMENT" == "gcp" ] -then - +bootstrap_gcp() { echo "sleep to prevent 500 response from the Partition service, due to timeout of creation for Workload Identity" sleep 20 @@ -198,9 +61,9 @@ then if [ "$delete_status_code" == 204 ] || [ "$delete_status_code" == 404 ] then - echo "Partition deletion was successful, with status code : ${delete_status_code}" + echo "Partition deletion was successful, with status code: ${delete_status_code}" else - echo "Not able to delete partition, response status code is : ${delete_status_code}" + echo "Not able to delete partition, status code is: ${delete_status_code}" exit 1 fi else @@ -211,22 +74,32 @@ then --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \ -H "Authorization: Bearer ${IDENTITY_TOKEN}" \ -H "Content-Type: application/json" \ - --data-raw "$(generate_post_data)") + --data-raw "$(generate_post_data_gcp)") + # shellcheck disable=SC2002 if [ "$status_code" == 201 ] then echo "Partition bootstrap finished successfully!" elif [ "$status_code" == 409 ] then - curl -X PATCH \ + patch_status_code=$(curl -X PATCH \ --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \ -H "Authorization: Bearer ${IDENTITY_TOKEN}" \ -H "Content-Type: application/json" \ - --data-raw "$(generate_post_data)" - echo "Partition was patched because Datastore had already had entities!" + --data-raw "$(generate_post_data_gcp)") + echo "Partition was patched because Datastore had already had entities! Status code of patching: $patch_status_code" else + echo "Exiting with status code: $status_code" exit 1 fi +} + +if [ "$ENVIRONMENT" == "anthos" ] +then + bootstrap_anthos +elif [ "$ENVIRONMENT" == "gcp" ] +then + bootstrap_gcp fi touch /tmp/bootstrap_ready diff --git a/provider/partition-gcp/bootstrap/data_anthos.sh b/provider/partition-gcp/bootstrap/data_anthos.sh new file mode 100644 index 0000000000000000000000000000000000000000..34e6c11f5641e5323a17e6f128cb23dba69dc4ec --- /dev/null +++ b/provider/partition-gcp/bootstrap/data_anthos.sh @@ -0,0 +1,140 @@ +#!/usr/bin/env bash + +DATA_PARTITION_ID_UPPER=${DATA_PARTITION_ID^^} + +generate_post_data_anthos() { + cat <<EOF +{ + "properties": { + "projectId": { + "sensitive": false, + "value": "${PROJECT_ID}" + }, + "serviceAccount": { + "sensitive": false, + "value": "${SERVICE_ACCOUNT}" + }, + "complianceRuleSet": { + "sensitive": false, + "value": "shared" + }, + "dataPartitionId": { + "sensitive": false, + "value": "${DATA_PARTITION_ID}" + }, + "name": { + "sensitive": false, + "value": "${DATA_PARTITION_ID}" + }, + "policy-service-enabled": { + "sensitive": false, + "value": "false" + }, + "bucket": { + "sensitive": false, + "value": "${PROJECT_ID}-${DATA_PARTITION_ID}-records" + }, + "crmAccountID": { + "sensitive": false, + "value": "[${DATA_PARTITION_ID},${DATA_PARTITION_ID}]" + }, + "osm.postgres.datasource.url": { + "sensitive": true, + "value": "POSTGRES_DATASOURCE_URL_${DATA_PARTITION_ID_UPPER}" + }, + "osm.postgres.datasource.username": { + "sensitive": true, + "value": "POSTGRES_DB_USERNAME_${DATA_PARTITION_ID_UPPER}" + }, + "osm.postgres.datasource.password": { + "sensitive": true, + "value": "POSTGRES_DB_PASSWORD_${DATA_PARTITION_ID_UPPER}" + }, + "file.minio.endpoint": { + "sensitive": false, + "value": "https://s3.${DOMAIN}" + }, + "file.minio.accessKey": { + "sensitive": true, + "value": "MINIO_ACCESS_KEY" + }, + "file.minio.secretKey": { + "sensitive": true, + "value": "MINIO_SECRET_KEY" + }, + "obm.minio.endpoint": { + "sensitive": false, + "value": "http://minio:9000" + }, + "obm.minio.accessKey": { + "sensitive": true, + "value": "MINIO_ACCESS_KEY" + }, + "obm.minio.secretKey": { + "sensitive": true, + "value": "MINIO_SECRET_KEY" + }, + "oqm.rabbitmq.amqp.host": { + "sensitive": false, + "value": "rabbitmq" + }, + "oqm.rabbitmq.amqp.port": { + "sensitive": false, + "value": "5672" + }, + "oqm.rabbitmq.amqp.path": { + "sensitive": false, + "value": "" + }, + "oqm.rabbitmq.amqp.username": { + "sensitive": true, + "value": "RABBITMQ_ADMIN_USERNAME" + }, + "oqm.rabbitmq.amqp.password": { + "sensitive": true, + "value": "RABBITMQ_ADMIN_PASSWORD" + }, + "oqm.rabbitmq.admin.schema": { + "sensitive": false, + "value": "http" + }, + "oqm.rabbitmq.admin.host": { + "sensitive": false, + "value": "rabbitmq" + }, + "oqm.rabbitmq.admin.port": { + "sensitive": false, + "value": "15672" + }, + "oqm.rabbitmq.admin.path": { + "sensitive": false, + "value": "/api" + }, + "oqm.rabbitmq.admin.username": { + "sensitive": true, + "value": "RABBITMQ_ADMIN_USERNAME" + }, + "oqm.rabbitmq.admin.password": { + "sensitive": true, + "value": "RABBITMQ_ADMIN_PASSWORD" + }, + "elasticsearch.host": { + "sensitive": true, + "value": "ELASTIC_HOST_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.port": { + "sensitive": true, + "value": "ELASTIC_PORT_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.user": { + "sensitive": true, + "value": "ELASTIC_USER_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.password": { + "sensitive": true, + "value": "ELASTIC_PASS_${DATA_PARTITION_ID_UPPER}" + } + } +} +EOF +} diff --git a/provider/partition-gcp/bootstrap/data_gcp.sh b/provider/partition-gcp/bootstrap/data_gcp.sh new file mode 100644 index 0000000000000000000000000000000000000000..7f78a10cfcc9b394f369cf1674de9cce9646f626 --- /dev/null +++ b/provider/partition-gcp/bootstrap/data_gcp.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +DATA_PARTITION_ID_UPPER=${DATA_PARTITION_ID^^} + +generate_post_data_gcp() { + cat <<EOF +{ + "properties": { + "projectId": { + "sensitive": false, + "value": "${PROJECT_ID}" + }, + "serviceAccount": { + "sensitive": false, + "value": "${SERVICE_ACCOUNT}" + }, + "complianceRuleSet": { + "sensitive": false, + "value": "shared" + }, + "dataPartitionId": { + "sensitive": false, + "value": "${DATA_PARTITION_ID}" + }, + "name": { + "sensitive": false, + "value": "${DATA_PARTITION_ID}" + }, + "policy-service-enabled": { + "sensitive": false, + "value": "false" + }, + "bucket": { + "sensitive": false, + "value": "${PROJECT_ID}-${DATA_PARTITION_ID}-records" + }, + "crmAccountID": { + "sensitive": false, + "value": "[${DATA_PARTITION_ID},${DATA_PARTITION_ID}]" + }, + "elasticsearch.host": { + "sensitive": true, + "value": "ELASTIC_HOST_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.port": { + "sensitive": true, + "value": "ELASTIC_PORT_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.user": { + "sensitive": true, + "value": "ELASTIC_USER_${DATA_PARTITION_ID_UPPER}" + }, + "elasticsearch.password": { + "sensitive": true, + "value": "ELASTIC_PASS_${DATA_PARTITION_ID_UPPER}" + } + } +} +EOF +}