dhcp-symfony #1

Merged
lgromero merged 18 commits from dhcp-symfony into main 2024-09-30 12:13:29 +02:00
Collaborator

Pull Request para resolver los tickets refs #152 #153 #156 #157. El objetivo de la tarea es diseñar un componente ogdhcp en Symfony y documentado con Swagger con API para que se comunique con el API del servidor Kea DHCP para aprovisionar IPs a máquinas remotas.

El código del API del controlador se encuentra en ogdhcp/src/DhcpBundle/Controller/DhcpController.php. Ahí viene la especificación de cada endpoint junto con unos comentarios que procesa swagger para la documentación. A mayores los enpoints utilizan unos servicios definidos en ogdhcp/src/DhcpBundle/Service/CurlKeaService.php que hacen las llamadas a Kea DHCP y crea backups de configuración en caso de escritura.

Para probar el componente:

  • Instalar Kea DHCP:
curl -1sLf \
  'https://dl.cloudsmith.io/public/isc/kea-2-0/setup.deb.sh' \
  | sudo -E bash

sudo apt-get install isc-kea-common
sudo apt-get install isc-kea-dhcp4-server
sudo apt-get install isc-kea-dhcp6-server
sudo apt-get install isc-kea-dhcp-ddns-server
sudo apt-get install isc-kea-ctrl-agent

Más adelante ese script se integrará con el script de instalación del componente en otra PR.

  • Descargar composer.phar

Modificar destination_path="/opt/ogdhcp" por el directorio donde está alojado el repositorio

function downloadComposer() {
    echoAndLog "Downloading composer.phar..."

   destination_path="/opt/ogdhcp"

    # Crear el directorio de trabajo si no existe
    mkdir -p $destination_path/bin

    # Cambiar al directorio de trabajo
    pushd $destination_path/bin

    # Descargar composer.phar
    curl -sS https://getcomposer.org/installer | php

    # Comprobar si la descarga fue exitosa
    if [ ! -f composer.phar ]; then
        echo "Failed to download composer.phar"
        popd
        return 1
    fi
    echo "composer.phar downloaded and moved to /opt/ogdhcp/bin"
    return 0
}
  • Lanzar composer install

function runComposer() {

# Cambiar al directorio donde está composer.phar
pushd /opt/ogdhcp/bin

# Ejecutar composer.phar
 php composer.phar install

# Comprobar si la ejecución fue exitosa
if [ $? -ne 0 ]; then
    echo "Failed to run composer.phar"
    popd
    return 1
fi

# Volver al directorio original
popd

echo "composer.phar ran successfully and dependencies were installed"
return 0

}

  • Descargar swagger
    Modificar destination_path="/opt/ogdhcp" por el directorio donde está alojado el repositorio
