कैसे चलाए जा सकने वाले प्लेबुक में केवल एक काम?


172

क्या कोई कार्य केवल एक कार्यपट्टी में चलाने के लिए है?

उदाहरण के लिए, में roles/hadoop_primary/tasks/hadoop_master.yml। मेरे पास "start hadoop job tracker services"टास्क है। क्या मैं सिर्फ एक काम कर सकता हूं?

hadoop_master.yml फ़ाइल:

---
# Playbook for  Hadoop master servers

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started
  tags:
   debug

जवाबों:


248

आपको http://docs.ansible.com/playbooks_tags.htmltags: में प्रलेखित के रूप में उपयोग करना चाहिए


यदि आपके पास एक बड़ी प्लेबुक है, तो यह पूरे प्लेबुक को चलाने के बिना कॉन्फ़िगरेशन के एक विशिष्ट भाग को चलाने में सक्षम होने के लिए उपयोगी हो सकता है।

खेल और कार्य दोनों इस कारण से "टैग:" विशेषता का समर्थन करते हैं।

उदाहरण:

tasks:

    - yum: name={{ item }} state=installed
      with_items:
         - httpd
         - memcached
      tags:
         - packages

    - template: src=templates/src.j2 dest=/etc/foo.conf
      tags:
         - configuration

यदि आप बहुत लंबी प्लेबुक के "कॉन्फ़िगरेशन" और "पैकेज" भाग को चलाना चाहते हैं, तो आप ऐसा कर सकते हैं:

ansible-playbook example.yml --tags "configuration,packages"

दूसरी ओर, यदि आप कुछ कार्यों के बिना प्लेबुक चलाना चाहते हैं, तो आप ऐसा कर सकते हैं:

ansible-playbook example.yml --skip-tags "notification"

आप भूमिकाओं के लिए टैग भी लगा सकते हैं:

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

और आप मूल विवरणों को भी टैग कर सकते हैं:

- include: foo.yml tags=web,foo

इन दोनों में शामिल विवरण के अंदर हर एक कार्य को टैग करने का कार्य है।


: इस जवाब पर एक नज़र डालें stackoverflow.com/a/52888274/2834918 । यहाँ स्वीकृत उत्तर google पर पॉप अप होता है और शीर्ष पर काफी हद तक duckduckgo, लेकिन ansible 2.7 के साथ पेश किए गए नए इंटरफ़ेस को छुपाता है।
bixel

84

एक तरीका है, हालांकि बहुत सुरुचिपूर्ण नहीं है:

  1. ansible-playbook roles/hadoop_primary/tasks/hadoop_master.yml --step --start-at-task='start hadoop jobtracker services'
  2. आपको एक संकेत मिलेगा: Perform task: start hadoop jobtracker services (y/n/c)
  3. उत्तर y
  4. आपको अगला संकेत मिलेगा, दबाएं Ctrl-C

4
संयोजन --checkऔर -vvvविकल्प के साथ भी काफी उपयोगी है। यह वास्तव में कमांड का प्रदर्शन नहीं करेगा, लेकिन आपको बहुत क्रियात्मक आउटपुट देता है कि क्या हुआ होगा।
लैंक्सएक्स

10

FWIW Ansible 2.2 के साथ उपयोग कर सकते हैं include_role :

प्लेबुक test.yml:

- name: test
  hosts:
    - 127.0.0.1
  connection: local
  tasks:
    - include_role:
        name: test
        tasks_from: other

फिर इसमें roles/test/tasks/other.yml:

- name: say something else
  shell: echo "I'm the other guy"

और ansible-playbook test.ymlपाने के लिए:

TASK [test : say something else] *************
changed: [127.0.0.1]

6

