Ver código fonte

Estructura y configuración para kubernetes

Celestino Rey 6 meses atrás
pai
commit
0b67433b45
100 arquivos alterados com 124 adições e 5 exclusões
  1. 24 0
      Dockerfile
  2. 32 0
      Makefile
  3. 11 0
      env-prod-configmap.yaml
  4. 1 0
      lanza.sh
  5. 7 0
      namespace.yaml
  6. 8 0
      reg-secret.yaml
  7. 2 1
      requirements.txt
  8. 0 0
      src/DASHBOARD.md
  9. 2 2
      src/README.md
  10. 0 0
      src/RUNNING.md
  11. 0 0
      src/SOLUTION.md
  12. 0 0
      src/TROUBLESHOOTING.md
  13. 1 1
      src/app/main.py
  14. 0 0
      src/create_disk.sh
  15. 35 0
      src/entrypoint.sh
  16. 0 0
      src/pyproject.toml
  17. 0 0
      src/static/app.js
  18. 0 0
      src/static/dashboard.js
  19. 1 1
      src/static/index.html
  20. 0 0
      src/static/index.html.bak
  21. 0 0
      src/static/index_old.html
  22. 0 0
      src/static/novnc/app/error-handler.js
  23. 0 0
      src/static/novnc/app/images/alt.svg
  24. 0 0
      src/static/novnc/app/images/clipboard.svg
  25. 0 0
      src/static/novnc/app/images/connect.svg
  26. 0 0
      src/static/novnc/app/images/ctrl.svg
  27. 0 0
      src/static/novnc/app/images/ctrlaltdel.svg
  28. 0 0
      src/static/novnc/app/images/disconnect.svg
  29. 0 0
      src/static/novnc/app/images/drag.svg
  30. 0 0
      src/static/novnc/app/images/error.svg
  31. 0 0
      src/static/novnc/app/images/esc.svg
  32. 0 0
      src/static/novnc/app/images/expander.svg
  33. 0 0
      src/static/novnc/app/images/fullscreen.svg
  34. 0 0
      src/static/novnc/app/images/handle.svg
  35. 0 0
      src/static/novnc/app/images/handle_bg.svg
  36. 0 0
      src/static/novnc/app/images/icons/Makefile
  37. 0 0
      src/static/novnc/app/images/icons/novnc-120x120.png
  38. 0 0
      src/static/novnc/app/images/icons/novnc-144x144.png
  39. 0 0
      src/static/novnc/app/images/icons/novnc-152x152.png
  40. 0 0
      src/static/novnc/app/images/icons/novnc-16x16.png
  41. 0 0
      src/static/novnc/app/images/icons/novnc-192x192.png
  42. 0 0
      src/static/novnc/app/images/icons/novnc-24x24.png
  43. 0 0
      src/static/novnc/app/images/icons/novnc-32x32.png
  44. 0 0
      src/static/novnc/app/images/icons/novnc-48x48.png
  45. 0 0
      src/static/novnc/app/images/icons/novnc-60x60.png
  46. 0 0
      src/static/novnc/app/images/icons/novnc-64x64.png
  47. 0 0
      src/static/novnc/app/images/icons/novnc-72x72.png
  48. 0 0
      src/static/novnc/app/images/icons/novnc-76x76.png
  49. 0 0
      src/static/novnc/app/images/icons/novnc-96x96.png
  50. 0 0
      src/static/novnc/app/images/icons/novnc-icon-sm.svg
  51. 0 0
      src/static/novnc/app/images/icons/novnc-icon.svg
  52. 0 0
      src/static/novnc/app/images/info.svg
  53. 0 0
      src/static/novnc/app/images/keyboard.svg
  54. 0 0
      src/static/novnc/app/images/power.svg
  55. 0 0
      src/static/novnc/app/images/settings.svg
  56. 0 0
      src/static/novnc/app/images/tab.svg
  57. 0 0
      src/static/novnc/app/images/toggleextrakeys.svg
  58. 0 0
      src/static/novnc/app/images/warning.svg
  59. 0 0
      src/static/novnc/app/images/windows.svg
  60. 0 0
      src/static/novnc/app/locale/README
  61. 0 0
      src/static/novnc/app/locale/cs.json
  62. 0 0
      src/static/novnc/app/locale/de.json
  63. 0 0
      src/static/novnc/app/locale/el.json
  64. 0 0
      src/static/novnc/app/locale/es.json
  65. 0 0
      src/static/novnc/app/locale/fr.json
  66. 0 0
      src/static/novnc/app/locale/ja.json
  67. 0 0
      src/static/novnc/app/locale/ko.json
  68. 0 0
      src/static/novnc/app/locale/nl.json
  69. 0 0
      src/static/novnc/app/locale/pl.json
  70. 0 0
      src/static/novnc/app/locale/pt_BR.json
  71. 0 0
      src/static/novnc/app/locale/ru.json
  72. 0 0
      src/static/novnc/app/locale/sv.json
  73. 0 0
      src/static/novnc/app/locale/tr.json
  74. 0 0
      src/static/novnc/app/locale/zh_CN.json
  75. 0 0
      src/static/novnc/app/locale/zh_TW.json
  76. 0 0
      src/static/novnc/app/localization.js
  77. 0 0
      src/static/novnc/app/sounds/CREDITS
  78. 0 0
      src/static/novnc/app/sounds/bell.mp3
  79. 0 0
      src/static/novnc/app/sounds/bell.oga
  80. 0 0
      src/static/novnc/app/styles/Orbitron700.ttf
  81. 0 0
      src/static/novnc/app/styles/Orbitron700.woff
  82. 0 0
      src/static/novnc/app/styles/base.css
  83. 0 0
      src/static/novnc/app/ui.js
  84. 0 0
      src/static/novnc/app/webutil.js
  85. 0 0
      src/static/novnc/core/base64.js
  86. 0 0
      src/static/novnc/core/decoders/copyrect.js
  87. 0 0
      src/static/novnc/core/decoders/hextile.js
  88. 0 0
      src/static/novnc/core/decoders/raw.js
  89. 0 0
      src/static/novnc/core/decoders/rre.js
  90. 0 0
      src/static/novnc/core/decoders/tight.js
  91. 0 0
      src/static/novnc/core/decoders/tightpng.js
  92. 0 0
      src/static/novnc/core/deflator.js
  93. 0 0
      src/static/novnc/core/des.js
  94. 0 0
      src/static/novnc/core/display.js
  95. 0 0
      src/static/novnc/core/encodings.js
  96. 0 0
      src/static/novnc/core/inflator.js
  97. 0 0
      src/static/novnc/core/input/domkeytable.js
  98. 0 0
      src/static/novnc/core/input/fixedkeys.js
  99. 0 0
      src/static/novnc/core/input/gesturehandler.js
  100. 0 0
      src/static/novnc/core/input/keyboard.js

