कैसे स्वचालित रूप से स्थापित करने योग्य गैलेक्सी भूमिकाएँ?


129

मेरे सभी एसेटिबल प्लेबुक / रोल्स को मेरे git रेपो में चेक किया जाता है।

हालाँकि, Ansible Galaxy भूमिकाओं के लिए मुझे हमेशा स्पष्ट रूप से उन्हें एक-एक करके प्रत्येक मशीन पर डाउनलोड करना होता है जिसे मैं Ansible से चलाना चाहता हूँ।

अग्रिम रूप से यह जानना कठिन है कि जब तक रनटाइम में लापता भूमिका के बारे में शिकायत नहीं होती है, तब तक Ansible Galaxy भूमिकाओं की आवश्यकता होती है।

किसी को अंसिबल गैलेक्सी भूमिका निर्भरता के प्रबंधन के लिए कैसे माना जाता है? मैं या तो उन्हें मेरे बाकी कोड के साथ मेरे git रेपो में जाँच करना चाहता हूँ या जब मैं एक नई मशीन पर Ansible चलाऊंगा तो उन्हें स्वचालित रूप से पहचाना और डाउनलोड किया जाएगा।


galaxy.ansible.com/docs/use/index.html यहां वह सभी बातें हैं, जिनका आपको ansible-galaxy का उपयोग करने की आवश्यकता है। यह एक अच्छा किया डॉक्टर है! यहां तक ​​कि अगर आप शुरुआत कर रहे हैं :)
Ayra

@ पीडवा क्या आप नीचे दिए गए मान्य उत्तर में से एक को स्वीकार कर सकते हैं?
जी.जी.

जवाबों:


149

आपको requirements.ymlइस उपयोग-मामले के लिए एक फ़ाइल का उपयोग करना चाहिए । विभिन्न प्रकार की संस्थापित विधियों में से किसी भी भूमिका का वर्णन करें:

# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight

# Install a role from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# Install a role from a specific git branch
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: origin/master

# Install a role at a specific tag from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# Install a role at a specific commit from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

फिर उन्हें स्थापित करें:

ansible-galaxy install -r requirements.yml

यहाँ एक काम करने का उदाहरण है (ओपनग्रायट का उपयोग करके ऐसेटिबल को एक वैगनर प्रावधान के रूप में स्थापित करना)। अधिक जानकारी के लिए प्रासंगिक Ans डॉक्स देखें ।


नीचे भी देखें @Kieran एंड्रयूज जवाब। यह इसका विस्तार करता है।
मार्को फेरारी

1
यह वास्तव में प्लेबुक की भूमिका निर्भरता को स्वचालित रूप से स्थापित नहीं कर रहा है, यह स्पष्ट रूप से उन निर्भरता की एक सूची स्थापित कर रहा है जिन्हें प्लेबुक बनाने वाले मानव द्वारा मैन्युअल रूप से सूचीबद्ध किया गया है।
नील

53

जैसा कि सुझाव दिया गया है, आप इस जरूरत के लिए एक आकाशगंगा का उपयोग कर सकते हैं।

Ansible में एक सुविधा है जहां आप एक requirements.ymlफ़ाइल बना सकते हैं जो आपकी सभी भूमिकाओं को सूचीबद्ध करती है। आप इसके बारे में यहां जान सकते हैं: जान http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file

उदाहरण के लिए (आवश्यकताएँ)

- src: yatesr.timezone

फिर आप ansible-galaxy install -r requirements.ymlइस फ़ाइल को वहां सूचीबद्ध सभी भूमिकाओं को डाउनलोड करने के लिए चलाते हैं ।

यदि आप इसे फिर से स्वचालित करना चाहते हैं, तो आप एक सरल शेल स्क्रिप्ट बना सकते हैं जो दो कमांड चलाएगा।

उदाहरण के लिए (ansible.sh):

./ansible.sh

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory 

1
बस परीक्षण किया गया, यह एक संदेश प्रदर्शित करता है कि भूमिकाएं पहले से ही डाउनलोड की गई हैं, कोई त्रुटि नहीं। संस्करण2.2.1
इगनाटो

यदि प्लेबुक उन आकाशगंगा भूमिकाओं का उपयोग करता है जो आप स्थापित कर रहे हैं तो वे पहली बार प्लेबुक को चलाने के लिए नहीं चलेंगे क्योंकि उनकी उपस्थिति को डाउनलोड करने से पहले उनकी उपस्थिति की जाँच की जाती है। दूसरी बार प्लेबुक को कॉल करने पर नव-स्थापित भूमिकाओं को उठाया जाएगा।
बेन