function install_swagger_ui {
    # Define la URL del archivo de Swagger UI que quieres descargar
    swagger_ui_url="https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip"

    # Define la ruta donde quieres descomprimir Swagger UI
    swagger_ui_path="/tmp/swagger-ui"

    # Define la ruta de destino para los archivos de Swagger UI
    destination_path="/opt/ogdhcp"

    # Crea los directorios si no existen
    mkdir -p $swagger_ui_path
    mkdir -p $destination_path

    # Descarga el archivo de Swagger UI
    wget $swagger_ui_url -O /tmp/swagger-ui.zip

    # Descomprime el archivo de Swagger UI en la ruta especificada
    unzip /tmp/swagger-ui.zip -d $swagger_ui_path

    # Copia los archivos de Swagger UI al directorio de destino
    cp -r $swagger_ui_path/swagger-ui-master/dist/* $destination_path/public

    # Elimina el archivo descargado y el directorio temporal
    rm /tmp/swagger-ui.zip
    rm -r $swagger_ui_path
    # Añade el script de swagger en public
    $destination_path/vendor/bin/openapi $destination_path/src/DhcpBundle/Controller/ -o $destination_path/public/swagger.json
    echo "Swagger UI instalado en $destination_path/public"
}
  • Levantar listener de php:

En el directorio del repositorio:

php -S localhost8001 -t public/

En caso de que se esté usando una máquina remota sustituir localhost por la ip de la máquina

  • Abrir navegador con la ip del listener

Escribir en el navegador localhost8001/index.html. Se abrirá la página de swagger. Escribir en el buscador de arriba http://localhost:8001/swagger.json para servir el swagger generado a partir de la documentación del controlador.

En esa página se podrá ver los distintos endpoints disponibles de la aplicación. Ejecutar cada uno y revisar que devuelve correctamente los cambios.

Pull Request para resolver los tickets refs #152 #153 #156 #157. El objetivo de la tarea es diseñar un componente ogdhcp en Symfony y documentado con Swagger con API para que se comunique con el API del servidor Kea DHCP para aprovisionar IPs a máquinas remotas. El código del API del controlador se encuentra en ogdhcp/src/DhcpBundle/Controller/DhcpController.php. Ahí viene la especificación de cada endpoint junto con unos comentarios que procesa swagger para la documentación. A mayores los enpoints utilizan unos servicios definidos en ogdhcp/src/DhcpBundle/Service/CurlKeaService.php que hacen las llamadas a Kea DHCP y crea backups de configuración en caso de escritura. Para probar el componente: - Instalar Kea DHCP: ``` curl -1sLf \ 'https://dl.cloudsmith.io/public/isc/kea-2-0/setup.deb.sh' \ | sudo -E bash sudo apt-get install isc-kea-common sudo apt-get install isc-kea-dhcp4-server sudo apt-get install isc-kea-dhcp6-server sudo apt-get install isc-kea-dhcp-ddns-server sudo apt-get install isc-kea-ctrl-agent ``` Más adelante ese script se integrará con el script de instalación del componente en otra PR. - Descargar composer.phar Modificar destination_path="/opt/ogdhcp" por el directorio donde está alojado el repositorio ``` function downloadComposer() { echoAndLog "Downloading composer.phar..." destination_path="/opt/ogdhcp" # Crear el directorio de trabajo si no existe mkdir -p $destination_path/bin # Cambiar al directorio de trabajo pushd $destination_path/bin # Descargar composer.phar curl -sS https://getcomposer.org/installer | php # Comprobar si la descarga fue exitosa if [ ! -f composer.phar ]; then echo "Failed to download composer.phar" popd return 1 fi echo "composer.phar downloaded and moved to /opt/ogdhcp/bin" return 0 } ``` - Lanzar composer install function runComposer() { # Cambiar al directorio donde está composer.phar pushd /opt/ogdhcp/bin # Ejecutar composer.phar php composer.phar install # Comprobar si la ejecución fue exitosa if [ $? -ne 0 ]; then echo "Failed to run composer.phar" popd return 1 fi # Volver al directorio original popd echo "composer.phar ran successfully and dependencies were installed" return 0 } - Descargar swagger Modificar destination_path="/opt/ogdhcp" por el directorio donde está alojado el repositorio ``` function install_swagger_ui { # Define la URL del archivo de Swagger UI que quieres descargar swagger_ui_url="https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip" # Define la ruta donde quieres descomprimir Swagger UI swagger_ui_path="/tmp/swagger-ui" # Define la ruta de destino para los archivos de Swagger UI destination_path="/opt/ogdhcp" # Crea los directorios si no existen mkdir -p $swagger_ui_path mkdir -p $destination_path # Descarga el archivo de Swagger UI wget $swagger_ui_url -O /tmp/swagger-ui.zip # Descomprime el archivo de Swagger UI en la ruta especificada unzip /tmp/swagger-ui.zip -d $swagger_ui_path # Copia los archivos de Swagger UI al directorio de destino cp -r $swagger_ui_path/swagger-ui-master/dist/* $destination_path/public # Elimina el archivo descargado y el directorio temporal rm /tmp/swagger-ui.zip rm -r $swagger_ui_path # Añade el script de swagger en public $destination_path/vendor/bin/openapi $destination_path/src/DhcpBundle/Controller/ -o $destination_path/public/swagger.json echo "Swagger UI instalado en $destination_path/public" } ``` - Levantar listener de php: En el directorio del repositorio: ``` php -S localhost8001 -t public/ ``` En caso de que se esté usando una máquina remota sustituir localhost por la ip de la máquina - Abrir navegador con la ip del listener Escribir en el navegador localhost8001/index.html. Se abrirá la página de swagger. Escribir en el buscador de arriba `http://localhost:8001/swagger.json` para servir el swagger generado a partir de la documentación del controlador. En esa página se podrá ver los distintos endpoints disponibles de la aplicación. Ejecutar cada uno y revisar que devuelve correctamente los cambios.
lgromero added 6 commits 2024-01-29 13:51:22 +01:00
lgromero added 2 commits 2024-01-29 14:43:22 +01:00
lgromero added 1 commit 2024-01-29 14:48:57 +01:00
Poster
Collaborator

Puntos que tienes que revisar:

  • Todos los endpoints se rigen con el estandar de openapi

  • Los endpoints devuelven o hacen los cambios perfectamente en la configuración de kea dhcp

  • En el directorio de trabajo (en este caso /opt/ogdhcp/etc/kea/backup) se genera un backup para cada modificacion

  • Para cada modificación se escribe su configuración en /etc/kea/kea-dhcp4.conf (algo asi)

  • Revisa el codigo y que lo veas optimo

Puntos que tienes que revisar: - Todos los endpoints se rigen con el estandar de openapi - Los endpoints devuelven o hacen los cambios perfectamente en la configuración de kea dhcp - En el directorio de trabajo (en este caso /opt/ogdhcp/etc/kea/backup) se genera un backup para cada modificacion - Para cada modificación se escribe su configuración en /etc/kea/kea-dhcp4.conf (algo asi) - Revisa el codigo y que lo veas optimo
lgromero added 1 commit 2024-01-30 11:53:59 +01:00
lgromero added 1 commit 2024-02-15 09:26:58 +01:00
lgromero added 1 commit 2024-02-15 09:27:53 +01:00
lgromero added 1 commit 2024-02-15 09:33:46 +01:00
lgromero force-pushed dhcp-symfony from c5510ac374 to 2f12fc40fe 2024-02-15 09:37:15 +01:00 Compare
lgromero added 1 commit 2024-02-16 11:31:57 +01:00
apuente added 1 commit 2024-03-13 10:54:13 +01:00
apuente added 1 commit 2024-03-20 13:25:38 +01:00
lgromero added 1 commit 2024-09-30 12:05:45 +02:00
lgromero added 1 commit 2024-09-30 12:09:21 +02:00
lgromero merged commit 68a4db6d6f into main 2024-09-30 12:13:29 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: opengnsys/ogdhcp#1
There is no content yet.