+ 24 - 0
Dockerfile

@@ -0,0 +1,24 @@
+# yup, python 3.11!
+FROM python:3.11-alpine
+
+# install nginx y otras cosas
+RUN apk add bash netcat-openbsd curl vim jq rsync gcc musl-dev libvirt-dev openssh openssh-client sshpass
+
+# Crear directorio SSH
+RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
+
+COPY requirements.txt requirements.txt
+RUN mkdir -p /usr/local/lib/virtmanager
+RUN pip install --user --upgrade pip && pip install --user --no-cache-dir -r requirements.txt
+
+COPY ./src /usr/local/lib/virtmanager
+
+ENV PATH="/root/.local/bin:$PATH"
+
+RUN chgrp -R 0 /usr/local/lib/virtmanager && \
+    chmod -R g=u /usr/local/lib/virtmanager
+
+# change our working directory to the django projcet roo
+WORKDIR /usr/local/lib/virtmanager
+
+ENTRYPOINT ["/usr/local/lib/virtmanager/entrypoint.sh"]

+ 32 - 0
Makefile

@@ -0,0 +1,32 @@
+export REGISTRY=registry.reymota.es
+export IMG_VERSION=1.12
+export NAMESPACE=virtmanager
+
+all: install
+
+imagen:
+
+	echo "Creando imagen con version '${IMG_VERSION}' en el registry '${REGISTRY}'"
+
+	docker build --no-cache -t ${REGISTRY}/virtmanager:${IMG_VERSION} -f Dockerfile .
+	docker push ${REGISTRY}/virtmanager:${IMG_VERSION}
+
+ns:
+	-cat namespace.yaml | sed -e "s/<NS>/${NAMESPACE}/" |kubectl create -f -
+
+install:
+	-cat reg-secret.yaml| sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
+	-cat env-prod-configmap.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
+
+	-cat virtmanager-deployment.yaml | sed -e "s/<NS>/${NAMESPACE}/" | sed -e "s/<TAG>/${IMG_VERSION}/" | kubectl create -f -
+	-cat virtmanager-ingress.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
+
+clean:
+	-cat virtmanager-deployment.yaml | sed -e "s/<NS>/${NAMESPACE}/" | sed -e "s/<TAG>/${IMG_VERSION}/" | kubectl delete -f -
+
+	-cat env-prod-configmap.yaml  | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
+
+	-cat reg-secret.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
+	-cat virtmanager-ingress.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
+
+

