Uso del script de inventario dinámico

Tener listas de inventario precisas es esencial para ejecutar los cuadernos de estrategias de Ansible. Oracle Cloud Infrastructure proporciona un script que puede descargar y ejecutar para asegurarse de que la lista de inventario de la instancia está siempre actualizada. El script garantiza que siempre tenga el juego actual de instancias informáticas de Oracle Cloud Infrastructure disponibles para sus cuadernos de estrategias.

Importante

Se recomienda el uso del plugin de inventario de OCI para obtener y mantener la lista de inventario.

Descarga y configuración del script de inventario dinámico

Descargue el script de inventario dinámico (oci_inventory.py) y el archivo de configuración por defecto (oci_inventory.ini) de las siguientes ubicaciones:

Importante

Antes de utilizar el script, asegúrese de que tiene una configuración válida de Oracle Cloud Infrastructure. Para obtener más información, consulte el archivo de configuración de SDK y CLI.

Detalles del script y la configuración

El script oci_inventory.py utiliza el SDK para Python de Oracle Cloud Infrastructure para consultar las instancias informáticas del arrendamiento de Oracle Cloud Infrastructure y crea un inventario dinámico que puede utilizar con los cuadernos de estrategias de Ansible. Utilice argumentos del script de Python para controlar el perfil de configuración y el compartimento de arrendamiento que consulta.

Puede utilizar la configuración del archivo oci_inventory.ini para controlar cómo se almacenan en caché los detalles del inventario y para controlar qué perfil de Oracle Cloud Infrastructure utilizar. Este archivo permite modificar los nombres de host y controlar cómo se denominan los hosts en la lista de inventario que se genera.

Argumentos y variables de entorno

Para obtener una lista completa de los argumentos de la línea de comandos y las variables de entorno que acepta el script, consulte la sección Script de inventario dinámico.

Orden de prioridad

A continuación se muestra el orden de prioridad para las configuraciones que utiliza el script de inventario dinámico:

  1. Argumentos de línea de comandos.
  2. Variables de entorno.
  3. Valores de configuración del perfil seleccionado en el archivo de configuración de Oracle Cloud Infrastructure.
Nota

El archivo de configuración por defecto utilizado por el script de inventario es ./oci_inventory.ini. El archivo de configuración de SDK de Oracle Cloud Infrastructure se define por defecto en ~/.oci/config. El script lee el perfil DEFAULT del archivo config si no se especifica ningún nombre de perfil.
Importante

Por defecto, el inventario se genera para todos los compartimentos del arrendamiento. Debe tener el permiso COMPARTMENT_INSPECT en el compartimento raíz para que este script pueda acceder a todos los compartimentos. Sin embargo, cuando se especifica compartment_ocid, el inventario se genera solo para el compartimento específico, por lo que solo se necesita el permiso COMPARTMENT_INSPECT en el compartimento especificado.

La lista de inventario generada por el script de inventario dinámico se agrupa utilizando los siguientes atributos:

  • Región en la que reside la instancia informática
  • Nombre del compartimento al que pertenece la instancia informática
  • Dominio de disponibilidad en el que está la instancia informática
  • El vcn_id de la VCN en la que está la instancia informática
  • subnet_id de la subred en la que está la instancia informática
  • security_list_ids de la subred en la que está la instancia informática
  • image_id de la imagen utilizada para iniciar la instancia informática
  • Forma de la instancia informática
  • Etiquetas de formato libre de la instancia, con el nombre de grupo definido en tag_<tag_name>=<tag_value>
  • Etiquetas definidas de la instancia con el nombre de grupo definido en <tag_namespace>#<tag_name>=<tag_value>
  • Metadatos de la instancia informática de Oracle Cloud Infrastructure (pares de clave-valor), con el nombre de grupo definido en <metadata-key>=<metadata-value>
  • Metadatos extendidos de la instancia informática de Oracle Cloud Infrastructure (pares de clave-valor), con el nombre de grupo definido en <metadata-key>=<metadata-value>
Importante

