สมมติว่าฉันมีบทบาทที่เรียกว่า "apache"
ตอนนี้ฉันต้องการเรียกใช้บทบาทนั้นบนโฮสต์ 192.168.0.10 จากบรรทัดคำสั่งจากโฮสต์ Ansible
ansible-playbook -i "192.168.0.10" --role "path to role"
มีวิธีทำไหม?
สมมติว่าฉันมีบทบาทที่เรียกว่า "apache"
ตอนนี้ฉันต้องการเรียกใช้บทบาทนั้นบนโฮสต์ 192.168.0.10 จากบรรทัดคำสั่งจากโฮสต์ Ansible
ansible-playbook -i "192.168.0.10" --role "path to role"
มีวิธีทำไหม?
คำตอบ:
ฉันไม่ทราบคุณสมบัตินี้ แต่คุณสามารถใช้แท็กเพื่อเรียกใช้บทบาทเดียวจากเพลย์บุ๊กของคุณ
roles:
- {role: 'mysql', tags: 'mysql'}
- {role: 'apache', tags: 'apache'}
ansible-playbook webserver.yml --tags "apache"
ด้วย ansible 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>"
}
สิ่งนี้จะเรียกใช้บทบาทจาก / path / to / ansible / role หรือเส้นทางบทบาทที่กำหนดค่าไว้
อ่านเพิ่มเติมที่นี่: 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
เสียตั้งแต่ ansible 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
คุณลองแล้วหรือยัง? มันสุดยอดมาก ฉันใช้ 'update-os' แทนบทบาท 'apache' เพื่อให้เป็นตัวอย่างที่มีความหมายมากขึ้น ฉันมีบทบาทที่เรียกว่าสมมติว่า./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
> 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 เพื่อให้สามารถดำเนินการได้โดยไม่ต้องพิมพ์รหัสผ่าน - เหมาะอย่างยิ่งสำหรับการทำงานอัตโนมัติมีผลกระทบด้านความปลอดภัยในสิ่งนี้ ดังนั้นคุณต้องวิเคราะห์สภาพแวดล้อมของคุณเพื่อดูว่าเหมาะสมหรือไม่
ใน ansible 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
}