¿Cómo anotar direcciones ipv6 en el archivo de inventario?

7

Tengo una máquina, a la que solo se puede acceder a través de ipv6. Está configurado para ssh con la clave rsa. Ahora me gustaría manejarlo con ansible. Desafortunadamente, esto no está cubierto en la documentación del inventario .

Así que probé las siguientes permutaciones:

  • docker_test ansible_host=fe80::88ea:e002:b409:4be0
  • docker_test ansible_host=[fe80::88ea:e002:b409:4be0]
  • docker_test ansible_host=\[fe80::88ea:e002:b409:4be0\]

Nada de esto funcionó.

A modo de comparación, agrego mi .ssh/configentrada:

Host docker_host
    AddressFamily inet6
    HostName fe80::88ea:e002:b409:4be0
    BindAddress fe80::3e6b:335a:d2f7:3a75%enp3s0

Encontré dos errores cerrados en el sistema de seguimiento de problemas, que indican que el problema se resolvió al menos parcialmente: 3879 , 3888

Cualquier consejo sobre este tema es muy apreciado.

tgr
fuente
¿Intentaste usar un archivo de inventario? Y díganos los errores que obtiene.
guntbert
Sí, intenté usar el archivo de inventario. Las tres permutaciones publicadas se originaron a partir de ahí. Las excepciones son bastante vagas al indicar un formato incorrecto en el archivo de inventario o un argumento falso para el cliente ssh.
tgr
A la dirección IPv6 le falta el ID de alcance obligatorio. Por supuesto, debe evitar el uso de direcciones locales de enlace siempre que sea posible.
Michael Hampton

Respuestas:

4

Esta publicación de blog cubre todos los métodos:

Extracto: nombres de host y patrones en Ansible 2

Inventario de nombres de host

Ansible 2 requiere que los nombres de host del inventario sean direcciones IPv4 / IPv6 o nombres de host válidos (es decir, x.example.com o x, pero no x..example.com o x--). Como extensión, acepta caracteres de palabras Unicode en etiquetas de nombre de host. Cualquier error produce errores de análisis específicos, no errores misteriosos durante la ejecución.

Los nombres de host de inventario también pueden usar rangos alfabéticos o numéricos para definir más de un host. Por ejemplo, foo [1: 3] define foo1 a foo3, mientras que foo [x: z: 2] se expande a fox y foz. Las direcciones pueden usar rangos numéricos: 192.0.2. [3:42].

Direcciones IPv6

También se han solucionado varios problemas con el análisis de direcciones IPv6, y su comportamiento se ha hecho coherente en todo el inventario (archivos .ini) y en los libros de jugadas (por ejemplo, en hosts: líneas y con add_host).

Se admiten todas las anotaciones de dirección IPv6 recomendadas (desde la ortografía de los 128 bits hasta las diversas formas comprimidas). Las direcciones con números de puerto deben escribirse como [addr]: puerto. También se pueden usar rangos hexadecimales para definir varios hosts en archivos de inventario, por ejemplo, 9876 :: [a: f]: 2.

Un par de correcciones de errores pequeñas pero necesarias van de la mano con los cambios de análisis y solucionan problemas al pasar direcciones IPv6 a ssh y rsync. En conjunto, estos cambios permiten utilizar IPv6 en la práctica con Ansible.

Por lo tanto, se permitirían patrones como estos IPv6:

  • dirección de 128 bits completamente especificada
  • [addr]: puerto
  • rangos hexadecimales - 9876 :: [a: f]: 2
  • varias formas de rangos de compresión - FF01 :: [1: 6]

Ejemplos simplificados:

# IPv6 Address                                # Simplified Notation
-----------------------------------------     ----------------------------
- FF01:0000:0000:0000:0000:0000:0000:0001     - FF01::1
- 2031:0000:130F:0000:0000:09C0:876A:130B     - 2031:0:130F::9C0:876A:130B
- 0000:0000:0000:0000:0000:0000:0000:0001     - ::1
- FE80:0000:0000:5EFE:0192.0168.0001.0123     - FE80::5EFE:192.168.1.123
- FE80:0000:0000:0000:1585:4868:495F:D521     - FE80::1585:4868:495F:D521

Referencias

slm
fuente