Note:

Uso de un inventario dinámico de OCI con Oracle Linux Automation Engine

Introducción

Oracle Linux Automation Engine, el software de código abierto para el aprovisionamiento y la gestión de la configuración, utiliza un archivo de inventario para trabajar con nodos o hosts gestionados en la infraestructura. Este archivo de inventario contiene una lista de servidores, sus direcciones IP y otra información de conexión opcional.

Un archivo de inventario estático funciona bien si su infraestructura apenas cambia.

Sin embargo, es probable que la infraestructura esté en constante cambio al utilizar la nube. Por lo tanto, sería genial tener una manera de tener su inventario actualizado dinámicamente a medida que los hosts van y vienen.

Objetivos

En este tutorial, aprenderá a:

Requisitos

Despliegue de Oracle Linux Automation Engine

Nota: Si se ejecuta en su propio arrendamiento, lea el proyecto linux-virt-labs GitHub README.md y complete los requisitos antes de desplegar el entorno de prácticas.

  1. Abra un terminal en el escritorio Luna.

  2. Clone el proyecto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Cambie al directorio de trabajo.

    cd linux-virt-labs/olam
    
  4. Instale las recopilaciones necesarias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Actualice la configuración de la instancia de Oracle Linux.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
      2:
        instance_name: "ol-host"
        type: "remote"
    EOF
    
  6. Despliegue el entorno de prácticas.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    El entorno de prácticas gratuito necesita la variable adicional local_python_interpreter, que define ansible_python_interpreter para las reproducciones que se ejecutan en localhost. Esta variable es necesaria porque el entorno instala el paquete de RPM para el SDK para Python de Oracle Cloud Infrastructure, ubicado en los módulos python3.6.

    La unidad de despliegue por defecto utiliza la CPU AMD y Oracle Linux 8. Para utilizar una CPU de Intel u Oracle Linux 9, agregue -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando de despliegue.

    Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, la instalación de Oracle Linux está completa y las instancias están listas. Tome nota de la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega y cualquier otra información de despliegue necesaria durante la ejecución del laboratorio.

Instalación del nodo de control de Oracle Linux Automation Engine

El nodo de control es el sistema desde el que se ejecutan los cuadernos de estrategias de Oracle Linux Automation Engine. Antes de ejecutar cuadernos de estrategias, es necesario instalar los paquetes de Oracle Linux Automation Engine.

  1. Abra un nuevo terminal y conéctese mediante SSH al sistema ol-control-node.

    ssh oracle@<ip_address_of_instance>
    
  2. Instale el paquete y las dependencias de Oracle Linux Automation Engine.

    sudo dnf install -y ansible-core
    

    El paquete ansible-core está disponible en el repositorio ol8_appstream.

  3. Pruebe la instalación del paquete.

    ansible --version
    

    Revise la salida y busque la versión por defecto de Python Oracle Linux Automation Manager. Ese es el entorno en el que debemos instalar el SDK para Python de Oracle Cloud Infrastructure (OCI).

    Nota: Si la salida muestra ERROR: Ansible necesita que la codificación de configuración regional sea UTF-8; Detected None. (Ninguno detectado), esto indica un valor de configuración regional incorrecto para ansible. Corrija el problema definiendo estas dos variables de entorno:

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

Configurar el SDK de Oracle Cloud Infrastructure para Python

El plugin de inventario dinámico de OCI necesita una configuración de SDK de OCI para Python en funcionamiento en el nodo de control. Podemos instalar el SDK de OCI mediante el RPM o PIP de Oracle Linux, el instalador de paquetes para Python.

  1. Instale el SDK de OCI para Python mediante PIP.

    1. Instale los paquetes y las dependencias para PIP.

      sudo dnf install -y python3.12-pip python3.12-setuptools
      
    2. Instalar los paquetes de Python

      /usr/bin/python3.12 -m pip install oci
      

      Agregue la opción --proxy si está detrás de un proxy. Los detalles están disponibles en la ayuda ejecutando el comando python3.12 -m pip help install.

  2. Pruebe la instalación del SDK de OCI para Python imprimiendo su versión.

    python3.12 -c "import oci;print(oci.__version__)"
    
  3. Cree el directorio de configuración por defecto del SDK de OCI.

    mkdir -p ~/.oci
    
  4. Crear el archivo de configuración por defecto del SDK

    El laboratorio gratuito proporciona una configuración de SDK generada previamente, que podemos copiar en el sistema ol-control-node mediante scp.

    1. Abra un terminal nuevo desde el entorno de escritorio.

    2. Copie todos los archivos de configuración del SDK en el sistema ol-control-node.

      scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
      
      exit
      

    Si sigue este tutorial fuera del entorno de prácticas gratuito, consulte las instrucciones proporcionadas en las secciones Archivo de configuración de SDK y CLI y Claves y OCID necesarios de la documentación de OCI para generar el archivo de configuración de OCI.

  5. Cambie a la ventana de terminal conectada al sistema ol-control-node.

  6. Actualice la ubicación de key_file en el archivo de configuración de SDK.

    Al copiar el archivo de configuración de SDK del entorno de escritorio, debemos modificar la parte del directorio raíz del usuario de key_file.

    sed -i 's/luna.user/oracle/g' ~/.oci/config
    
  7. Cree un script de Python de prueba para verificar que el SDK funciona.

    cat << EOF | tee test.py > /dev/null
    import oci
    object_storage_client = oci.object_storage.ObjectStorageClient(oci.config.from_file())
    result = object_storage_client.get_namespace()
    print("Current object storage namespace: {}".format(result.data))
    EOF
    

    El script test.py muestra el espacio de nombres de Object Storage para el arrendamiento y el compartimento de OCI configurados.

  8. Ejecute el script

    python3.12 test.py
    

    El script de prueba imprime correctamente el espacio de nombres único del arrendamiento configurado.