+ 11 - 0
env-prod-configmap.yaml

@@ -0,0 +1,11 @@
+apiVersion: v1
+data:
+  SSH_HOST: 192.168.1.116
+  SECRET_KEY: change_me
+  SSH_USER: creylopez
+  SSH_PASSWORD: Rey-1176
+  SSH_PORT: "22"
+kind: ConfigMap
+metadata:
+  name: env-prod
+  namespace: <NS>

+ 1 - 0
lanza.sh

@@ -0,0 +1 @@
+docker run --rm -it   -e SSH_HOST=192.168.1.116   -e SSH_USER=creylopez   -e SSH_PASSWORD=Rey-1176   -e SSH_PORT=22 registry.reymota.es/virtmanager:1.12

+ 7 - 0
namespace.yaml

@@ -0,0 +1,7 @@
+###################################################
+# Namespace <NS>
+###################################################
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: <NS>

+ 8 - 0
reg-secret.yaml

@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: myregistrykey
+  namespace: <NS>
+data:
+  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5yZXltb3RhLmVzIjogewoJCQkiYXV0aCI6ICJZM0psZVd4dmNHVjZPbEpsZVMweE1UYzIiCgkJfQoJfQp9
+type: kubernetes.io/dockerconfigjson

+ 2 - 1
requirements.txt

@@ -1,3 +1,4 @@
 fastapi
 uvicorn[standard]
-python-multipart
+python-multipart
+libvirt-python

+ 0 - 0
DASHBOARD.md → src/DASHBOARD.md


+ 2 - 2
README.md → src/README.md

@@ -81,8 +81,8 @@ Para que VirtManager se inicie automáticamente con el sistema:
    [Service]
    Type=simple
    User=root
-   WorkingDirectory=/home/creylopez/virtmanager
-   ExecStart=/home/creylopez/virtmanager/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
+   WorkingDirectory=/usr/local/lib/virtmanager/
+   ExecStart=/usr/local/lib/virtmanager/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
    Restart=always
 
    [Install]

+ 0 - 0
RUNNING.md → src/RUNNING.md


+ 0 - 0
SOLUTION.md → src/SOLUTION.md


+ 0 - 0
TROUBLESHOOTING.md → src/TROUBLESHOOTING.md


+ 1 - 1
app/main.py → src/app/main.py

@@ -37,7 +37,7 @@ class BootOrder(BaseModel):
     order: list[str]
 
 # Connect to libvirt
