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, un software de código abierto para el aprovisionamiento y la gestión de la configuración, utiliza un archivo de inventario para operar en nodos o hosts gestionados dentro de 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 su infraestructura esté en constante flujo al utilizar la nube. Por lo tanto, sería beneficioso tener el inventario actualizado dinámicamente a medida que se agregan y eliminan hosts.
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" olam_type: none EOF
-
Cree un archivo de inventario.
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
Despliegue el entorno de prácticas.
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
El entorno de prácticas gratuitas necesita la variable adicional
ansible_python_interpreter
para localhost porque instala el paquete RPM para el SDK para Python de Oracle Cloud Infrastructure. La ubicación para instalar este paquete se encuentra en los módulos de Python por defecto del sistema según la versión de Oracle Linux. El uso de una variable de inventario evita que las reproducciones se ejecuten en hosts que no sean localeshost.La unidad de despliegue por defecto utiliza la CPU de AMD. Puede cambiar la unidad de las instancias transfiriendo una nueva definición de variable de unidad en la línea de comandos.
Por ejemplo:
-e instance_shape="VM.Standard3.Flex"
Del mismo modo, la versión por defecto de la imagen de Oracle Linux utiliza la variable
os_version
definida en el archivo `default_vars.yml. Puede modificar este valor transfiriendo la versión principal de Oracle Linux en la línea de comandos.Por ejemplo:
-e os_version="9"
Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, se ha completado la instalación de Oracle Linux y las instancias están listas. Observe la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega.
Configuración del nodo de control de Oracle Linux Automation Engine
El nodo de control es el sistema para ejecutar los cuadernos de estrategias de Oracle Linux Automation Engine. La ejecución de cuadernos de estrategias requiere la instalación del paquete de Oracle Linux Automation Engine.
-
Defina una variable igual a la dirección IP del nodo de control.
export CONTROL="<ip_address_of_ol-control-node>"
-
Abra un terminal y copie el par de claves SSH en el nodo de control.
scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
-
Defina los permisos en la clave privada SSH.
ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
-
Conéctese al sistema ol-control-node mediante SSH.
ssh oracle@$CONTROL
-
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 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"
Instalación de SDK para Python de Oracle Cloud Infrastructure
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.
Oracle Linux 8:
sudo dnf install -y python3.12-pip python3.12-setuptools
Oracle Linux 9:
sudo dnf install -y python3.9-pip python3.9-setuptools
-
Instalar los paquetes de Python
Oracle Linux 8:
/usr/bin/python3.12 -m pip install oci
Oracle Linux 9:
/usr/bin/python3.9 -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.
Oracle Linux 8:
python3.12 -c "import oci;print(oci.__version__)"
Oracle Linux 9:
python3.9 -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 desde el entorno de escritorio, debemos modificar la parte del directorio raíz del usuario de
key_file
para garantizar que coincida con el nombre de usuario del sistema de control.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
Oracle Linux 8:
python3.12 test.py
Oracle Linux 9:
python3.9 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 OCI Ansible contiene un juego de módulos que automatizan el aprovisionamiento y la configuración de la infraestructura en la nube, organizan procesos operativos complejos y despliegan y actualizan 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
Si se define
fetch_compute_hosts
entrue
, el inventario recopilará información solo en hosts informáticos e ignorará otros tipos de instancia 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 prioriza la dirección IP privada de un sistema sobre su dirección IP pública. Para obtener más información sobre esta configuración, consulte Hostname Format Preferences 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 utilizarlo para ejecutar un manual sencillo. Asegúrese de activar el acceso SSH entre los nodos de control y los nodos remotos.
-
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-03
Copyright ©2022, Oracle and/or its affiliates.