diff --git a/grafana/non-prod/docker/build_push_to_ecr.sh b/grafana/non-prod/docker/build_push_to_ecr.sh index 5b2a5cd7f..7d2a33124 100755 --- a/grafana/non-prod/docker/build_push_to_ecr.sh +++ b/grafana/non-prod/docker/build_push_to_ecr.sh @@ -2,17 +2,17 @@ # Set variables -dirname=$(dirname "$0") -DOCKERFILE_DIR=$(realpath "$dirname") -echo "DOCKERFILE_DIR: $DOCKERFILE_DIR" +dirname=$(dirname "${0}") +DOCKERFILE_DIR=$(realpath "${dirname}") +echo "DOCKERFILE_DIR: ${DOCKERFILE_DIR}" -# if parameter not passed, prompt for the environment. +# if parameter not passed, prompt for the environment. # Do not accept response if it is not one of the following: prod, int, ref, internal-dev # loop until valid response is received -if [ -z "$1" ]; then +if [[ -z "${1}" ]]; then while true; do - read -p "Enter the environment (prod, int, ref, internal-dev): " ENVIRONMENT - case $ENVIRONMENT in + read -r -p "Enter the environment (prod, int, ref, internal-dev): " ENVIRONMENT + case "${ENVIRONMENT}" in prod|int|ref|internal-dev) break ;; @@ -22,10 +22,10 @@ if [ -z "$1" ]; then esac done else - ENVIRONMENT=$1 + ENVIRONMENT="${1}" fi # Check if the environment is valid -if [[ ! "$ENVIRONMENT" =~ ^(prod|int|ref|internal-dev)$ ]]; then +if [[ ! "${ENVIRONMENT}" =~ ^(prod|int|ref|internal-dev)$ ]]; then echo "Invalid environment. Please enter one of: prod, int, ref, internal-dev." exit 1 fi @@ -36,59 +36,57 @@ AWS_REGION="eu-west-2" ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) REPOSITORY_NAME="${PREFIX}-grafana-app" IMAGE_TAG="11.0.0-22.04_stable" -LOCAL_IMAGE_NAME="$REPOSITORY_NAME:$IMAGE_TAG" -IMAGE_NAME="$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$LOCAL_IMAGE_NAME" +LOCAL_IMAGE_NAME="${REPOSITORY_NAME}:${IMAGE_TAG}" +IMAGE_NAME="${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${LOCAL_IMAGE_NAME}" TAGS='[ {"Key": "Environment", "Value": "non-prod"}, {"Key": "Project", "Value": "immunisation-fhir-api-grafana"}, - {"Key": "Environment", "Value": "'"$ENVIRONMENT"'"} + {"Key": "Environment", "Value": "'"${ENVIRONMENT}"'"} ]' LIFECYCLE_POLICY_FILE="lifecycle-policy.json" # Change to the directory containing the Dockerfile -cd $DOCKERFILE_DIR +if ! cd "${DOCKERFILE_DIR}"; then + echo "DOCKERFILE_DIR not found." + exit 1 +fi # Check if Dockerfile exists -if [ ! -f Dockerfile ]; then - echo "Dockerfile not found in the current directory." +if [[ ! -f Dockerfile ]]; then + echo "Dockerfile not found in DOCKERFILE_DIR." exit 1 fi # Create ECR repository if it does not exist -aws ecr describe-repositories --repository-names $REPOSITORY_NAME --region $AWS_REGION > /dev/null 2>&1 - -if [ $? -ne 0 ]; then - echo "Creating ECR repository: $REPOSITORY_NAME" - aws ecr create-repository --repository-name $REPOSITORY_NAME --region $AWS_REGION +if ! aws ecr describe-repositories --repository-names "${REPOSITORY_NAME}" --region "${AWS_REGION}" > /dev/null 2>&1; then + echo "Creating ECR repository: ${REPOSITORY_NAME}" + aws ecr create-repository --repository-name "${REPOSITORY_NAME}" --region "${AWS_REGION}" # Add tags to the repository - aws ecr tag-resource --resource-arn arn:aws:ecr:$AWS_REGION:$ACCOUNT_ID:repository/$REPOSITORY_NAME --tags $TAGS + aws ecr tag-resource --resource-arn "arn:aws:ecr:${AWS_REGION}:${ACCOUNT_ID}:repository/${REPOSITORY_NAME}" --tags "${TAGS}" fi # Apply lifecycle policy to the ECR repository -aws ecr put-lifecycle-policy --repository-name $REPOSITORY_NAME --lifecycle-policy-text file://$LIFECYCLE_POLICY_FILE --region $AWS_REGION +aws ecr put-lifecycle-policy --repository-name "${REPOSITORY_NAME}" --lifecycle-policy-text "file://${LIFECYCLE_POLICY_FILE}" --region "${AWS_REGION}" printf "Building and pushing Docker image to ECR...\n" # Authenticate Docker to ECR -aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com +aws ecr get-login-password --region "${AWS_REGION}" | docker login --username AWS --password-stdin "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com" printf "Building Docker image...\n" # Remove existing Docker image if it exists -docker rmi $IMAGE_NAME --force +docker rmi "${IMAGE_NAME}" --force # Pull the base image for linux/amd64 architecture docker pull --platform linux/amd64 grafana/grafana:latest # Build Docker image for linux/amd64 architecture and push to ECR docker buildx create --use -docker buildx build --platform linux/amd64 -t $IMAGE_NAME --push . - -# Check if the build was successful -if [ $? -ne 0 ]; then +if ! docker buildx build --platform linux/amd64 -t "${IMAGE_NAME}" --push .; then echo "Docker build failed." exit 1 fi # Inspect the built image -echo "Image: $LOCAL_IMAGE_NAME" +echo "Image: ${LOCAL_IMAGE_NAME}" -echo "Docker image built and pushed to ECR successfully." \ No newline at end of file +echo "Docker image built and pushed to ECR successfully." diff --git a/grafana/non-prod/docker/run.sh b/grafana/non-prod/docker/run.sh index a5cb3c34c..6958f2277 100644 --- a/grafana/non-prod/docker/run.sh +++ b/grafana/non-prod/docker/run.sh @@ -1,32 +1,31 @@ -#!/bin/sh +#!/bin/bash + echo "Grafana Docker container startup..." GRAFANA_SERVER_PATH=$(which grafana-server) -if [ -z "$GRAFANA_SERVER_PATH" ]; then +if [[ -z "${GRAFANA_SERVER_PATH}" ]]; then echo "grafana-server not found. Exiting." exit 1 else - echo "grafana-server found at $GRAFANA_SERVER_PATH" + echo "grafana-server found at ${GRAFANA_SERVER_PATH}" fi echo "Starting Grafana with environment variables:" env | grep GF_ # Check if Grafana configuration exists -if [ ! -f /etc/grafana/grafana.ini ]; then +if [[ ! -f /etc/grafana/grafana.ini ]]; then echo "Grafana configuration not found. Exiting." exit 1 fi -GF_UPDATE_CHECK=false - # Start Grafana in the foreground echo "Starting Grafana server..." -exec $GF_PATHS_HOME/bin/grafana-server \ - --homepath=$GF_PATHS_HOME \ +exec "${GF_PATHS_HOME}/bin/grafana-server" \ + --homepath="${GF_PATHS_HOME}" \ --config=/etc/grafana/grafana.ini \ --packaging=docker \ cfg:default.paths.data=/var/lib/grafana \ cfg:default.paths.logs=/var/log/grafana \ cfg:default.paths.plugins=/var/lib/grafana/plugins \ - cfg:default.paths.provisioning=/etc/grafana/provisioning \ No newline at end of file + cfg:default.paths.provisioning=/etc/grafana/provisioning