ansible - किसी अन्य भूमिका से कार्यों को शामिल करने योग्य प्लेबुक में शामिल हैं




ansible-playbook (2)

मैं अलग-अलग कार्यों के साथ एक तरह की playbook lib डिज़ाइन कर रहा हूं

इसलिए सामान्य भूमिकाओं में रेपो, मेरे पास कुछ इस तरह है:

roles
├── common
│   └── tasks
│       ├── A.yml
│       ├── B.yml
│       ├── C.yml
│       ├── D.yml
│       ├── login.yml
│       ├── logout.yml
│       └── save.yml
├── custom_stuff_workflow
│   └── tasks
│       └── main.yml
└── other_stuff_workflow
    └── tasks
        └── main.yml

custom_stuff_workflow में मेरा main.yml तब कुछ इस तरह होता है:

---

- include: login.yml
- include: A.yml
- include: C.yml
- include: save.yml
- include: logout.yml

और अन्य वर्कफ़्लो में यह एक:

---

- include: login.yml
- include: B.yml
- include: A.yml
- include: D.yml
- include: save.yml
- include: logout.yml

मुझे इसे स्वाभाविक तरीके से करने का तरीका नहीं मिल रहा है: एक ऐसा तरीका जिसने काम किया था वह एक ही भूमिका में सभी कार्य कर रहा था और संबंधित कार्यों को टैग करते हुए एक custom_stuff_workflow सहित

मेरे पास जो समस्या है, वह यह है कि टैगिंग को कॉलबुक में सेट नहीं किया जा सकता है: यह केवल कमांड लाइन पर सेट किया जाना है क्योंकि मैं कंपनी में कई लोगों के साथ इस रीसिबल रेपो को वितरित कर रहा हूं, मैं कमांड लाइन इनवोकेशन पर भरोसा नहीं कर सकता ( यह अच्छा होगा कि एक #! हेडर yml में ansible-playbook कमांड द्वारा संसाधित किया जा सकता है)

मैं प्रत्येक वर्कफ़्लो में संबंधित कार्यों (उपरोक्त पेड़ में आम के अंदर) को भी कॉपी कर सकता था, लेकिन मैं उन्हें दोहराना नहीं चाहता

क्या कोई व्यक्ति विभिन्न भूमिकाओं पर किए गए कार्यों को दोहराए बिना मुझे प्राप्त करने के लिए एक समाधान देख सकता है?

मुझे लगता है कि मेरी समस्या का आधार यह है कि मैं कार्यों को व्यक्ति के रूप में परिभाषित करता हूं और यह स्वाभाविक नहीं लगता है ...

बहुत बहुत धन्यवाद

पुनश्च: ध्यान दें कि वर्कफ़्लो में कार्यों को विशिष्ट क्रम में किया जाना है और केवल अमूर्त करने के लिए प्राकृतिक कदम लॉगिन और बचत को रोकना होगा।

PPS: मैंने यह प्रश्न देखा है कि मैं Ansible में किसी अन्य भूमिका के भीतर से किसी भूमिका को कैसे कहूं? लेकिन यह मेरी समस्या को हल नहीं करता है क्योंकि यह एक पूर्ण भूमिका को लागू कर रहा है और एक भूमिका में कार्यों का सबसेट नहीं है


बस इसमें किसी और को उकसाओ, इस पर 2.2 के संस्करण में शामिल है। अब इसमें कुछ भी हो सकता है।

---
- name: do something
  include_role:
    name: common
    tasks_from: login

here दस्तावेज देखें।


हां, Ansible को वास्तव में व्यक्तिगत घटकों के रूप में कार्य पसंद नहीं हैं। मुझे लगता है कि आप भूमिकाओं का उपयोग करना चाहते हैं, लेकिन मैं देख सकता हूं कि आप सरल, पुन: प्रयोज्य कार्यों के लिए भूमिकाओं का उपयोग क्यों नहीं करना चाहेंगे।

मैं वर्तमान में दो संभावित समाधान देख रहा हूं:

1. उन कार्य-फाइलों को भूमिकाओं में बनाएं और निर्भरता का उपयोग करें

तब आप कुछ ऐसा कर सकते हैं जैसे custom_stuff_workflow

dependencies:
  - { role: login }

देखें: https://docs.ansible.com/playbooks_roles.html#role-dependencies

2. कार्य फ़ाइलों के लिए "हार्डकोड" पथ के साथ शामिल करें

- include: ../../common/tasks/login.yml

मैंने अभी-अभी एक छोटी टेस्ट प्लेबुक में बहुत अच्छा काम किया है। ध्यान रखें, आप इसमें शामिल मापदंडों आदि का भी उपयोग कर सकते हैं।

देखें: http://docs.ansible.com/ansible/latest/playbooks_reuse.html

मुझे आशा है कि मैंने उस प्रश्न को सही ढंग से समझा और इससे मदद मिलती है।





ansible-playbook