-conn = libvirt.open('qemu:///system')
+conn = libvirt.open('qemu+ssh://creylopez@192.168.1.116/system')
 
 @app.get("/")
 async def root():

+ 0 - 0
create_disk.sh → src/create_disk.sh


+ 35 - 0
src/entrypoint.sh

@@ -0,0 +1,35 @@
+#!/bin/bash
+set -e
+
+# Variables esperadas:
+# SSH_HOST
+# SSH_USER
+# SSH_PASSWORD (solo para el primer copiado de la clave)
+# SSH_PORT (opcional, default 22)
+
+SSH_PORT=${SSH_PORT:-22}
+KEY_PATH="/root/.ssh/id_rsa"
+
+# Generar clave si no existe
+if [ ! -f "$KEY_PATH" ]; then
+    echo "Generando clave SSH..."
+    ssh-keygen -t rsa -b 4096 -f "$KEY_PATH" -N ""
+fi
+
+# Copiar clave pública al servidor remoto
+echo "Copiando clave pública al servidor remoto..."
+sshpass -p "$SSH_PASSWORD" ssh-copy-id \
+    -p "$SSH_PORT" \
+    -o StrictHostKeyChecking=no \
+    "${SSH_USER}@${SSH_HOST}"
+
+echo "Clave copiada correctamente."
+
+# Probar conexión
+echo "Probando conexión SSH..."
+ssh -p "$SSH_PORT" "${SSH_USER}@${SSH_HOST}" "echo 'Conexión SSH exitosa'"
+
+
+exec uvicorn app.main:app --host 0.0.0.0 --port 8000
+# Mantener el contenedor vivo (opcional)
+exec "$@"

+ 0 - 0
pyproject.toml → src/pyproject.toml


+ 0 - 0
static/app.js → src/static/app.js


+ 0 - 0
static/dashboard.js → src/static/dashboard.js


+ 1 - 1
static/index.html → src/static/index.html

@@ -548,7 +548,7 @@
         <div class="sidebar" id="sidebar">
             <div class="sidebar-header">
                 <h4><i class="bi bi-display"></i> VirtManager</h4>
-                <p>Virtual Machine Dashboard</p>
+                <p>Panel de Máquinas Virtuales</p>
             </div>
             
             <div class="sidebar-vms" id="vmList">

+ 0 - 0
static/index.html.bak → src/static/index.html.bak


+ 0 - 0
static/index_old.html → src/static/index_old.html


+ 0 - 0
static/novnc/app/error-handler.js → src/static/novnc/app/error-handler.js


+ 0 - 0
static/novnc/app/images/alt.svg → src/static/novnc/app/images/alt.svg


+ 0 - 0
static/novnc/app/images/clipboard.svg → src/static/novnc/app/images/clipboard.svg


+ 0 - 0
static/novnc/app/images/connect.svg → src/static/novnc/app/images/connect.svg


+ 0 - 0
static/novnc/app/images/ctrl.svg → src/static/novnc/app/images/ctrl.svg


+ 0 - 0
static/novnc/app/images/ctrlaltdel.svg → src/static/novnc/app/images/ctrlaltdel.svg


+ 0 - 0
static/novnc/app/images/disconnect.svg → src/static/novnc/app/images/disconnect.svg


+ 0 - 0
static/novnc/app/images/drag.svg → src/static/novnc/app/images/drag.svg


+ 0 - 0
static/novnc/app/images/error.svg → src/static/novnc/app/images/error.svg


+ 0 - 0
static/novnc/app/images/esc.svg → src/static/novnc/app/images/esc.svg


+ 0 - 0
static/novnc/app/images/expander.svg → src/static/novnc/app/images/expander.svg


+ 0 - 0
static/novnc/app/images/fullscreen.svg → src/static/novnc/app/images/fullscreen.svg


+ 0 - 0
static/novnc/app/images/handle.svg → src/static/novnc/app/images/handle.svg