Por defecto, todos los caracteres no alfanuméricos de los nombres de grupo y de host se sustituyen por un carácter de subrayado (_) cuando se genera el inventario, excepto la almohadilla (#), el signo de igual (=), el punto (.) y el guion (-). Esto permite utilizar estos nombres como nombres de grupo de Ansible. Para desactivar esta sustitución por defecto, defina sanitize_names en False en el archivo de configuración del inventario dinámico, cuya ubicación por defecto es ./oci_inventory.ini. Para sustituir también el guion (-) cuando sanitize_names es True, defina replace_dash_in_names en True en el archivo de configuración.

Cómo utilizar el inventario dinámico

Uso del inventario dinámico durante la ejecución del cuaderno de estrategias

Para utilizar el inventario dinámico, primero asegúrese de que tiene un archivo de configuración de SDK de Oracle Cloud Infrastructure correcto. También puede tener un archivo oci_inventory.ini.

Llame a ansible-playbook mediante el siguiente comando:

$ ansible-playbook -i <path-to-inventory-file>/oci_inventory.py <your-playbook-using-the-generated-inventory>

También puede utilizar la variable de entorno ANSIBLE_HOSTS con el siguiente comando:

$ ANSIBLE_HOSTS=<path-to-inventory-file>/oci_inventory.py ansible-playbook <your-playbook-using-the-generated-inventory>

Desactivación de la caché y recuperación de la lista de inventario más reciente

Si ejecuta el script de inventario dinámico de forma autónoma, puede ignorar la lista de inventario almacenada en caché y recuperar la lista de inventario más actual mediante el argumento --refresh (-r), como se muestra en el siguiente ejemplo:

$ \<path-to-inventory-file\>/oci_inventory.py --refresh

Si, en su lugar, utiliza el script de inventario durante una llamada al cuaderno de estrategias de Ansible, defina la variable de entorno OCI_CACHE_MAX_AGE en 0 (cero) para ignorar la lista almacenada en caché y recuperar la instancia informática más reciente, como se muestra en el siguiente ejemplo:

$ OCI_CACHE_MAX_AGE=0 ansible-playbook -i <path-to-inventory-file>/oci_inventory.py <your-playbook-using-the-generated-inventory>

Depuración de la lista de inventario

Para examinar la lista de inventario, ejecute el script de inventario dinámico con el argumento --list, como se muestra aquí:

$ \<path-to-inventory-file\>/oci_inventory.py --list

Si desea imprimir información de depuración adicional a STDERR, utilice el argumento --debug, como se muestra:

$ \<path-to-inventory-file\>/oci_inventory.py --debug

Recuperación de información sobre un host

Puede configurar el script de inventario para proporcionar información sobre un host especificado utilizando el argumento --host y proporcionando la dirección IP del host, como se muestra:

$ \<path-to-inventory-file\>/oci_inventory.py --host <host IP address>

El comando devuelve el siguiente juego de variables y valores:

{
  "availability_domain": "IwGV:US-ASHBURN-AD-1",
  "compartment_id": "ocid1.compartment.oc1..<xxxxxEXAMPLExxxxx>",
  "defined_tags": {},
  "display_name": "ansible-test-instance",
  "extended_metadata": {},
  "freeform_tags": {},
  "id": "ocid1.instance.oc1.iad.<xxxxxEXAMPLExxxxx>",
  "image_id": "ocid1.image.oc1.iad.<xxxxxEXAMPLExxxxx>",
  "ipxe_script": null,
  "launch_mode": "CUSTOM",
  "launch_options": {
     "boot_volume_type": "ISCSI",
     "firmware": "UEFI_64",
     "network_type": "VFIO",
     "remote_data_volume_type": "ISCSI"
  },
  "lifecycle_state": "AVAILABLE",
  "metadata": {
     "baz": "quux",
     "foo": "bar"
  },
  "region": "iad",
  "shape": "VM.Standard1.1",
  "source_details": {
    "image_id": "ocid1.image.oc1.iad.<xxxxxEXAMPLExxxxx>",
  "source_type": "image"
  },
  "time_created": "2018-01-16T12:13:35.336000+00:00"
}

Solución de problemas del script de inventario dinámico

Si la lista de inventario generada por el script de inventario no incluye todas las instancias informáticas en el arrendamiento, revise la siguiente información.

Permisos de usuario

Asegúrese de que el OCID del usuario (especificado mediante la variable de entorno OCI_USER o la sección profile del archivo de configuración de SDK) tenga los permisos de política para mostrar las instancias informáticas. Para ver una lista de permisos para operaciones de API, consulte Detalles de los servicios básicos.

El script de inventario realiza llamadas a la API para las siguientes operaciones:

  • ListCompartments
  • ListVNICAttachments
  • GetSubnet
  • GetVCN
  • GetVNIC
  • GetInstance

Formato de nombre de host

El valor por defecto para OCI_HOSTNAME_FORMAT es public_ip. El inventario dinámico generado mediante OCI_HOSTNAME_FORMAT definido en public_ip solo contiene instancias informáticas que tienen una dirección IP pública. Esto puede resultar útil en casos en los que el nodo de controlador de Ansible esté fuera de la VCN, ya que Ansible solo puede acceder a instancias que tengan direcciones IP públicas.

Al ejecutar Ansible en una instancia informática dentro de la VCN, si esta tiene acceso a todas las subredes de la VCN (incluidas las instancias informáticas que tienen direcciones IP privadas), debe definir OCI_HOSTNAME_FORMAT en private_ip para que se muestren las instancias informáticas que utilizan las direcciones IP privadas.