| version: "3" |
| |
| vars: |
| UID: |
| sh: 'echo {{ if eq OS "windows" }}1000{{ else }}$(id -u){{ end }}' |
| GID: |
| sh: 'echo {{ if eq OS "windows" }}1000{{ else }}$(id -g){{ end }}' |
| DRY: "" |
| EXTRA: "" |
| |
| env: |
| KUBECONFIG: |
| sh: |- |
| if test -e "$OPS_TMP/kubeconfig" |
| then echo "$OPS_TMP/kubeconfig" |
| else echo ~/.kube/config |
| fi |
| |
| tasks: |
| |
| deploy: |
| silent: true |
| desc: deploy the devcontainer in kubernetes |
| cmds: |
| - test -e ~/.ssh/id_rsa.pub || die "please generate an ssh key with ssh-keygen in ~/.ssh/id_rsa.pub" |
| - > |
| kubectl -n nuvolaris create secret generic ssh-secret |
| --from-literal=authorized_keys="$(cat ~/.ssh/id_rsa.pub)" 2>/dev/null || die "devcontainer already exists" |
| - > |
| kubectl -n nuvolaris create secret generic devel-secret |
| --from-literal=password="$(cat ~/.ops/devel.password)" |
| - | |
| export IMAGE="{{.IMAGES_DEVCONTAINER}}" |
| envsubst < deployment.yaml >_deployment.yaml |
| kubectl apply -f _deployment.yaml |
| - ops setup kubernetes wait-pod SELECTOR="-l app=ssh-devcontainer" COND=false FILE=_devcontainer |
| - | |
| touch ~/.ssh/config |
| if ! rg "Host miniops" ~/.ssh/config >/dev/null |
| then echo -e "\nHost miniops\n Hostname localhost\n Port 2222\n User devel\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null\n" >> ~/.ssh/config |
| fi |
| - > |
| retry -t 100 -m 600 ssh miniops exit 2>&1 |
| | awk '{s=""; for(i=1;i<=NR;i++) s=s"#"; printf "\rwaiting for ssh: [%s]", s; fflush()}' |
| - echo -e "\nyou can now connect to the devcontainer with 'ssh miniops'" |
| |
| undeploy: |
| silent: true |
| desc: undeploy the devcontainer in kubernetes |
| cmds: |
| - kubectl -n nuvolaris delete deploy/ssh-devcontainer secret/ssh-secret secret/devel-secret |
| - echo Please remove the Host miniops entry from your ~/.ssh/config file if present |
| |
| docker2kind: |
| silent: true |
| desc: load the devcontainer image from docker to kind to avoid pulling from outside |
| cmds: |
| - kind load docker-image {{.IMAGES_DEVCONTAINER}} --name nuvolaris |
| |
| docker-run: |
| desc: run the ssh-devcontainer in docker with W=<workspace absolute path> |
| silent: true |
| requires: { vars: [W]} |
| vars: |
| EXTRA: #"--entrypoint=/bin/bash -ti" |
| cmds: |
| - test -e "$OPS_PWD/workspace/package.json" || die "mising workdpace folder with starter" |
| - test -e ~/.ssh/id_rsa.pub || die "please generate an ssh key with 'ssk-keygen -t rsa'" |
| - echo "{{.W}}" | rg '^/' || die "W=<absolute path> required" |
| - docker rm -f ssh-devcontainer 2>/dev/null |
| - > |
| {{.DRY}} docker run |
| --hostname ssh-devcontainer |
| --name ssh-devcontainer --rm |
| -e SSHKEY="$(cat ~/.ssh/id_rsa.pub)" |
| -e USERID={{.UID}} |
| --mount "type=bind,src={{.W}},dst=/home/workspace" |
| -p 2223:2222 |
| {{.EXTRA}} |
| {{.IMAGES_DEVCONTAINER}} |
| |
| |