+ 0 - 0
static/novnc/app/images/handle_bg.svg → src/static/novnc/app/images/handle_bg.svg


+ 0 - 0
static/novnc/app/images/icons/Makefile → src/static/novnc/app/images/icons/Makefile


+ 0 - 0
static/novnc/app/images/icons/novnc-120x120.png → src/static/novnc/app/images/icons/novnc-120x120.png


+ 0 - 0
static/novnc/app/images/icons/novnc-144x144.png → src/static/novnc/app/images/icons/novnc-144x144.png


+ 0 - 0
static/novnc/app/images/icons/novnc-152x152.png → src/static/novnc/app/images/icons/novnc-152x152.png


+ 0 - 0
static/novnc/app/images/icons/novnc-16x16.png → src/static/novnc/app/images/icons/novnc-16x16.png


+ 0 - 0
static/novnc/app/images/icons/novnc-192x192.png → src/static/novnc/app/images/icons/novnc-192x192.png


+ 0 - 0
static/novnc/app/images/icons/novnc-24x24.png → src/static/novnc/app/images/icons/novnc-24x24.png


+ 0 - 0
static/novnc/app/images/icons/novnc-32x32.png → src/static/novnc/app/images/icons/novnc-32x32.png


+ 0 - 0
static/novnc/app/images/icons/novnc-48x48.png → src/static/novnc/app/images/icons/novnc-48x48.png


+ 0 - 0
static/novnc/app/images/icons/novnc-60x60.png → src/static/novnc/app/images/icons/novnc-60x60.png


+ 0 - 0
static/novnc/app/images/icons/novnc-64x64.png → src/static/novnc/app/images/icons/novnc-64x64.png


+ 0 - 0
static/novnc/app/images/icons/novnc-72x72.png → src/static/novnc/app/images/icons/novnc-72x72.png


+ 0 - 0
static/novnc/app/images/icons/novnc-76x76.png → src/static/novnc/app/images/icons/novnc-76x76.png


+ 0 - 0
static/novnc/app/images/icons/novnc-96x96.png → src/static/novnc/app/images/icons/novnc-96x96.png


+ 0 - 0
static/novnc/app/images/icons/novnc-icon-sm.svg → src/static/novnc/app/images/icons/novnc-icon-sm.svg


+ 0 - 0
static/novnc/app/images/icons/novnc-icon.svg → src/static/novnc/app/images/icons/novnc-icon.svg


+ 0 - 0
static/novnc/app/images/info.svg → src/static/novnc/app/images/info.svg


+ 0 - 0
static/novnc/app/images/keyboard.svg → src/static/novnc/app/images/keyboard.svg


+ 0 - 0
static/novnc/app/images/power.svg → src/static/novnc/app/images/power.svg


+ 0 - 0
static/novnc/app/images/settings.svg → src/static/novnc/app/images/settings.svg


+ 0 - 0
static/novnc/app/images/tab.svg → src/static/novnc/app/images/tab.svg


+ 0 - 0
static/novnc/app/images/toggleextrakeys.svg → src/static/novnc/app/images/toggleextrakeys.svg


+ 0 - 0
static/novnc/app/images/warning.svg → src/static/novnc/app/images/warning.svg


+ 0 - 0
static/novnc/app/images/windows.svg → src/static/novnc/app/images/windows.svg


+ 0 - 0
static/novnc/app/locale/README → src/static/novnc/app/locale/README


+ 0 - 0
static/novnc/app/locale/cs.json → src/static/novnc/app/locale/cs.json


+ 0 - 0
static/novnc/app/locale/de.json → src/static/novnc/app/locale/de.json


+ 0 - 0
static/novnc/app/locale/el.json → src/static/novnc/app/locale/el.json


+ 0 - 0
static/novnc/app/locale/es.json → src/static/novnc/app/locale/es.json


+ 0 - 0
static/novnc/app/locale/fr.json → src/static/novnc/app/locale/fr.json


