Cómo instalar una colección de Ansible en un nodo de control de Ansible desconectado

En este tutorial muestro cómo y dónde instalar Colecciones de contenido de Ansible en un nodo de control Ansible que no tiene acceso a Internet. El proceso es simple y directo, pero algunos usuarios se confunden con la ubicación y configuración de la instalación.

Índice

¿Por qué sin internet?

Algunas organizaciones no permiten que los servidores se conecten directamente a Internet. Y a veces no permiten la conectividad a Internet, ni siquiera a través de servidores proxy. Esta es una política estándar y es posible que ya la haya experimentado si está trabajando con servidores de misión crítica. Y la instalación de algunas herramientas o archivos necesarios no es una tarea fácil sin acceso a Internet.

Instalar colecciones de Ansible desde Internet

Puede instalar Ansible Collections directamente desde Ansible Galaxy usando el ansible-galaxy pedido. Es una tarea simple en la que solo necesita especificar el nombre de la colección y la ruta de instalación. el ansible-galaxy El comando se encargará de las tareas de creación de subdirectorios y descarga de colecciones.

$ ansible-galaxy collection install community.kubernetes -p ./collections

Referirse a Documentación responsable donde Guía de instrucciones para más detalles.

Instalar Ansible Collections sin Internet

Por defecto, ansible-galaxy intentará instalar Ansible Collections desde galaxia.ansible.com o los servidores que ha configurado bajo el SERVIDOR_GALAXIA configuración (por ejemplo, Automatización Hub). Dado que este escenario es un nodo de control de Ansible sin acceso a Internet, no lo discutiré. Sin embargo, aún puede descargar el contenido de la colección de Internet mediante una estación de trabajo o un ordenador portátil con acceso a Internet y luego transferir el contenido al nodo de control de Ansible desconectado.

Encuentre la colección y descárguela para usarla sin conexión

Para esta demostración, instale el Kubernetes colección comunitaria (community.kubernetes).

Desde su estación de trabajo o ordenador portátil (con acceso a Internet), vaya a galaxia.ansible.com y encuentra el community.kubernetes Colección.

Clickea en el Descargar Tarball enlace y descargue la Colección como un archivo para uso sin conexión.

Transfiera el archivo comprimido a la máquina de destino, que es su nodo de control de Ansible:

$ scp ~/Downloads/community-kubernetes-1.2.0.tar.gz [email protected]:~/

(O puede usar cualquier otro método como WinSCP, SFTP, etc.)

Implemente la colección de Ansible en el nodo de control

Ahora debe preparar la ubicación de almacenamiento para las colecciones de Ansible. Puede guardarlo en los directorios del sistema (/usr/share/ansible/collections) o el directorio de inicio del usuario (~/.ansible/collections), pero se recomienda mantener las colecciones basadas en proyectos para una mejor gestión).

En este caso, cree un directorio llamado collections en el directorio del proyecto. En este ejemplo, el usuario local se denomina devops.

$ pwd
/home/devops/ansible-collections-demo
$ mkdir collections

Método 1: use el comando ansible-galaxy con la colección Ansible descargada

usa lo mismo ansible-galaxy comando, pero en lugar de instalar el contenido de la colección desde Internet, especifique el archivo de almacenamiento de la colección para usar:

$ pwd
/home/devops
$ ansible-galaxy collection install ~/Downloads/community-kubernetes-1.2.0.tar.gz 
  -p collections/
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Installing 'community.kubernetes:1.2.0' to '/home/devops/devops/workshops/ansible-collections-demo/collections/ansible_collections/community/kubernetes'
community.kubernetes (1.2.0) was installed successfully

Es así de simple y directo.

Método 2: extraiga y organice manualmente el contenido de Ansible Collection

Como se mencionó anteriormente, si está utilizando el ansible-galaxy comando, Ansible se encargará de los subdirectorios, pero aquí debe crear todo manualmente. Esto sólo es necesario si el ansible-galaxy El comando no funciona con el archivo fuera de línea.

Cree subdirectorios en el siguiente formato:

[PROJECT_DIR]/[COLLECTION_PATH]/ansible_collections/[AUTHOR]/[COLLECTION_NAME]

O:

  • [PROJECT_DIR] - el directorio de su proyecto (/home/devops/ansible-collections-demo)
  • [COLLECTION_PATH] - Cuál es collections en este caso.
  • ansible_collections: la ruta que Ansible espera para las colecciones
  • [AUTHOR] - la persona o vendedor que mantiene/proporciona la Colección (por ejemplo, comunidad)
  • [COLLECTION_NAME] - el nombre de la Colección (por ejemplo, kubernetes)

Cree los directorios como se muestra:

