From f1468986c9a6dc15692a7be07cdf565120a6e0a1 Mon Sep 17 00:00:00 2001 From: Nathan Rodet <nrodet@grandlyon.com> Date: Fri, 13 Jan 2023 09:51:22 +0100 Subject: [PATCH] Added scripts configuration --- README.md | 65 +++++++++++++++++-- instance-scripts/cloud-init.yml | 3 + .../{confs => config-files}/atrium.yaml | 0 .../{confs => config-files}/config.yaml | 0 instance-scripts/scripts/atrium.sh | 23 +++++++ instance-scripts/scripts/code-server.sh | 20 ++++++ instance-scripts/scripts/docker.sh | 8 +++ instance-scripts/scripts/repository.sh | 7 ++ instance-scripts/scripts/rust.sh | 8 +++ instance-scripts/scripts/webtop.sh | 21 ++++++ 10 files changed, 151 insertions(+), 4 deletions(-) rename instance-scripts/{confs => config-files}/atrium.yaml (100%) rename instance-scripts/{confs => config-files}/config.yaml (100%) create mode 100644 instance-scripts/scripts/atrium.sh create mode 100644 instance-scripts/scripts/code-server.sh create mode 100644 instance-scripts/scripts/docker.sh create mode 100644 instance-scripts/scripts/repository.sh create mode 100644 instance-scripts/scripts/rust.sh create mode 100644 instance-scripts/scripts/webtop.sh diff --git a/README.md b/README.md index 8a7f22a..508de55 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,63 @@ User : - Username: abc - Password: <Gitlab Stored> +## Cloud-init + +### Create file + +In this example, you will find how to create a file to a defined path with cloud-init. +Content inside `%` are meant to be replaced with sed command to be able to use environment variable or user-data. + +**cloud-init :** +```yaml +write_files: + - content: | + hostname: %atrium_hostname%.daag.alpha.grandlyon.com + debug_mode: false + letsencrypt_email: %atrium_letsencrypt_email% + tls_mode: Auto + apps: # optional : applications served by atrium + - id: 1 + name: Code %atrium_count_index% + icon: web_asset + color: 4292030255 + is_proxy: true + host: code-%atrium_count_index% + target: localhost:8080 + - id: 2 + name: Desktop %atrium_count_index% + icon: web_asset + color: 4292030255 + is_proxy: true + host: desktop-%atrium_count_index% + target: localhost:8081 + path: /root/atrium.yaml +``` + +**bash command to replaced `%` content :** +```bash +sed -i "s/%atrium_hostname%/$(scw-userdata atrium_hostname)/g" /root/atrium.yaml +sed -i "s/%atrium_letsencrypt_email%/$(scw-userdata atrium_letsencrypt_email)/g" /root/atrium.yaml +sed -i "s/%atrium_count_index%/$(scw-userdata atrium_count_index)/g" /root/atrium.yaml +``` + +## Use Gitlab variables in instances + +### Example + +From my instances, I should be able to access the variables as user-data using the command `scw-userdata <my-variable>` after declaring them in Terraform. +**Some documentation : https://blog.scaleway.com/introducing-scaleway-cloud-init-support/** + +```HCL +user_data = { + atrium_count_index = count.index + atrium_hostname = scaleway_domain_record.subdomain_record[count.index].name + atrium_letsencrypt_email = var.LETSENCRYPT_EMAIL + user_password = var.USER_PASSWORD + cloud-init = file("../instance-scripts/cloud-init.yml") // this is not a variable, but the declaration of cloud-init file. +} +``` + ## Setup Terraform Locally First, you must setup 2 local files for your variables : @@ -74,7 +131,7 @@ SCW_PROJECT_ID = "" SCW_ACCESS_KEY = "" SCW_SECRET_KEY = "" INSTANCES_COUNT = "2" -ENVIRONMENT = "devrust" +ENVIRONMENT = "" ``` ### Terraform init - Gitlab remote tfstate @@ -85,9 +142,9 @@ Command should look like : ```bash export GITLAB_ACCESS_TOKEN=<YOUR-ACCESS-TOKEN> terraform init \ - -backend-config="address=https://forge.grandlyon.com/api/v4/projects/875/terraform/state/devrust" \ - -backend-config="lock_address=https://forge.grandlyon.com/api/v4/projects/875/terraform/state/devrust/lock" \ - -backend-config="unlock_address=https://forge.grandlyon.com/api/v4/projects/875/terraform/state/devrust/lock" \ + -backend-config="address=https://forge.grandlyon.com/api/v4/projects/<project-id>/terraform/state/<tfstate-name>" \ + -backend-config="lock_address=https://forge.grandlyon.com/api/v4/projects/<project-id>/terraform/state/<tfstate-name>/lock" \ + -backend-config="unlock_address=https://forge.grandlyon.com/api/v4/projects/<project-id>/terraform/state/<tfstate-name>/lock" \ -backend-config="username=xxxxxxx" \ -backend-config="password=$GITLAB_ACCESS_TOKEN" \ -backend-config="lock_method=POST" \ diff --git a/instance-scripts/cloud-init.yml b/instance-scripts/cloud-init.yml index 3bfb36f..2d44f44 100644 --- a/instance-scripts/cloud-init.yml +++ b/instance-scripts/cloud-init.yml @@ -9,6 +9,9 @@ packages: - curl - git + + + write_files: # # Atrium config file diff --git a/instance-scripts/confs/atrium.yaml b/instance-scripts/config-files/atrium.yaml similarity index 100% rename from instance-scripts/confs/atrium.yaml rename to instance-scripts/config-files/atrium.yaml diff --git a/instance-scripts/confs/config.yaml b/instance-scripts/config-files/config.yaml similarity index 100% rename from instance-scripts/confs/config.yaml rename to instance-scripts/config-files/config.yaml diff --git a/instance-scripts/scripts/atrium.sh b/instance-scripts/scripts/atrium.sh new file mode 100644 index 0000000..a99ed7e --- /dev/null +++ b/instance-scripts/scripts/atrium.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# +# Install Atrium +# + +mkdir -p /root/atrium/data && mkdir -p /root/atrium/letsencrypt_cache +sed -i "s/%atrium_hostname%/$(scw-userdata atrium_hostname)/g" /root/atrium.yaml +sed -i "s/%atrium_letsencrypt_email%/$(scw-userdata atrium_letsencrypt_email)/g" /root/atrium.yaml +sed -i "s/%atrium_count_index%/$(scw-userdata atrium_count_index)/g" /root/atrium.yaml +mv /root/atrium.yaml /root/atrium/atrium.yaml +chown -Rf 1000:1000 /root/atrium + +# +# Run Atrium Container +# + +docker run -d --name atrium \ + --restart unless-stopped \ + --net=host \ + -v /root/atrium/atrium.yaml:/app/atrium.yaml \ + -v /root/atrium/letsencrypt_cache:/app/letsencrypt_cache \ + -v /root/atrium/data:/app/data nicolaspernoud/atrium:latest diff --git a/instance-scripts/scripts/code-server.sh b/instance-scripts/scripts/code-server.sh new file mode 100644 index 0000000..3934c62 --- /dev/null +++ b/instance-scripts/scripts/code-server.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# +# Install Code Server +# + +# cloud-init execute the bash script before HOME and USER are set. +export HOME=/root +export USER=root + +mkdir -p /root/.config/code-server/ +sed -i "s/%user_password%/$(scw-userdata user_password)/g" /root/config.yaml +mv /root/config.yaml /root/.config/code-server/config.yaml +curl -fsSL https://code-server.dev/install.sh | sh + +# +# Run Code Server +# + +sudo systemctl enable --now code-server@$USER \ No newline at end of file diff --git a/instance-scripts/scripts/docker.sh b/instance-scripts/scripts/docker.sh new file mode 100644 index 0000000..8a3fb37 --- /dev/null +++ b/instance-scripts/scripts/docker.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# +# Install Docker +# + +curl -fsSL https://get.docker.com -o get-docker.sh +sh get-docker.sh \ No newline at end of file diff --git a/instance-scripts/scripts/repository.sh b/instance-scripts/scripts/repository.sh new file mode 100644 index 0000000..0181e19 --- /dev/null +++ b/instance-scripts/scripts/repository.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# +# Install Repository +# + +git clone https://github.com/NathanRodet/rust-axum-demo /root/rust-axum-demo \ No newline at end of file diff --git a/instance-scripts/scripts/rust.sh b/instance-scripts/scripts/rust.sh new file mode 100644 index 0000000..a2adbf6 --- /dev/null +++ b/instance-scripts/scripts/rust.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# +# Install Rust +# + +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +source \"$HOME/.cargo/env\" \ No newline at end of file diff --git a/instance-scripts/scripts/webtop.sh b/instance-scripts/scripts/webtop.sh new file mode 100644 index 0000000..f6d7123 --- /dev/null +++ b/instance-scripts/scripts/webtop.sh @@ -0,0 +1,21 @@ +# +# Run Webtop Container +# +docker run -d --name=webtop \ + --security-opt seccomp=unconfined \ + -e PUID=0 \ + -e PGID=0 \ + -e TZ=Europe/Paris \ + -e SUBFOLDER=/ \ + -e KEYBOARD=fr-fr-azerty \ + -e AUTO_LOGIN=false \ + -p 8081:3000 \ + -v /root/webtop:/config \ + -v /var/run/docker.sock:/var/run/docker.sock \ + --shm-size=8gb \ + --cap-add=NET_ADMIN \ + --privileged \ + --restart unless-stopped \ + --sysctl net.ipv6.conf.all.disable_ipv6=0 lscr.io/linuxserver/webtop:ubuntu-xfce + +echo "$(scw-userdata user_password)\n$(scw-userdata user_password)" | docker exec -i webtop passwd abc \ No newline at end of file -- GitLab