This is an automated email from the ASF dual-hosted git repository. msciabarra pushed a commit to branch embedded-devcontainer in repository https://gitbox.apache.org/repos/asf/openserverless-task.git
commit d7e3c85bc3e7663b70b7f879543a7979011900bc Author: Michele Sciabarra <[email protected]> AuthorDate: Fri Oct 31 14:29:49 2025 +0000 devcontainer --- setup/devcontainer/deployment.yaml | 124 +++++++++++++++++++++++++++++++++++++ setup/devcontainer/opsfile.yml | 76 +++++++++++++++++++++++ setup/opsfile.yml | 3 + 3 files changed, 203 insertions(+) diff --git a/setup/devcontainer/deployment.yaml b/setup/devcontainer/deployment.yaml new file mode 100644 index 0000000..80b5ff1 --- /dev/null +++ b/setup/devcontainer/deployment.yaml @@ -0,0 +1,124 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ssh-devcontainer + namespace: nuvolaris + labels: + app: ssh-devcontainer +spec: + replicas: 1 + selector: + matchLabels: + app: ssh-devcontainer + template: + metadata: + labels: + app: ssh-devcontainer + spec: + hostname: ssh-devcontainer + volumes: + - name: workspace + hostPath: + path: /workspace + - name: nginx-config + configMap: + name: nginx-proxy-config + containers: + - name: devcontainer + image: $IMAGE + ports: + - containerPort: 2222 + name: ssh + protocol: TCP + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + volumeMounts: + - name: workspace + mountPath: /workspace + env: + - name: DEBIAN_FRONTEND + value: noninteractive + - name: SSH_KEY + valueFrom: + secretKeyRef: + name: ssh-secret + key: authorized_keys + - name: DEVEL_PASSWORD + valueFrom: + secretKeyRef: + name: devel-secret + key: password + command: + - /bin/bash + - -c + - > + sudo touch /.dockerenv ; + sudo apt-get update ; + sudo apt-get install -y openssh-server ; + sudo mkdir -p /run/sshd ; + sudo ssh-keygen -A ; + mkdir -p ~/.ssh ; + chmod 600 ~/.ssh/authorized_keys ; + echo "$$SSH_KEY" > ~/.ssh/authorized_keys ; + ln -sf /workspace ~/workspace ; + echo "ops -update ; env OPS_PASSWORD='$$DEVEL_PASSWORD' ops ide login devel http://miniops.me" >>~/.bashrc ; + sudo chown -R 1000:1000 /workspace ; + sudo /usr/sbin/sshd -p 2222 -D + - name: reverse-proxy + image: nginx:alpine + ports: + - containerPort: 80 + name: http + protocol: TCP + command: ["nginx", "-g", "daemon off;"] + volumeMounts: + - name: nginx-config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + readOnly: true +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: nginx-proxy-config + namespace: nuvolaris +data: + nginx.conf: | + events { + worker_connections 1024; + } + http { + client_max_body_size 1g; + + server { + listen 80; + server_name miniops.me *.miniops.me; + + location / { + proxy_pass http://ingress-nginx-controller.ingress-nginx.svc.cluster.local; + proxy_set_header Host $$host; + proxy_set_header X-Real-IP $$remote_addr; + proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto http; + } + } + } +--- +apiVersion: v1 +kind: Service +metadata: + name: ssh-devcontainer + namespace: nuvolaris + labels: + app: ssh-devcontainer +spec: + type: NodePort + selector: + app: ssh-devcontainer + ports: + - port: 2222 + targetPort: 2222 + nodePort: 30222 + protocol: TCP + name: ssh diff --git a/setup/devcontainer/opsfile.yml b/setup/devcontainer/opsfile.yml new file mode 100644 index 0000000..ed21ede --- /dev/null +++ b/setup/devcontainer/opsfile.yml @@ -0,0 +1,76 @@ +version: "3" + +vars: + IMAGE: ghcr.io/mastrogpt/agent41-starter:2506201530 + +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 + 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="{{.IMAGE}}" + 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 node\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 + 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 + + docker-deploy: + desc: deploy the ssh-devcontainer with docker + silent: true + cmds: + - > + docker run + --name ssh-devcontainer --rm + -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" + --entrypoint /bin/bash + -p 2222:2222 + {{.IMAGE}} + -c ' + mkdir -p ~/.ssh ; + echo "$SSH_KEY" > ~/.ssh/authorized_keys ; + chmod 600 ~/.ssh/authorized_keys ; + sudo apt-get update ; + sudo apt-get install -y openssh-server ; + sudo mkdir -p /run/sshd ; + sudo ssh-keygen -A ; + echo starting sshd... ; + sudo /usr/sbin/sshd -p 2222 -D + ' + + docker-undeploy: + desc: deploy the ssh-devcontainer with docker + silent: true + cmds: + - docker rm -f ssh-devcontainer || echo "no docker container ssh-devcontainer running" diff --git a/setup/opsfile.yml b/setup/opsfile.yml index 1033cf1..5e724a4 100644 --- a/setup/opsfile.yml +++ b/setup/opsfile.yml @@ -81,6 +81,9 @@ tasks: cmds: - exit 0 + devcontainer: + desc: manage the devcontainer deployment + mini: silent: true desc: install miniops