मैंने कमांड को कम करने के लिए एक रैपर स्क्रिप्ट के साथ अब मैं इसे कैसे कर रहा हूं, इसे अपडेट किया है।
किरन एंड्रयूज

19

मैं अक्सर अपने आप को एक जावा JDK स्थापित करने लगता है। एक भूमिका का उपयोग करना उस स्पर्श को आसान बनाता है। मैंने अलग-अलग तरीकों से एक जोड़ी की कोशिश की है (बहुत सारे .गितमोडुल्स और सबमॉड्यूल सहित ... मुझे काम के लिए कई गिट सिस्टम का उपयोग करना होगा और यह सब बदसूरत हो जाता है)। मेरी सबसे बड़ी आवश्यकता यह है कि मैं अपने प्लेबुक प्रोजेक्ट में रोल कोड की जांच नहीं करता, ज्यादातर इसलिए मैं सब कुछ एक जगह पर रख सकता हूं।

मेरी 'आवश्यकताओं की सामग्री। फ़ाइल':

- src: https://github.com/staylorx/ansible-role-wls-prep.git
  version: master
  name: staylorx.wls-prep

- src: https://my-work-git-extravaganza.com
  version: 2.x
  name: coolplace.niftyrole

#From Ansible Galaxy
- src: staylorx.oracle-jdk

मैं एक अलग प्लेबुक, इंस्टाल-भूमिकाएँ चलाता हूं।

---

- hosts: localhost

  tasks:
    - file:
        path:  roles
        state: absent

    - local_action:
        command ansible-galaxy install -r requirements.yml --roles-path roles

    - lineinfile:
        dest:   .gitignore
        regexp: '^\/roles$'
        line:   '/roles'
        state:  present

मैं इस पहली प्लेबुक को चलाता हूं, फिर सामान्य रूप से किसी भी प्लेबुक में अपनी भूमिका निभाता हूं। मेरे लिए रहस्य यह सुनिश्चित करने के लिए है कि इसे git द्वारा अनदेखा किया जाए ताकि मैं भूल से भी भूमिकाओं की जाँच न करूँ। जब से मैं हर बार फ़ोल्डर मिटा देता हूं, मैं यह सुनिश्चित करता हूं कि मुझे त्रुटियों को मजबूर करने या अनदेखा करने की आवश्यकता नहीं है।


इससे पहले कि आप स्थानीय कमांड चलाएं, यह 'भूमिका नहीं मिली' के साथ विफल हो जाएगा।
डैनियल आंद्रेई मिनकै

1
@ Mincă डैनियल आंद्रेई आपको गतिशील तरीके का उपयोग करने की आवश्यकता है, उदा शामिल हैं_लोक। यह
user1686407

4

एक अन्य उपाय गिट सबमॉड्यूल का उपयोग करना है। आखिरकार, Ansible Galaxy केवल github रिपॉजिटरी की एक निर्देशिका है ...

मैं इस आदेश का उपयोग स्वचालित रूप से किसी भी गैलेक्सी भूमिका को एक सबमॉड्यूल के रूप में जोड़ने के लिए करता हूं:

ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh

फिर अपने git रेपो में परिवर्तन करें। जब आप भविष्य में अपने रेपो को क्लोन करते हैं, तो इसे सबमॉड्यूल्स के साथ क्लोन करना सुनिश्चित करें, जैसेgit clone ... --recursive

इसका एक फायदा यह है कि, एक git सबमॉड्यूल हमेशा एक विशिष्ट संस्करण (git कमिट-हैश) का संदर्भ देता है। यह आपको अपने उत्पादक वातावरण में अनियोजित अपडेट चलाने से रोकेगा। गैलेक्सी भूमिका के एक नए संस्करण में बग्स या काम पहले की तुलना में पूरी तरह से अलग हो सकते हैं। Git सबमॉड्यूल के साथ आप नए संस्करण में किसी भूमिका को अद्यतन करते हैं या नहीं।

इसके अलावा, आपको .gitignoreअपनी रिपॉजिटरी में उनके कोड को कम करने से रोकने के लिए अपने में आकाशगंगा भूमिकाओं को ब्लैकलिस्ट करने का भी ध्यान नहीं रखना पड़ेगा ।


