मान लीजिए कि मेरी "अपाचे" नामक भूमिका है
अब मैं 192.168.0.10 होस्ट लाइन पर उस भूमिका को अंसिबल होस्ट से कमांड लाइन से निष्पादित करना चाहता हूं
ansible-playbook -i "192.168.0.10" --role "path to role"
क्या ऐसा करने के लिए कोई रास्ता है?
जवाबों:
2.7 2.7 के साथ आप यह कर सकते हैं:
$ 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>"
}
यह भूमिका / पथ / से / ansible / भूमिका या कॉन्फ़िगर की गई भूमिका पथ तक चलेगी।
यहां पढ़ें: https://github.com/ansible/ansible/pull/43131
'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
-a "name=<role_name> public=yes"
, लेकिन इससे कोई फायदा नहीं हुआ।
-m <module-name>
) कुंजी = मान जोड़े के साथ तर्कों ( -a key=value
) के साथ ( )
Ansible में ऐसी कोई बात नहीं है, लेकिन अगर यह आपके लिए अक्सर उपयोग किया जाने वाला मामला है, तो इस स्क्रिप्ट का प्रयास करें।
नाम के तहत अपने खोजा पेट के भीतर कहीं रखो 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
- मेरे लिए काम करता है!
ansible localhost -m include_role -a name=myrole
2.8 के बाद से टूट गया है। यह सिर्फ क्रिप्टिक त्रुटि संदेशों को लॉग करता है जैसे'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
आप ansible-toolbox रिपॉजिटरी को भी देख सकते हैं । यह आपको कुछ का उपयोग करने की अनुमति देगा
ansible-role --host 192.168.0.10 --gather --user centos --become my-role
मैंने एक छोटा सा ऐन्सिबल प्लगइन लिखा है, जिसे auto_tags
डायनामिक रूप से आपकी प्लेबुक में प्रत्येक भूमिका के लिए उसी नाम का टैग बनाया गया है। आप इसे यहाँ पा सकते हैं ।
इसे स्थापित करने के बाद (निर्देश ऊपर दिए गए विवरण में हैं) तब आप एक विशिष्ट भूमिका निभा सकते हैं:
ansible-playbook -i "192.168.0.10" --tags "name_of_role"
क्या आपने कोशिश की है? यह शानदार है। मैं अधिक सार्थक उदाहरण देने के लिए 'अपाचे' भूमिका के बजाय 'अपडेट-ओएस' का उपयोग कर रहा हूं। मेरे पास एक भूमिका है जिसे मैं कहता ./roles/update-os/
हूं कि ./
मैं एक फाइल जोड़ता हूं, ./role-update-os.yml
जिसका नाम ऐसा है:
#!/usr/bin/ansible-playbook
---
- hosts: all
gather_facts: yes
become: yes
roles:
- update-os
इस फ़ाइल को निष्पादन योग्य ( chmod +x role-update-os.yml
) बनाएं । अब आप चला सकते हैं और आपके इन्वेंट्री में जो कुछ भी है ./update-os.yml -i inventory-dev --limit 192.168.0.10
उसे सीमित कर सकते हैं और आप समूह के नामों को भी पास कर सकते हैं।
--limit web,db
> वेब और डीबी आपकी सूची में परिभाषित समूह है--limit 192.168.0.10,192.168.0.201
$ cat inventory-dev
[web]
192.168.0.10
[db]
192.168.0.201
ध्यान दें कि आप ssh-keys और sudoers नीति को कॉन्फ़िगर करने में सक्षम हो सकते हैं ताकि पासवर्ड टाइप किए बिना निष्पादित किया जा सके - स्वचालन के लिए आदर्श, इसके साथ सुरक्षा निहितार्थ हैं। इसलिए आपको यह देखने के लिए अपने वातावरण का विश्लेषण करना होगा कि क्या यह उपयुक्त है।
2.8 2.8 में यह थोड़ा अलग काम करता है
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
}