+ 0 - 0
static/novnc/app/locale/ja.json → src/static/novnc/app/locale/ja.json


+ 0 - 0
static/novnc/app/locale/ko.json → src/static/novnc/app/locale/ko.json


+ 0 - 0
static/novnc/app/locale/nl.json → src/static/novnc/app/locale/nl.json


+ 0 - 0
static/novnc/app/locale/pl.json → src/static/novnc/app/locale/pl.json


+ 0 - 0
static/novnc/app/locale/pt_BR.json → src/static/novnc/app/locale/pt_BR.json


+ 0 - 0
static/novnc/app/locale/ru.json → src/static/novnc/app/locale/ru.json


+ 0 - 0
static/novnc/app/locale/sv.json → src/static/novnc/app/locale/sv.json


+ 0 - 0
static/novnc/app/locale/tr.json → src/static/novnc/app/locale/tr.json


+ 0 - 0
static/novnc/app/locale/zh_CN.json → src/static/novnc/app/locale/zh_CN.json


+ 0 - 0
static/novnc/app/locale/zh_TW.json → src/static/novnc/app/locale/zh_TW.json


+ 0 - 0
static/novnc/app/localization.js → src/static/novnc/app/localization.js


+ 0 - 0
static/novnc/app/sounds/CREDITS → src/static/novnc/app/sounds/CREDITS


+ 0 - 0
static/novnc/app/sounds/bell.mp3 → src/static/novnc/app/sounds/bell.mp3


+ 0 - 0
static/novnc/app/sounds/bell.oga → src/static/novnc/app/sounds/bell.oga


+ 0 - 0
static/novnc/app/styles/Orbitron700.ttf → src/static/novnc/app/styles/Orbitron700.ttf


+ 0 - 0
static/novnc/app/styles/Orbitron700.woff → src/static/novnc/app/styles/Orbitron700.woff


+ 0 - 0
static/novnc/app/styles/base.css → src/static/novnc/app/styles/base.css


+ 0 - 0
static/novnc/app/ui.js → src/static/novnc/app/ui.js


+ 0 - 0
static/novnc/app/webutil.js → src/static/novnc/app/webutil.js


+ 0 - 0
static/novnc/core/base64.js → src/static/novnc/core/base64.js


+ 0 - 0
static/novnc/core/decoders/copyrect.js → src/static/novnc/core/decoders/copyrect.js


+ 0 - 0
static/novnc/core/decoders/hextile.js → src/static/novnc/core/decoders/hextile.js


+ 0 - 0
static/novnc/core/decoders/raw.js → src/static/novnc/core/decoders/raw.js


+ 0 - 0
static/novnc/core/decoders/rre.js → src/static/novnc/core/decoders/rre.js


+ 0 - 0
static/novnc/core/decoders/tight.js → src/static/novnc/core/decoders/tight.js


+ 0 - 0
static/novnc/core/decoders/tightpng.js → src/static/novnc/core/decoders/tightpng.js


+ 0 - 0
static/novnc/core/deflator.js → src/static/novnc/core/deflator.js


+ 0 - 0
static/novnc/core/des.js → src/static/novnc/core/des.js


+ 0 - 0
static/novnc/core/display.js → src/static/novnc/core/display.js


+ 0 - 0
static/novnc/core/encodings.js → src/static/novnc/core/encodings.js


+ 0 - 0
static/novnc/core/inflator.js → src/static/novnc/core/inflator.js


+ 0 - 0
static/novnc/core/input/domkeytable.js → src/static/novnc/core/input/domkeytable.js


+ 0 - 0
static/novnc/core/input/fixedkeys.js → src/static/novnc/core/input/fixedkeys.js


+ 0 - 0
static/novnc/core/input/gesturehandler.js → src/static/novnc/core/input/gesturehandler.js


+ 0 - 0
static/novnc/core/input/keyboard.js → src/static/novnc/core/input/keyboard.js


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff