¿Existe una variable ansible que tenga la ruta absoluta al libro de jugadas ansible actual que se está ejecutando?
algo de contexto:
estoy ejecutando / creando un script ansible en contra localhost
de configurar una ventana acoplable mysql y deseo montar el volumen de datos en relación con el script ansible.
Por ejemplo, digamos que he retirado un repositorio ~/branch1/
y luego ejecuto ansible-playbook dev.yml
que estaba pensando que debería guardar el volumen en ~/branch1/.docker_volume/
. Si lo ejecuté desde ~/branch2
entonces debería configurar el volumen en ~/branch2/.docker_volume/
.
Respuestas:
Puede utilizar
playbook_dir
variable.fuente
playbook_dir
se documente la variable. ¿Podría indicarme la documentación, por favor? O, ¿podría explicar cómo llegó a conocer esta variable?No parece haber una variable que contenga exactamente lo que desea.
Sin embargo, citando los documentos :
Dependiendo de su configuración, esas o la
$ pwd
solución basada pueden ser suficientes.fuente
Desafortunadamente no lo hay. De hecho, la ruta absoluta carece de sentido (y es potencialmente confusa) en el contexto de cómo se ejecuta Ansible. En pocas palabras, cuando invoca un libro de jugadas, para cada tarea, Ansible copia físicamente el módulo asociado con la tarea a un directorio temporal en la máquina de destino y luego invoca el módulo con los parámetros necesarios. Entonces, la ruta absoluta en la máquina de destino es solo un directorio temporal que solo contiene algunos archivos temporales, y ni siquiera incluye el libro de jugadas completo. Además, conocer una ruta completa de un archivo en el servidor Ansible es prácticamente inútil en una máquina de destino a menos que esté replicando todo su árbol de directorios de Ansible en los destinos.
Para ver todas las variables definidas por Ansible, simplemente puede ejecutar el siguiente comando :
¿Cuál es la razón por la que cree que necesita conocer el camino absoluto al libro de jugadas?
fuente
local_action
módulo significa que existen casos de uso legítimos para esto.Estaba usando un libro de jugadas como este para probar mis roles localmente:
pero esto dejó de funcionar con Ansible v2.2.
Depuré la solución antes mencionada de
y produjo mi directorio de inicio y no el "directorio de trabajo actual"
Me conformé con
según la solución anterior.
fuente
No hay una variable incorporada para este propósito, pero siempre puede averiguar la ruta absoluta del libro de jugadas con el comando "pwd" y registrar su salida en una variable.
Ahora la ruta está disponible en la variable playbook_path_output.stdout
fuente
pwd
, no devuelve la ruta de la secuencia de comandos del libro de jugadas. Devuelve el directorio actual del proceso (normalmenteansible-playbook
). Los dos no tienen que ser iguales y dependen de la forma exacta en que se invocó ansible.debug: var=ansible_env.PWD
(esto me da el directorio desde el cual ejecutéansible-playbook
en mi máquina local y el directorio de inicio en servidores remotos){{ lookup('env','PWD') }}