Antworten:
Mit ansible 2.7 können Sie dies tun:
$ 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>"
}
Dadurch wird die Rolle von / path / to / ansible / role oder dem konfigurierten Rollenpfad ausgeführt.
Lesen Sie hier mehr: https://github.com/ansible/ansible/pull/43131
'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
-a "name=<role_name> public=yes"
, aber das hat nicht geholfen.
In Ansible gibt es so etwas nicht, aber wenn dies ein häufiger Anwendungsfall für Sie ist, probieren Sie dieses Skript aus.
Fügen Sie es irgendwo in Ihren durchsuchbaren Pfad unter dem Namen ein 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
- funktioniert für mich!
ansible localhost -m include_role -a name=myrole
ist kaputt seit ansible 2.8. Es protokolliert nur kryptische Fehlermeldungen wie'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
Sie können auch das Ansible-Toolbox- Repository überprüfen . Es wird Ihnen ermöglichen, so etwas wie zu verwenden
ansible-role --host 192.168.0.10 --gather --user centos --become my-role
Ich habe ein kleines Ansible-Plugin namens geschrieben auto_tags
, das für jede Rolle in Ihrem Playbook dynamisch ein gleichnamiges Tag generiert. Sie finden es hier .
Nach der Installation (Anweisungen finden Sie oben) können Sie eine bestimmte Rolle ausführen mit:
ansible-playbook -i "192.168.0.10" --tags "name_of_role"
Hast du das versucht? Es ist super cool. Ich verwende 'update-os' anstelle der Rolle 'apache', um ein aussagekräftigeres Beispiel zu geben. Ich habe eine Rolle Sagen wir mal genannt ./roles/update-os/
in meine ./
ich eine Datei hinzufügen genannt , ./role-update-os.yml
die wie folgt aussieht:
#!/usr/bin/ansible-playbook
---
- hosts: all
gather_facts: yes
become: yes
roles:
- update-os
Machen Sie diese Datei ausführbar ( chmod +x role-update-os.yml
). Jetzt können Sie das Limit ausführen und auf das beschränken, was Sie in Ihrem Inventar haben. ./update-os.yml -i inventory-dev --limit 192.168.0.10
Sie können auch die Gruppennamen übergeben.
--limit web,db
> web und db ist die in Ihrem Inventar definierte Gruppe--limit 192.168.0.10,192.168.0.201
$ cat inventory-dev
[web]
192.168.0.10
[db]
192.168.0.201
Beachten Sie, dass Sie die ssh-keys- und sudoers-Richtlinie so konfigurieren können, dass sie ausgeführt werden kann, ohne dass ein Kennwort eingegeben werden muss - ideal für die Automatisierung, da dies Auswirkungen auf die Sicherheit hat. Daher müssen Sie Ihre Umgebung analysieren, um festzustellen, ob sie geeignet ist.
in ansible 2.8 funktioniert es etwas anders
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
}