From 27e372e139fb72debb131db02b07a4537ecd8e50 Mon Sep 17 00:00:00 2001 From: Florian Braun <5863788+FloThinksPi@users.noreply.github.com> Date: Mon, 3 Jul 2023 10:35:51 +0200 Subject: [PATCH] Make dev setup locally usablei --- .devcontainer/Dockerfile | 16 - .../_Mariadb__CC-Unittests.xml | 27 ++ .../.idea/runConfigurations/_Mariadb__CC.xml | 27 ++ .../_Postgres__CC-Unittests.xml | 27 ++ .../.idea/runConfigurations/_Postgres__CC.xml | 4 +- .../vscode/.vscode/launch.json | 0 .devcontainer/devcontainer.json | 8 +- .devcontainer/docker-compose.override.yml | 19 + .devcontainer/docker-compose.yml | 79 --- .../{library => images}/catsbroker/Dockerfile | 0 .devcontainer/images/devcontainer/Dockerfile | 5 + .devcontainer/images/devcontainer/setup.sh | 52 ++ .../{library => images}/nginx/Dockerfile | 7 +- .../{library => images}/nginx/conf/mime.types | 0 .../{library => images}/nginx/conf/nginx.conf | 2 +- .../nginx/conf/nginx_external_endpoints.conf | 0 .../nginx/conf/public_upload.conf | 0 .../{library => images}/uaa/Dockerfile | 6 +- .../uaa/PatchAdminOAuthClient.java | 0 .devcontainer/library/idea/.idea/.gitignore | 8 - .../.idea/libraries/app_packager_zips.xml | 15 - .../library/idea/.idea/libraries/fixtures.xml | 14 - .devcontainer/library/idea/.idea/misc.xml | 44 -- .devcontainer/library/idea/.idea/modules.xml | 8 - .devcontainer/library/idea/.idea/vcs.xml | 6 - .../library/idea/cloud_controller_ng.iml | 455 ------------------ .devcontainer/library/initializeCommand.sh | 5 - .devcontainer/scripts/codespaces_init.sh | 5 + .devcontainer/scripts/codespaces_start.sh | 12 + .../setupDevelopmentEnvironment.sh} | 134 +++--- .devcontainer/scripts/setupIDEs.sh | 10 + devenv.sh | 100 ++++ docker-compose.yml | 112 +++++ 33 files changed, 479 insertions(+), 728 deletions(-) delete mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml rename .devcontainer/{library/idea => configs/intellij}/.idea/runConfigurations/_Postgres__CC.xml (89%) rename .devcontainer/{library => configs}/vscode/.vscode/launch.json (100%) create mode 100644 .devcontainer/docker-compose.override.yml delete mode 100644 .devcontainer/docker-compose.yml rename .devcontainer/{library => images}/catsbroker/Dockerfile (100%) create mode 100644 .devcontainer/images/devcontainer/Dockerfile create mode 100755 .devcontainer/images/devcontainer/setup.sh rename .devcontainer/{library => images}/nginx/Dockerfile (66%) rename .devcontainer/{library => images}/nginx/conf/mime.types (100%) rename .devcontainer/{library => images}/nginx/conf/nginx.conf (95%) rename .devcontainer/{library => images}/nginx/conf/nginx_external_endpoints.conf (100%) rename .devcontainer/{library => images}/nginx/conf/public_upload.conf (100%) rename .devcontainer/{library => images}/uaa/Dockerfile (94%) rename .devcontainer/{library => images}/uaa/PatchAdminOAuthClient.java (100%) delete mode 100644 .devcontainer/library/idea/.idea/.gitignore delete mode 100644 .devcontainer/library/idea/.idea/libraries/app_packager_zips.xml delete mode 100644 .devcontainer/library/idea/.idea/libraries/fixtures.xml delete mode 100644 .devcontainer/library/idea/.idea/misc.xml delete mode 100644 .devcontainer/library/idea/.idea/modules.xml delete mode 100644 .devcontainer/library/idea/.idea/vcs.xml delete mode 100644 .devcontainer/library/idea/cloud_controller_ng.iml delete mode 100755 .devcontainer/library/initializeCommand.sh create mode 100755 .devcontainer/scripts/codespaces_init.sh create mode 100755 .devcontainer/scripts/codespaces_start.sh rename .devcontainer/{library/onCreateCommand.sh => scripts/setupDevelopmentEnvironment.sh} (61%) create mode 100755 .devcontainer/scripts/setupIDEs.sh create mode 100755 devenv.sh create mode 100644 docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index d11a70e3b1d..00000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM mcr.microsoft.com/vscode/devcontainers/ruby:3.1 - -COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ - -RUN wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - \ - && echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list \ - && apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get install postgresql-client postgresql-client-common mariadb-client cf7-cli -y \ - && apt-get install -o Dpkg::Options::="--force-overwrite" cf8-cli -y \ - && gem install cf-uaac \ - && wget $(curl -s https://api.github.com/repos/cloudfoundry/credhub-cli/releases/latest | \ - jq -r '.assets[] | select(.name|match("credhub-linux.*")) | .browser_download_url') -O credhub.tar.gz \ - && tar -xzf credhub.tar.gz && rm -f credhub.tar.gz && mv credhub /usr/bin \ - && wget $(curl -s https://api.github.com/repos/mikefarah/yq/releases/latest | \ - jq -r '.assets[] | select(.name|match("linux_amd64$")) | .browser_download_url') -O /usr/bin/yq \ - && chmod +x /usr/bin/yq \ No newline at end of file diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml new file mode 100644 index 00000000000..7f4fd4c509b --- /dev/null +++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml new file mode 100644 index 00000000000..9a1cc7fc802 --- /dev/null +++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml new file mode 100644 index 00000000000..f01f32bb398 --- /dev/null +++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml similarity index 89% rename from .devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml rename to .devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml index d5d2000e540..a9c4226ce9d 100644 --- a/.devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml +++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml @@ -1,5 +1,5 @@ - + @@ -8,7 +8,7 @@ - + diff --git a/.devcontainer/library/vscode/.vscode/launch.json b/.devcontainer/configs/vscode/.vscode/launch.json similarity index 100% rename from .devcontainer/library/vscode/.vscode/launch.json rename to .devcontainer/configs/vscode/.vscode/launch.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index aded668ce6d..533e66e10f4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: { "name": "Cloud Controller Dev Environment", - "dockerComposeFile": "docker-compose.yml", + "dockerComposeFile": ["../docker-compose.yml", "docker-compose.override.yml"], "service": "codespace", "runServices": [ "postgres", @@ -11,9 +11,9 @@ "catsbroker", "nginx" ], - "workspaceFolder": "..", - "initializeCommand": ".devcontainer/library/initializeCommand.sh", - "onCreateCommand": ".devcontainer/library/onCreateCommand.sh", + "workspaceFolder": "/workspace", + "initializeCommand": ".devcontainer/scripts/codespaces_init.sh", + "onCreateCommand": ".devcontainer/scripts/codespaces_start.sh", "customizations": { // Configure properties specific to VS Code. "vscode": { diff --git a/.devcontainer/docker-compose.override.yml b/.devcontainer/docker-compose.override.yml new file mode 100644 index 00000000000..26d9e938234 --- /dev/null +++ b/.devcontainer/docker-compose.override.yml @@ -0,0 +1,19 @@ +version: "3.3" +services: + + # Dev Container + codespace: + container_name: codespace + build: + context: .devcontainer/images/devcontainer + dockerfile: Dockerfile + restart: unless-stopped + command: /bin/sh -c "while sleep 1000; do :; done" + volumes: + - .:/workspace:cached + - /var/run/docker.sock:/var/run/docker.sock + network_mode: host + cap_add: + - SYS_PTRACE + security_opt: + - seccomp:unconfined \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index 965c12ecb32..00000000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,79 +0,0 @@ -version: '3' - -services: - # Dev Container - codespace: - container_name: codespace - build: - context: ../ - dockerfile: .devcontainer/Dockerfile - restart: unless-stopped - command: /bin/sh -c "while sleep 1000; do :; done" - volumes: - - ..:/workspace:cached - - /var/run/docker.sock:/var/run/docker.sock - networks: - - codespace - cap_add: - - SYS_PTRACE - security_opt: - - seccomp:unconfined - # Postgres - postgres: - container_name: postgres - image: postgres:13 - environment: - POSTGRES_PASSWORD: supersecret - networks: - - codespace - restart: unless-stopped - # Postgres - mariadb: - container_name: mariadb - image: mariadb:10.3 - environment: - MARIADB_ROOT_PASSWORD: supersecret - networks: - - codespace - restart: unless-stopped - # UAA - uaa: - container_name: uaa - build: - context: library/uaa - dockerfile: Dockerfile - networks: - - codespace - restart: unless-stopped - # Minio - minio: - container_name: minio - image: minio/minio:latest - command: minio server --address :9001 /data - networks: - - codespace - restart: unless-stopped - # CATS Configurable Service Broker - catsbroker: - container_name: catsbroker - build: - context: library/catsbroker - dockerfile: Dockerfile - networks: - - codespace - restart: unless-stopped - # Nginx - nginx: - container_name: nginx - build: - context: ./library/nginx - dockerfile: Dockerfile - args: - ENABLED_MODULES: nginx_upload_module - networks: - - codespace - volumes: - - ./library/nginx/conf:/usr/local/nginx/conf:ro - - ../tmp:/tmp:cached -networks: - codespace: \ No newline at end of file diff --git a/.devcontainer/library/catsbroker/Dockerfile b/.devcontainer/images/catsbroker/Dockerfile similarity index 100% rename from .devcontainer/library/catsbroker/Dockerfile rename to .devcontainer/images/catsbroker/Dockerfile diff --git a/.devcontainer/images/devcontainer/Dockerfile b/.devcontainer/images/devcontainer/Dockerfile new file mode 100644 index 00000000000..e81ad72463d --- /dev/null +++ b/.devcontainer/images/devcontainer/Dockerfile @@ -0,0 +1,5 @@ +FROM mcr.microsoft.com/vscode/devcontainers/ruby:3.1 + +COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ +COPY setup.sh /tmp/setup.sh +RUN /tmp/setup.sh && rm /tmp/setup.sh \ No newline at end of file diff --git a/.devcontainer/images/devcontainer/setup.sh b/.devcontainer/images/devcontainer/setup.sh new file mode 100755 index 00000000000..493090f5be5 --- /dev/null +++ b/.devcontainer/images/devcontainer/setup.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -Eeuo pipefail +# shellcheck disable=SC2064 +trap "pkill -P $$" EXIT + +setupAptPackages () { + + if [[ $(uname -m) == aarch64 ]]; then + PACKAGES="postgresql-client postgresql-client-common mariadb-client docker-compose-plugin" + else + PACKAGES="cf8-cli postgresql-client postgresql-client-common mariadb-client docker-compose-plugin" + fi + + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - + echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list + apt-get update && export DEBIAN_FRONTEND=noninteractive + apt-get install -o Dpkg::Options::="--force-overwrite" $PACKAGES -y +} + +setupRubyGems () { + gem install cf-uaac +} + +setupCredhubCli () { + wget "$(curl -s https://api.github.com/repos/cloudfoundry/credhub-cli/releases/latest | + jq -r '.assets[] | select(.name|match("credhub-linux.*")) | .browser_download_url')" -O credhub.tar.gz + tar -xzf credhub.tar.gz && rm -f credhub.tar.gz && mv credhub /usr/bin +} + +setupUaaCli () { + wget "$(curl -s https://api.github.com/repos/mikefarah/yq/releases/latest | + jq -r '.assets[] | select(.name|match("linux_amd64$")) | .browser_download_url')" -O /usr/bin/yq + chmod +x /usr/bin/yq +} + +setupAptPackages || tee fail & +setupRubyGems || tee fail & +setupCredhubCli || tee fail & +setupUaaCli || tee fail & + + +# Wait for background jobs and exit 1 if any error happened +# shellcheck disable=SC2046 +wait $(jobs -p) +test -f fail && exit 1 + +trap "" EXIT \ No newline at end of file diff --git a/.devcontainer/library/nginx/Dockerfile b/.devcontainer/images/nginx/Dockerfile similarity index 66% rename from .devcontainer/library/nginx/Dockerfile rename to .devcontainer/images/nginx/Dockerfile index 27fa2cfd6ca..889a98ca11f 100644 --- a/.devcontainer/library/nginx/Dockerfile +++ b/.devcontainer/images/nginx/Dockerfile @@ -1,7 +1,7 @@ FROM alpine RUN apk --no-cache add build-base pcre-dev openssl-dev gzip curl jq zlib-dev \ - && NGINX_VERSION=$(curl -s https://hub.docker.com/v2/repositories/library/nginx/tags | jq -r ".results[] | select(.images | any(.digest==\"$(curl -s https://hub.docker.com/v2/repositories/library/nginx/tags | jq -r '.results[] | select(.name=="stable").images[] | select(.architecture=="amd64").digest')\")) | .name " | grep "[0-9]*\.[0-9]*\.[0-9]") \ + && NGINX_VERSION=$(curl -s https://nginx.org/en/download.html | grep -o -E -m 1 "nginx-[0-9]+\.[0-9]+\.[0-9]+" | cut -d'-' -f2 | head -n 1) \ && UPLOAD_VERSION=$(curl -s https://api.github.com/repos/fdintino/nginx-upload-module/tags | jq -r '.[0].name') \ && wget -P /tmp https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && tar -zxvf /tmp/nginx-${NGINX_VERSION}.tar.gz -C /tmp \ && wget -P /tmp https://github.com/fdintino/nginx-upload-module/archive/${UPLOAD_VERSION}.tar.gz && tar -zxvf /tmp/${UPLOAD_VERSION}.tar.gz -C /tmp \ @@ -10,7 +10,10 @@ RUN apk --no-cache add build-base pcre-dev openssl-dev gzip curl jq zlib-dev \ --add-module=/tmp/nginx-upload-module-${UPLOAD_VERSION}\ --with-http_stub_status_module \ && make \ - && make install + && make install\ + && rm -rf /usr/local/nginx/conf + +COPY conf /usr/local/nginx/conf EXPOSE 80 diff --git a/.devcontainer/library/nginx/conf/mime.types b/.devcontainer/images/nginx/conf/mime.types similarity index 100% rename from .devcontainer/library/nginx/conf/mime.types rename to .devcontainer/images/nginx/conf/mime.types diff --git a/.devcontainer/library/nginx/conf/nginx.conf b/.devcontainer/images/nginx/conf/nginx.conf similarity index 95% rename from .devcontainer/library/nginx/conf/nginx.conf rename to .devcontainer/images/nginx/conf/nginx.conf index e97fc90d687..727a6e9cc92 100644 --- a/.devcontainer/library/nginx/conf/nginx.conf +++ b/.devcontainer/images/nginx/conf/nginx.conf @@ -39,7 +39,7 @@ http { ## upstream cloud_controller { - server unix:/tmp/cloud_controller.sock; + server host.docker.internal:3000; } include nginx_external_endpoints.conf; diff --git a/.devcontainer/library/nginx/conf/nginx_external_endpoints.conf b/.devcontainer/images/nginx/conf/nginx_external_endpoints.conf similarity index 100% rename from .devcontainer/library/nginx/conf/nginx_external_endpoints.conf rename to .devcontainer/images/nginx/conf/nginx_external_endpoints.conf diff --git a/.devcontainer/library/nginx/conf/public_upload.conf b/.devcontainer/images/nginx/conf/public_upload.conf similarity index 100% rename from .devcontainer/library/nginx/conf/public_upload.conf rename to .devcontainer/images/nginx/conf/public_upload.conf diff --git a/.devcontainer/library/uaa/Dockerfile b/.devcontainer/images/uaa/Dockerfile similarity index 94% rename from .devcontainer/library/uaa/Dockerfile rename to .devcontainer/images/uaa/Dockerfile index dac7c53b9ed..c43b5f9c7fa 100644 --- a/.devcontainer/library/uaa/Dockerfile +++ b/.devcontainer/images/uaa/Dockerfile @@ -5,7 +5,7 @@ WORKDIR /uaa # Patch admin client, add authority password.write COPY PatchAdminOAuthClient.java /PatchAdminOAuthClient.java -RUN apt-get update && apt-get install jq -y \ +RUN apt-get update && apt-get install jq -y \ && git clone -b $(curl -s https://api.github.com/repos/cloudfoundry/uaa/releases/latest | jq -r '.tag_name') https://github.com/cloudfoundry/uaa.git . --recursive --depth=1 --shallow-submodules \ && git clone -b $(curl -s https://api.github.com/repos/pivotal/credhub-release/releases/latest | jq -r '.tag_name') https://github.com/pivotal/credhub-release /credhub-release --recursive --depth=1 --shallow-submodules \ && javac /PatchAdminOAuthClient.java -d / \ @@ -27,7 +27,7 @@ COPY --from=builder /credhub-release/src/credhub/config/uaa.yml /credhub-uaa.yml # Remove jwt node with symmetric key # Replace UAA client name in credhub config # Concatenate modified cargo and credhub config files -RUN yq e '.issuer.uri = "http://localhost:8080"' -i /uaa.yml \ +RUN yq e '.issuer.uri = "http://localhost:8080"' -i /uaa.yml \ && yq e '.uaa.url = .issuer.uri' -i /uaa.yml \ && yq e 'del(.jwt)' -i /uaa.yml \ && yq e '.oauth.clients.director_to_credhub = .oauth.clients.credhub_client' -i /credhub-uaa.yml \ @@ -41,7 +41,7 @@ FROM tomcat:9-jdk11 COPY --from=yq /uaa.yml /uaa.yml # Remove pre-installed apps -RUN rm -rf /usr/local/tomcat/webapps/* +RUN rm -rf /usr/local/tomcat/webapps/* # Install war from build image COPY --from=builder /uaa/uaa/build/libs/cloudfoundry-identity-uaa-*.war /usr/local/tomcat/webapps/ROOT.war diff --git a/.devcontainer/library/uaa/PatchAdminOAuthClient.java b/.devcontainer/images/uaa/PatchAdminOAuthClient.java similarity index 100% rename from .devcontainer/library/uaa/PatchAdminOAuthClient.java rename to .devcontainer/images/uaa/PatchAdminOAuthClient.java diff --git a/.devcontainer/library/idea/.idea/.gitignore b/.devcontainer/library/idea/.idea/.gitignore deleted file mode 100644 index 13566b81b01..00000000000 --- a/.devcontainer/library/idea/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml b/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml deleted file mode 100644 index 8670e122ad3..00000000000 --- a/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/idea/.idea/libraries/fixtures.xml b/.devcontainer/library/idea/.idea/libraries/fixtures.xml deleted file mode 100644 index 40dfe3482bc..00000000000 --- a/.devcontainer/library/idea/.idea/libraries/fixtures.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/idea/.idea/misc.xml b/.devcontainer/library/idea/.idea/misc.xml deleted file mode 100644 index bbd1dd68f56..00000000000 --- a/.devcontainer/library/idea/.idea/misc.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/idea/.idea/modules.xml b/.devcontainer/library/idea/.idea/modules.xml deleted file mode 100644 index d4a84da4a81..00000000000 --- a/.devcontainer/library/idea/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/idea/.idea/vcs.xml b/.devcontainer/library/idea/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbbc..00000000000 --- a/.devcontainer/library/idea/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/idea/cloud_controller_ng.iml b/.devcontainer/library/idea/cloud_controller_ng.iml deleted file mode 100644 index dd01ba668a2..00000000000 --- a/.devcontainer/library/idea/cloud_controller_ng.iml +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.devcontainer/library/initializeCommand.sh b/.devcontainer/library/initializeCommand.sh deleted file mode 100755 index 48cb26a0257..00000000000 --- a/.devcontainer/library/initializeCommand.sh +++ /dev/null @@ -1,5 +0,0 @@ -#/bin/dash -set -eux - -# Setup VSCode -mkdir -p /tmp \ No newline at end of file diff --git a/.devcontainer/scripts/codespaces_init.sh b/.devcontainer/scripts/codespaces_init.sh new file mode 100755 index 00000000000..4d81e810aa2 --- /dev/null +++ b/.devcontainer/scripts/codespaces_init.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -Eeuxo pipefail + +# Setup VSCode +mkdir -p tmp \ No newline at end of file diff --git a/.devcontainer/scripts/codespaces_start.sh b/.devcontainer/scripts/codespaces_start.sh new file mode 100755 index 00000000000..be5e96fd4fb --- /dev/null +++ b/.devcontainer/scripts/codespaces_start.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -Eeuxo pipefail +# shellcheck disable=SC2064 +trap "pkill -P $$" EXIT + +# Setup IDEs +./.devcontainer/scripts/setupIDEs.sh + +# Setup DBs and CC Config File +sudo ./.devcontainer/scripts/setupDevelopmentEnvironment.sh + +trap "" EXIT \ No newline at end of file diff --git a/.devcontainer/library/onCreateCommand.sh b/.devcontainer/scripts/setupDevelopmentEnvironment.sh similarity index 61% rename from .devcontainer/library/onCreateCommand.sh rename to .devcontainer/scripts/setupDevelopmentEnvironment.sh index ab7dc2641ad..d4fc586c9ab 100755 --- a/.devcontainer/library/onCreateCommand.sh +++ b/.devcontainer/scripts/setupDevelopmentEnvironment.sh @@ -1,59 +1,96 @@ -#/bin/dash -set -eux +#!/bin/bash +set -Eeuo pipefail +# shellcheck disable=SC2064 trap "pkill -P $$" EXIT -# Setup IDEs -cp -a -f .devcontainer/library/vscode/.vscode/ . -cp -a -f .devcontainer/library/idea/.idea/ . -cp -a -f .devcontainer/library/idea/cloud_controller_ng.iml . +# Database Information +POSTGRES_CONNECTION_STRING="postgres://postgres:supersecret@localhost:5432/ccdb" +MYSQL_CONNECTION_STRING="mysql2://root:supersecret@127.0.0.1:3306/ccdb" -# Install packages -bundle install & +setupPostgres () { + export DB="postgres" + export DB_CONNECTION_STRING="${POSTGRES_CONNECTION_STRING}" + bundle exec rake db:recreate + bundle exec rake db:migrate + bundle exec rake db:seed +} + + +setupMariadb () { + export DB="mysql" + export DB_CONNECTION_STRING="${MYSQL_CONNECTION_STRING}" + bundle exec rake db:recreate + bundle exec rake db:migrate + bundle exec rake db:seed +} + +setupUAA () { + # Wait until ready + # shellcheck disable=SC2016 + timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' http://localhost:8080/info)" != "200" ]]; do sleep 5; done' || false + + # Login + uaac target http://localhost:8080 --skip-ssl-validation + uaac token client get admin -s "adminsecret" + + # Admin User + NEW_ADMIN_USERNAME="ccadmin" + NEW_ADMIN_PASSWORD="secret" + uaac user add ${NEW_ADMIN_USERNAME} -p ${NEW_ADMIN_PASSWORD} --emails fake@example.com + uaac member add cloud_controller.admin ${NEW_ADMIN_USERNAME} + uaac member add uaa.admin ${NEW_ADMIN_USERNAME} + uaac member add scim.read ${NEW_ADMIN_USERNAME} + uaac member add scim.write ${NEW_ADMIN_USERNAME} + + # Dasboard User + uaac user add cc-service-dashboards -p some-sekret --emails fake2@example.com +} # CC config +mkdir -p tmp cp -a config/cloud_controller.yml tmp/cloud_controller.yml -yq -i e '.login.url="http://uaa:8080"' tmp/cloud_controller.yml +yq -i e '.login.url="http://localhost:8080"' tmp/cloud_controller.yml yq -i e '.login.enabled=true' tmp/cloud_controller.yml yq -i e '.nginx.use_nginx=true' tmp/cloud_controller.yml -yq -i e '.nginx.instance_socket="/workspaces/cloud_controller_ng/tmp/cloud_controller.sock"' tmp/cloud_controller.yml +yq -i e '.nginx.instance_socket=""' tmp/cloud_controller.yml -yq -i e '.logging.file="/workspaces/cloud_controller_ng/tmp/cloud_controller.log"' tmp/cloud_controller.yml -yq -i e '.telemetry_log_path="/workspaces/cloud_controller_ng/tmp/cloud_controller_telemetry.log"' tmp/cloud_controller.yml -yq -i e '.directories.tmpdir="/workspaces/cloud_controller_ng/tmp"' tmp/cloud_controller.yml -yq -i e '.directories.diagnostics="/workspaces/cloud_controller_ng/tmp"' tmp/cloud_controller.yml +yq -i e '.logging.file="tmp/cloud_controller.log"' tmp/cloud_controller.yml +yq -i e '.telemetry_log_path="tmp/cloud_controller_telemetry.log"' tmp/cloud_controller.yml +yq -i e '.directories.tmpdir="tmp"' tmp/cloud_controller.yml +yq -i e '.directories.diagnostics="tmp"' tmp/cloud_controller.yml yq -i e '.security_event_logging.enabled=true' tmp/cloud_controller.yml -yq -i e '.security_event_logging.file="/workspaces/cloud_controller_ng/tmp/cef.log"' tmp/cloud_controller.yml +yq -i e '.security_event_logging.file="tmp/cef.log"' tmp/cloud_controller.yml -yq -i e '.uaa.url="http://uaa:8080"' tmp/cloud_controller.yml -yq -i e '.uaa.internal_url="http://uaa:8080"' tmp/cloud_controller.yml +yq -i e '.uaa.url="http://localhost:8080"' tmp/cloud_controller.yml +yq -i e '.uaa.internal_url="http://localhost:8080"' tmp/cloud_controller.yml yq -i e '.uaa.resource_id="cloud_controller"' tmp/cloud_controller.yml yq -i e 'del(.uaa.symmetric_secret)' tmp/cloud_controller.yml yq -i e '.resource_pool.fog_connection.provider="AWS"' tmp/cloud_controller.yml -yq -i e '.resource_pool.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml +yq -i e '.resource_pool.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml yq -i e '.resource_pool.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml yq -i e '.resource_pool.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml yq -i e '.resource_pool.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml yq -i e '.resource_pool.fog_connection.path_style=true' tmp/cloud_controller.yml yq -i e '.packages.fog_connection.provider="AWS"' tmp/cloud_controller.yml -yq -i e '.packages.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml +yq -i e '.packages.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml yq -i e '.packages.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml yq -i e '.packages.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml yq -i e '.packages.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml yq -i e '.packages.fog_connection.path_style=true' tmp/cloud_controller.yml yq -i e '.droplets.fog_connection.provider="AWS"' tmp/cloud_controller.yml -yq -i e '.droplets.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml +yq -i e '.droplets.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml yq -i e '.droplets.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml yq -i e '.droplets.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml yq -i e '.droplets.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml yq -i e '.droplets.fog_connection.path_style=true' tmp/cloud_controller.yml yq -i e '.buildpacks.fog_connection.provider="AWS"' tmp/cloud_controller.yml -yq -i e '.buildpacks.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml +yq -i e '.buildpacks.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml yq -i e '.buildpacks.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml yq -i e '.buildpacks.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml yq -i e '.buildpacks.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml @@ -62,52 +99,17 @@ yq -i e '.buildpacks.fog_connection.path_style=true' tmp/cloud_controller.yml yq -i e '.cloud_controller_username_lookup_client_name="login"' tmp/cloud_controller.yml yq -i e '.cloud_controller_username_lookup_client_secret="loginsecret"' tmp/cloud_controller.yml -wait - -# Database setup -POSTGRES_CONNECTION_STRING="postgres://postgres:supersecret@postgres:5432/ccdb" -MYSQL_CONNECTION_STRING="mysql2://root:supersecret@mariadb:3306/ccdb" - -setupPostgres () { - export DB="postgres" - export DB_CONNECTION_STRING="${POSTGRES_CONNECTION_STRING}" - bundle exec rake db:recreate - bundle exec rake db:migrate - bundle exec rake db:seed -} - - -setupMariadb () { - export DB="mysql" - export DB_CONNECTION_STRING="${MYSQL_CONNECTION_STRING}" - bundle exec rake db:recreate - bundle exec rake db:migrate - bundle exec rake db:seed -} - -setupPostgres & -setupMariadb & - -setupUAA () { - timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' http://uaa:8080/info)" != "200" ]]; do sleep 5; done' || false - CF_UAA_ADMIN_CLIENT_SECRET="adminsecret" - NEW_ADMIN_USERNAME="ccadmin" - NEW_ADMIN_PASSWORD="secret" - uaac target http://uaa:8080 --skip-ssl-validation - uaac token client get admin -s ${CF_UAA_ADMIN_CLIENT_SECRET} - uaac user add ${NEW_ADMIN_USERNAME} -p ${NEW_ADMIN_PASSWORD} --emails fake@example.com - uaac member add cloud_controller.admin ${NEW_ADMIN_USERNAME} - uaac member add uaa.admin ${NEW_ADMIN_USERNAME} - uaac member add scim.read ${NEW_ADMIN_USERNAME} - uaac member add scim.write ${NEW_ADMIN_USERNAME} +# Install packages +bundle install - # Dasboard User - uaac user add cc-service-dashboards -p some-sekret --emails fake2@example.com - uaac member add cloud_controller_service_permissions.read cc-service-dashboards - uaac member add openid cc-service-dashboards -} +# Setup Containers +setupPostgres || tee tmp/fail & +setupMariadb || tee tmp/fail & +setupUAA || tee tmp/fail & -setupUAA & +# Wait for background jobs and exit 1 if any error happened +# shellcheck disable=SC2046 +wait $(jobs -p) +test -f tmp/fail && rm tmp/fail && exit 1 -wait trap "" EXIT \ No newline at end of file diff --git a/.devcontainer/scripts/setupIDEs.sh b/.devcontainer/scripts/setupIDEs.sh new file mode 100755 index 00000000000..19b9a2391b8 --- /dev/null +++ b/.devcontainer/scripts/setupIDEs.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -Eeuo pipefail +# shellcheck disable=SC2064 +trap "pkill -P $$" EXIT + +# Setup IDEs +cp -a -f .devcontainer/configs/vscode/.vscode . +cp -a -f .devcontainer/configs/intellij/.idea . + +trap "" EXIT \ No newline at end of file diff --git a/devenv.sh b/devenv.sh new file mode 100755 index 00000000000..eefd656bf48 --- /dev/null +++ b/devenv.sh @@ -0,0 +1,100 @@ +#/bin/bash +set -eu +trap "pkill -P $$" EXIT + +# Prerequisits +# PSQL +# MYSQL +# RUBY(RBENV) +# RUBY BUNDLER +# UAAC (gem install cf-uaac) +# Docker +# Docker-Compose + +# Help text +help_command() { + echo "Usage: $0 COMMAND" + echo "" + echo "Commands:" + echo " create - Setting up the development environment(containers)" + echo " start - Starting the development environment(containers), a existing fully set up set of containers must exist." + echo " stop - Stopping but not removing the development environment(containers)" + echo " destroy - Stopping and removing the development environment(containers)" + echo " runconfigs - Copies matching run configurations for intellij and vscode into the respective folders" + echo " help - Print this help text" +} + + +# Create a clean development environment +create_command(){ + docker-compose -p "" down + docker buildx bake -f docker-compose.yml & + docker-compose -p "" pull & + wait $(jobs -p) + docker-compose -p "" up -d + ./.devcontainer/scripts/setupDevelopmentEnvironment.sh +} + +# Start containers +start_command(){ + docker-compose -p "" start +} + +# Stop containers +stop_command(){ + docker-compose -p "" stop +} + +# Remove containers +destroy_command(){ + docker-compose -p "" down +} + +# Call Setup IDEs Script +runconfigs_command(){ + ./.devcontainer/scripts/setupIDEs.sh +} + +# Error handler +handle_error() { + echo "Error: Invalid command" + help_command + exit 1 +} + +# Handle no command specified +if [ $# -eq 0 ]; then + handle_error +fi + +# Parse commands +case "$1" in + create) + echo "Setting up the development environment(containers)" + create_command + ;; + start) + echo "Starting the development environment(containers), a existing fully set up set of containers must exist." + start_command + ;; + stop) + echo "Stopping but not removing the development environment(containers)" + stop_command + ;; + destroy) + echo "Stopping and removing the development environment(containers)" + destroy_command + ;; + runconfigs) + echo "Copying matching run configurations for intellij and vscode into the respective folders" + runconfigs_command + ;; + help) + help_command + ;; + *) + handle_error + ;; +esac + +trap "" EXIT \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000000..a16888cd1e6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,112 @@ +version: "3.3" +services: + + # Postgres + postgres: + container_name: postgres + image: postgres:13 + environment: + POSTGRES_PASSWORD: supersecret + ports: + - "127.0.0.1:5432:5432" + networks: + - cc-net + healthcheck: + test: ["CMD-SHELL", "pg_isready"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + # Mariadb + mariadb: + container_name: mariadb + image: mariadb:10.3 + environment: + MARIADB_ROOT_PASSWORD: supersecret + ports: + - "127.0.0.1:3306:3306" + healthcheck: + test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] + interval: 10s + timeout: 20s + retries: 3 + networks: + - cc-net + restart: unless-stopped + + # UAA + uaa: + container_name: uaa + build: + context: .devcontainer/images/uaa + dockerfile: Dockerfile + ports: + - "127.0.0.1:8080:8080" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/info"] + interval: 30s + timeout: 20s + retries: 3 + networks: + - cc-net + restart: unless-stopped + + # Minio S3 Blobstore + minio: + container_name: minio + image: minio/minio:latest + command: minio server --address ":9001" "/data" + ports: + - "127.0.0.1:9001:9001" + - "127.0.0.1:9000:9000" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9001/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + networks: + - cc-net + restart: unless-stopped + + # CATS Configurable Service Broker + catsbroker: + container_name: catsbroker + build: + context: .devcontainer/images/catsbroker + dockerfile: Dockerfile + ports: + - "127.0.0.1:9292:9292" + - "127.0.0.1:9393:80" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9292/v2/catalog"] + interval: 30s + timeout: 20s + retries: 3 + networks: + - cc-net + restart: unless-stopped + + # Nginx Reverse Proxy (For uploads e.g. Packages) + nginx: + container_name: nginx + build: + context: .devcontainer/images/nginx + dockerfile: Dockerfile + args: + ENABLED_MODULES: nginx_upload_module + ports: + - "80:80" + networks: + - cc-net + volumes: + - .devcontainer/images/nginx/conf:/usr/local/nginx/conf:ro # TODO BAKE CONFIG INTO CONTAINER IMAGE + - ./tmp:/tmp + cap_add: + - NET_BIND_SERVICE + extra_hosts: + - "host.docker.internal:host-gateway" + restart: unless-stopped + +networks: + cc-net: \ No newline at end of file