Supongamos que tengo un rol llamado "apache"
Ahora quiero ejecutar ese rol en el host 192.168.0.10 desde la línea de comando del host Ansible
ansible-playbook -i "192.168.0.10" --role "path to role"
¿Hay una manera de hacer eso?
Respuestas:
Con ansible 2.7 puedes hacer esto:
$ cd /path/to/ansible/
$ ansible localhost -m include_role -a name=<role_name>
localhost | SUCCESS => {
"changed": false,
"include_variables": {
"name": "<role_name>"
}
}
localhost | SUCCESS => {
"msg": "<role_name>"
}
Esto ejecutará el rol desde / ruta / a / ansible / roles o la ruta de rol configurada.
Lea más aquí: https://github.com/ansible/ansible/pull/43131
'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
-a "name=<role_name> public=yes"
, pero eso no ayudó.
-m <module-name>
) con pares clave = valor como argumentos ( -a key=value
)
No existe tal cosa en Ansible, pero si este es un caso de uso frecuente para usted, pruebe este script.
Colóquelo en algún lugar dentro de su RUTA de búsqueda bajo el nombre ansible-role
:
#!/bin/bash
if [[ $# < 2 ]]; then
cat <<HELP
Wrapper script for ansible-playbook to apply single role.
Usage: $0 <host-pattern> <role-name> [ansible-playbook options]
Examples:
$0 dest_host my_role
$0 custom_host my_role -i 'custom_host,' -vv --check
HELP
exit
fi
HOST_PATTERN=$1
shift
ROLE=$1
shift
echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."
export ANSIBLE_ROLES_PATH="$(pwd)/roles"
export ANSIBLE_RETRY_FILES_ENABLED="False"
ansible-playbook "$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
roles:
- $ROLE
END
ansible localhost -m include_role -a name=myrole
, ¡funciona para mí!
ansible localhost -m include_role -a name=myrole
está roto desde ansible 2.8. Simplemente registra mensajes de error crípticos como'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
También puede consultar el repositorio ansible-toolbox . Te permitirá usar algo como
ansible-role --host 192.168.0.10 --gather --user centos --become my-role
Escribí un pequeño complemento de Ansible, llamado auto_tags
, que genera dinámicamente para cada rol en su libro de jugadas una etiqueta con el mismo nombre. Puedes encontrarlo aquí .
Después de instalarlo (las instrucciones están en la esencia de arriba), puede ejecutar un rol específico con:
ansible-playbook -i "192.168.0.10" --tags "name_of_role"
¿Has probado eso? es super guay. Estoy usando la función 'update-os' en lugar de 'apache' para dar un ejemplo más significativo. Tengo un rol llamado, digamos ./roles/update-os/
en mi ./
, agrego un archivo llamado ./role-update-os.yml
que se parece a:
#!/usr/bin/ansible-playbook
---
- hosts: all
gather_facts: yes
become: yes
roles:
- update-os
Haga que este archivo sea ejecutable ( chmod +x role-update-os.yml
). Ahora puede ejecutar y limitar a lo que tenga en su inventario ./update-os.yml -i inventory-dev --limit 192.168.0.10
el límite que también puede pasar los nombres de grupo.
--limit web,db
> web y db es el grupo definido en su inventario--limit 192.168.0.10,192.168.0.201
$ cat inventory-dev
[web]
192.168.0.10
[db]
192.168.0.201
Tenga en cuenta que puede configurar la política de claves ssh y sudoers para poder ejecutar sin tener que escribir una contraseña; ideal para la automatización, esto tiene implicaciones de seguridad. por lo tanto, debe analizar su entorno para ver si es adecuado.
en ansible 2.8 funciona ligeramente diferente
wohlgemuth@leela:~/workspace/rtmtb-ansible/kvm-cluster$ ansible localhost -m import_role -a name=rtmtb
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"checksum": "d31b41e68997e1c7f182bb56286edf993146dba1",
"dest": "/root/.ssh/id_rsa.github",
"gid": 0,
"group": "root",
"md5sum": "b7831c4c72f3f62207b2b96d3d7ed9b3",
"mode": "0600",
"owner": "root",
"size": 3389,
"src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.46-139127672211209/source",
"state": "file",
"uid": 0
}
localhost | CHANGED => {
"changed": true,
"checksum": "1972ebcd25363f8e45adc91d38405dfc0386b5f0",
"dest": "/root/.ssh/config",
"gid": 0,
"group": "root",
"md5sum": "f82552a9494e40403da4a80e4c528781",
"mode": "0644",
"owner": "root",
"size": 147,
"src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.99-214274671218454/source",
"state": "file",
"uid": 0
}