Instalación de la recopilación de Ansible de Oracle Cloud Infrastructure

La recopilación de Ansible de OCI contiene un juego de módulos para automatizar el aprovisionamiento y la configuración de la infraestructura en la nube, la orquestación de procesos operativos complejos y el despliegue y la actualización de los activos de software.

  1. Cree un directorio de proyecto.

    mkdir ~/myproject
    
  2. Cree un archivo de requisitos.

    cat << EOF | tee ~/myproject/requirements.yml > /dev/null
    ---
    collections:
      - name: oracle.oci
    EOF
    
  3. Instale la recopilación de Ansible de OCI.

    ansible-galaxy collection install -r ~/myproject/requirements.yml
    

    Si ha instalado una versión anterior, ejecute el comando con la opción --force para obtener la versión más reciente.

    ansible-galaxy collection install --force oracle.oci
    

Trabajar con OCI Dynamic Inventory

Oracle incluye su plugin de inventario dinámico en la recopilación de Ansible de OCI.

  1. Configure el plugin de inventario mediante la creación de un origen de configuración YAML.

    El nombre de archivo de origen debe ser <filename>.oci.yml o <filename>.oci.yaml. Donde <filename> es un identificador útil definido por el usuario.

    cat << EOF | tee ~/myproject/myproject.oci.yml > /dev/null
    ---
    plugin: oracle.oci.oci
    
    # Optional fields to specify oci connection config:
    config_file: ~/.oci/config
    config_profile: DEFAULT
    EOF
    
  2. Pruebe el plugin de inventario creando un gráfico de inventario.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    La salida muestra una serie de advertencias y errores. Entonces, ¿qué salió mal?

    El error se produce porque el plugin necesita conocer el OCID del compartimento. Si proporciona el OCID de arrendamiento en lugar del OCID de compartimento y tiene los permisos correctos, el plugin generará un inventario para todo el arrendamiento.

    Dado que el plugin no puede leer la información de OCID del compartimento directamente desde el archivo de configuración de SDK, agréguela al archivo de origen de configuración del plugin.

  3. Extraiga el OCID de compartimento del archivo de configuración del SDK y asígnelo a la variable comp_ocid.

    comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
    
  4. Agregue un parámetro de compartimento al archivo de origen del plugin.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    compartments:
      - compartment_ocid: "$comp_ocid"
        fetch_compute_hosts: true
    EOF
    

    El valor fetch_compute_hosts definido en true da como resultado que el inventario solo recopile información en hosts informáticos e ignore otros tipos de instancias desplegados en el compartimento.

  5. Vuelva a ejecutar la prueba.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    En nuestro ejemplo, se muestran las instancias informáticas disponibles en el compartimento como una lista de grupos de inventario designados por el carácter @ y se muestra la dirección IP pública de la instancia.

    ¿Qué ocurre si queremos la dirección IP privada?

    La toma de la dirección IP privada es necesaria en función de la ubicación física del nodo de controlador o de la topología de red configurada en la infraestructura en la nube. Otro motivo para obtener la dirección IP privada es cuando las instancias informáticas solicitadas solo tienen una dirección IP privada.

  6. Cambie el parámetro de formato de nombre de host del plugin actualizando el archivo de origen de configuración del plugin.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    hostname_format_preferences:
      - "private_ip"
      - "public_ip"
    EOF
    

    El formato de ejemplo anterior priorizará la dirección IP privada de un sistema sobre la dirección IP pública. Para obtener más información sobre esta configuración, consulte Preferencias de formato de nombre de host en la documentación.

  7. Vuelva a probar el plugin.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    La salida ahora muestra la dirección IP privada.

Ejecutar un manual

Con la configuración y configuración del inventario dinámico, podemos usarlo para ejecutar un manual simple. Asegúrese de activar el acceso SSH entre los nodos de control y los remotos. Lo hemos configurado mediante conexiones SSH sin contraseña durante el despliegue inicial de las instancias.

  1. Crea un manual que haga ping al anfitrión.

    cat << EOF | tee ~/myproject/ping.yml > /dev/null
    ---
    - hosts: all,!$(hostname -i)
      tasks:
      - name: Ansible ping test
        ansible.builtin.ping:
    EOF
    

    Oracle Linux Automation Engine espera una lista separada por comas de hosts o grupos después de la entrada - hosts:, y ! indica que debe excluir esas entradas. La entrada all hará ping a cada host mostrado en el inventario como @all dentro del grupo de nivel superior. Puede modificar este cuaderno de estrategias para utilizar un grupo diferente de la salida del gráfico eliminando el carácter @ de su nombre e introduciendo ese nombre en la entrada - hosts:.

  2. Ejecute el manual.

    ansible-playbook -u opc -i ~/myproject/myproject.oci.yml ~/myproject/ping.yml
    

    Acepte la huella de clave de ECDSA cuando se le solicite.

    La opción -i define el archivo de inventario dinámico utilizado.

    La opción -u define el usuario SSH remoto al intentar una conexión.

Pasos Siguientes

Al completar la ejecución del cuaderno de estrategias con un estado ok, se confirma que Oracle Linux Automation Engine utiliza correctamente el inventario dinámico de OCI para comunicarse con la instancia remota que detecta en el compartimento. Continúe aprendiendo y utilice esta función para ayudar a gestionar su conjunto de instancias de OCI y realizar tareas de administración rutinarias en Oracle Linux.

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.