5
मेरी राय में यह बुरा व्यवहार है। यह आमतौर पर निर्भरता प्रबंधन उपकरणों का उपयोग करने के लिए तो एससीएम रेपो को एक साथ गोंद करने के लिए आसान है, खासकर जब हम एससीएम के बारे में गिट सबमॉडल्स के बारे में बात कर रहे हैं।
डेविड रेसनिक

1
माना। वास्तव में मैं अब यह प्रयोग नहीं कर रहा हूँ। फिर भी यह एक वैध दृष्टिकोण है क्योंकि अनसुनी-आकाशगंगा एकदम सही है। भले ही कोई संस्करण आपकी आवश्यकताओं की फ़ाइल में टकरा गया हो, गैलेक्सी आपको अपडेट के लिए जाँच नहीं करेगा, यदि आप इसे अनिर्दिष्ट --forceध्वज के साथ सभी भूमिकाओं को फिर से डाउनलोड करने के लिए मजबूर करते हैं, तो यह आपको यह नहीं दिखाएगा कि क्या वास्तव में बदल गया है। यह एक ब्लैक बॉक्स है जिसे आप केवल तभी नियंत्रित कर सकते हैं जब आप एससीएम में डाउनलोड की गई आकाशगंगा भूमिकाओं को रखेंगे। हालांकि अन्य कारणों से यह एक अच्छा विचार है। सबमोडुल्स को खींचते समय आप कम से कम यह देखते हैं कि कौन सी भूमिकाएँ बदल गईं।
.उंडन

BTW, सभी समस्याओं सबमॉड्यूल्स, AFAIK इस स्थिति में नगण्य हैं क्योंकि वे अपनी सामग्री को संशोधित करने से संबंधित हैं। मेरे अनुभव से पूरी तरह से ठीक है ..
udondan

4

आप कमांड मॉड्यूल का उपयोग करके आवश्यक भूमिकाओं को स्थापित करने के लिए एक Ansible भूमिका का उपयोग कर सकते हैं

यहाँ एक बहुत ही बुनियादी उदाहरण है जो चलता है ansible-galaxy install:

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

ansible_roles_listएक चर के रूप में या एक भूमिका पैरामीटर के रूप में आपूर्ति की जा सकती।

यदि आप किसी भूमिका में ऐसा करते हैं, तो इसे किसी भी अन्य भूमिकाओं से पहले लागू किया जाना चाहिए जिसे आप एक अलग प्लेबुक में, इसका उपयोग करके स्थापित करना चाहते हैं। ऐसा इसलिए होता है क्योंकि यदि आप उन्हें संदर्भित करते हैं, तो प्लेबुक चलाने से पहले यदि सभी भूमिकाएं उपलब्ध हैं, तो Ansible चेक करता है।


अंडा और मुर्गी :)
bazeusz

2

इस समय, जहां तक ​​मुझे पता है कि रनटाइम पर भूमिकाएं डाउनलोड करने का कोई स्वचालित तरीका नहीं है। आपकी सबसे अच्छी शर्त है कि या तो उन्हें अपने स्वयं के रेपो में शामिल करें या सभी आवश्यकताओं को सूचीबद्ध करने के लिए एक उचित दस्तावेज रखें। आप एक प्री-फ़्लाइट प्लेबुक भी बना सकते हैं जो आपकी भूमिकाएँ स्थापित करती है। :)


3
आप इसके लिए एक आवश्यकताएँ.txt फ़ाइल का उपयोग कर सकते हैं। देखें: docs.ansible.com/…
toast38coza

0

यहां, मेरी आवश्यकताएं भूमिका पर हैं और install.yml में उपयोग की जाती हैं

main.yml

 # tasks file for MY_ROLE
- name: Install requirements
  local_action: command ansible-galaxy install -r {{ role_path }}/requirements.yml -p /etc/ansible/roles

- include_tasks: install.yml 
.  
├── playbook.yml  
├── inventory  
├── roles  
│    └── My_Role   
│        ├── tasks  
│        │   └── main.yml  
│        │   └── install.yml  
│        └── requirements.yml

0

यदि आवश्यकताएँ .yml आपकी परियोजना की भूमिकाओं निर्देशिका में रहती है, तो टॉवर / AWX स्वचालित रूप से भूमिकाओं को स्थापित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.