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

Reply via email to