$ mkdir -p collections/ansible_collections/community/kubernetes

Extraer el contenido de la colección y copiar al collections directorio telefónico:

$ pwd
/home/devops/ansible-collections-demo
$ tar -xf ~/Downloads/community-kubernetes-1.2.0.tar.gz 
  -C collections/ansible_collections/community/kubernetes

Revisa el contenido:

$ ls -l collections/ansible_collections/community/kubernetes/
total 120
-rw-rw-r--  1 devops devops    36 Feb 26 18:13 bindep.txt
-rw-rw-r--  1 devops devops 15739 Feb 26 18:13 CHANGELOG.rst
drwxrwxr-x  3 devops devops  4096 Feb 26 18:13 changelogs
-rw-rw-r--  1 devops devops   107 Feb 26 18:13 codecov.yml
-rw-rw-r--  1 devops devops  3278 Feb 26 18:13 CONTRIBUTING.md
-rw-rw-r--  1 devops devops   857 Feb 26 18:13 galaxy.yml
-rw-rw-r--  1 devops devops 35148 Feb 26 18:13 LICENSE
-rw-rw-r--  1 devops devops  1112 Feb 26 18:13 Makefile
drwxrwxr-x  2 devops devops  4096 Feb 26 18:13 meta
drwxrwxr-x  3 devops devops  4096 Feb 26 18:13 molecule
drwxrwxr-x 10 devops devops  4096 Feb 26 18:13 plugins
-rw-rw-r--  1 devops devops  8542 Feb 26 18:13 README.md
-rw-rw-r--  1 devops devops    35 Feb 26 18:13 requirements.txt
-rw-rw-r--  1 devops devops    50 Feb 26 18:13 setup.cfg
-rw-rw-r--  1 devops devops    20 Feb 26 18:13 test-requirements.txt
drwxrwxr-x  5 devops devops  4096 Feb 26 18:13 tests
drwxrwxr-x  2 devops devops  4096 Feb 26 18:13 utils

Configurar Ansible para recuperar la colección

Ansible buscará colecciones en ~/.ansible/collections:/usr/share/ansible/collections, que es el predeterminado para RUTA_ COLECCIONES.

Debe indicar a Ansible la ubicación del contenido de la colección. Para hacer esto, configure ansible.cfg con el RUTA_ COLECCIONES Entrada. No necesita modificar nada en el archivo predeterminado /etc/ansible/ansible.cfg. En su lugar, cree su propio ansible.cfg en el directorio del proyecto y guarde todas las configuraciones para su propio proyecto. Aquí un ejemplo :

$ pwd
/home/devops/ansible-collections-demo
$ cat ansible.cfg 
[defaults]
inventory = ./inventory 
COLLECTIONS_PATHS = ./collections

Luego verifique el contenido del directorio:

$ ls -l
total 16
-rw-rw-r-- 1 devops devops  309 Dec 22 22:40 ansible.cfg
drwxrwxr-x 3 devops devops 4096 Feb 26 18:09 collections
-rw-rw-r-- 1 devops devops  369 Feb 26 18:36 k8s-cluster-info.yaml

Compruebe la colección de Ansible implementada

Consulta la colección con el ansible-galaxy pedido:

$ ansible-galaxy collection list
 
# /home/devops/ansible-collections-demo/collections/ansible_collections
Collection           Version
-------------------- -------
community.kubernetes 1.2.0 

Usa tu colección en tu libro de jugadas ahora.

Puede recopilar fácilmente el acceso al contenido usando ansible-doc comando y mostrará la documentación si la colección y los módulos están correctamente instalados.

$ ansible-doc community.kubernetes.k8s_info

Examine el libro de jugadas simple llamado k8s-cluster-info.yaml a continuación, que muestra información de pod para un clúster de Kubernetes:

---
- name: Ansible k8s Test
  hosts: localhost
  tasks:
    
    - name: Get a list of all pods from any namespace
      community.kubernetes.k8s_info:
        kind: Pod
      register: pod_list
    
    - name: Display k8s Cluster details
      debug:
        msg: "{{ pod_list }}"

Notar: debe instalar las demás dependencias de Python requeridas (por ejemplo, openshift, PyYAML, etc.) para que los módulos funcionen. Este tema no está dentro del alcance de este artículo, pero puede consultar los procedimientos estándar (o leer cómo Instalar módulos de Python sin conexión).

Conclusión

Con la introducción de Red Hat Ansible Automatización Platform, puede mantener el contenido organizado dentro de su red. Sin embargo, esto debe configurarse manualmente, al igual que Red Hat Ansible Tower. Aprender más acerca de Centro de automatización para detalles.

Artículos de interés

Subir