Note:
- Este tutorial está disponible en un entorno de prácticas gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
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:
- Configuración de Oracle Linux Automation Engine
- Crear un inventario dinámico de OCI
- Uso del inventario dinámico de OCI con un manual
Requisitos
-
Un mínimo de dos sistemas Oracle Linux con la siguiente configuración:
- un usuario no root con permisos sudo
- par de claves ssh para el usuario que no es root
- La capacidad de SSH de un host a otro mediante una conexión SSH sin contraseña
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.
-
Abra un terminal en el escritorio Luna.
-
Clone el proyecto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Cambie al directorio de trabajo.
cd linux-virt-labs/olam
-
Instale las recopilaciones necesarias.
ansible-galaxy collection install -r requirements.yml
-
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
-
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 defineansible_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.
-
Abra un nuevo terminal y conéctese mediante SSH al sistema ol-control-node.
ssh oracle@<ip_address_of_instance>
-
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.
-
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.
-
Instale el SDK de OCI para Python mediante PIP.
-
Instale los paquetes y las dependencias para PIP.
sudo dnf install -y python3.12-pip python3.12-setuptools
-
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 comandopython3.12 -m pip help install
.
-
-
Pruebe la instalación del SDK de OCI para Python imprimiendo su versión.
python3.12 -c "import oci;print(oci.__version__)"
-
Cree el directorio de configuración por defecto del SDK de OCI.
mkdir -p ~/.oci
-
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
.-
Abra un terminal nuevo desde el entorno de escritorio.
-
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.
-
-
Cambie a la ventana de terminal conectada al sistema ol-control-node.
-
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
-
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. -
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.
-
Cree un directorio de proyecto.
mkdir ~/myproject
-
Cree un archivo de requisitos.
cat << EOF | tee ~/myproject/requirements.yml > /dev/null --- collections: - name: oracle.oci EOF
-
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.
-
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
-
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.
-
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')
-
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 entrue
da como resultado que el inventario solo recopile información en hosts informáticos e ignore otros tipos de instancias desplegados en el compartimento. -
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.
-
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.
-
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.
-
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 entradaall
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:
. -
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.
Enlaces relacionados
- Documentación de Oracle Linux Automation Manager
- Formación sobre Oracle Linux Automation Manager
- Oracle Linux Training Station
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.
Use an OCI Dynamic Inventory with Oracle Linux Automation Engine
F55852-02
Copyright ©2022, Oracle and/or its affiliates.