मुझे अपने कार्यों की एक संग्रह के रूप में भूमिका का उपयोग करने की क्षमता पसंद आएगी, मेरी नाटकपुस्तिका में, मैं चुन सकता हूं कि कौन से कार्यों को चलाना है। दुर्भाग्य से, प्लेबुक केवल उन सभी को लोड कर सकती है और फिर आपको --tagscmdline पर विकल्प का उपयोग करना होगा कि किन कार्यों को चलाना है। इसके साथ समस्या यह है कि सभी कार्य तब तक चलेंगे जब तक आप सेट करना याद नहीं करते --tagsया करते हैं--skip-tags

मैंने कुछ कार्य निर्धारित किए हैं, हालांकि, एक when:खंड के साथ जो केवल आग लगाएगा यदि कोई var सेट है।

जैसे

# role/stuff/tasks/main.yml
- name: do stuff
  when: stuff|default(false)

अब, यह कार्य डिफ़ॉल्ट रूप से फायर नहीं करेगा, लेकिन केवल अगर मैं सेट करता हूं stuff=true

$ ansible-playbook -e '{"stuff":true}'

या एक प्लेबुक में:

roles:
- {"role":"stuff", "stuff":true}

मैं सिर्फ एक नौसिखिया हूं, और मैं सुनता हूं कि आप क्या कह रहे हैं ... लेकिन मुझे पता चलेगा कि आप पूरी प्लेबुक चलाने के लिए क्यों परेशान हैं। एक उचित एंसिबल प्ले आमतौर पर बेरोजगार होता है, और अगर राज्य के मानदंडों को पूरा करते हैं, तो वे तथ्यों को इकट्ठा करेंगे और "कुछ भी नहीं" करेंगे। मैं मानता हूं कि मैं इस चिंता को साझा करता हूं क्योंकि मेरे अधिकांश नाटक "कुछ करें" के बजाय "जांचें कि क्या यह राज्य है, और यदि आवश्यक हो तो कुछ करें"। पूर्व को केवल एक बार चलाया जा सकता था, या पर्यवेक्षण किया जा सकता था जबकि बाद को किसी भी समय चलाया जा सकता था और यह हानिरहित होगा।
स्कॉट प्रिव

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

हाँ वहाँ है। विशिष्ट होने के लिए, अब चुनिंदा नाटकों को चलाने का एक तरीका नाटकों को "टैग करना" है। नाटकों को सीमित करने के अन्य तरीके भी हो सकते हैं; मैं अभी भी सीख रहा हूं ...
स्कॉट प्रिव

4

क्या आप संचालकों से परिचित हैं ? मुझे लगता है कि यह वही है जो आप ढूंढ रहे हैं। से पुनः आरंभ ले जाएँ hadoop_master.ymlकरने के लिए roles/hadoop_primary/handlers/main.yml:

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started

और अब उपयोग फोन notifyमें hadoop_master.yml:

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins
  notify: start hadoop jobtracker services

3

यह आसानी से टैग का उपयोग करके किया जा सकता है

टैग का उदाहरण नीचे परिभाषित किया गया है:

---
hosts: localhost
tasks:
 - name: Creating s3Bucket
   s3_bucket:
        name: ansiblebucket1234567890
   tags: 
       - createbucket

 - name: Simple PUT operation
   aws_s3:
       bucket: ansiblebucket1234567890
       object: /my/desired/key.txt
       src: /etc/ansible/myfile.txt
       mode: put
   tags:
      - putfile

 - name: Create an empty bucket
   aws_s3:
       bucket: ansiblebucket12345678901234
       mode: create
       permission: private
   tags:
       - emptybucket

उन टैग्स को निष्पादित करने के लिए जिन्हें हम कमांड का उपयोग करते हैं

ansible-playbook creates3bucket.yml --tags "createbucket,putfile"

यह काम नहीं करता है - त्रुटि! प्लेबुक में नाटकों की एक सूची होनी चाहिए, इसके बजाय एक <class 'ansible.parsing.yaml.objects.AnsibleMapping'> मिला
अलेक्जेंडर स्कवार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.