ansible उत्तरदायी प्लेबुक में एक और भूमिका से कार्यों को शामिल करें




ansible-playbook (2)

मैं अलग-अलग कार्यों के साथ एक प्रकार की प्लेबुक लिब तैयार कर रहा हूं

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

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 में my 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

मुझे इसे प्राकृतिक तरीके से करने का कोई तरीका नहीं मिल रहा है: एक तरीका जिसने काम किया था, सभी कार्यों को एक ही भूमिका में रखना था और कस्टम_स्टफ_ वर्कफ़्लो सहित प्रासंगिक कार्यों को टैग करना था

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

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

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

मुझे लगता है कि मेरी समस्या का कोने का पत्थर यह है कि मैं कार्यों को व्यक्तिगत रूप से परिभाषित करता हूं और यह जवाब में प्राकृतिक नहीं दिखता है ...

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

पीएस: ध्यान दें कि वर्कफ़्लो में कार्य विशिष्ट क्रम में किए जाने हैं और सार के लिए केवल प्राकृतिक कदम लॉगिन और सेव / लॉगआउट होंगे

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


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

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

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 के संस्करण 2.2 में अब शामिल है Irole अब आप ऐसा कुछ कर सकते हैं।

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

here प्रलेखन देखें।





ansible-playbook