জবাবদিহি প্লেবুকে কীভাবে কেবল একটি কাজ চালানো যায়?


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.html তেtags: নথিভুক্ত হিসাবে ব্যবহার করা উচিত


আপনার কাছে যদি একটি বড় প্লেবুক থাকে তবে পুরো প্লেবুকটি না চালিয়ে কনফিগারেশনের একটি নির্দিষ্ট অংশটি চালাতে সক্ষম হয়ে উঠতে এটি কার্যকর হতে পারে।

নাটক এবং কার্য উভয়ই এই কারণে একটি "ট্যাগ:" বৈশিষ্ট্যকে সমর্থন করে।

উদাহরণ:

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 । এখানে গৃহীত উত্তরটি গুগল এবং ডাকডাক্কিগগোতে বেশ উপরে উঠে গেছে তবে উত্তরসূচক 2.7 এর সাথে প্রবর্তিত নতুন ইন্টারফেসটি লুকিয়ে রাখে।
20:55

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বিকল্পের সাথে এটি একত্রিত করাও বেশ কার্যকর quite এটি আসলে কমান্ডটি সম্পাদন করবে না তবে যা ঘটেছে তা আপনাকে খুব ভার্বোজ আউটপুট দেবে।
ল্যানোএক্সএক্স

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

আমি যেমন কাজের সংকলন হিসাবে একটি ভূমিকা ব্যবহার করার ক্ষমতা পছন্দ করব যে আমার প্লেবুকে, আমি বেছে নিতে পারি যে কোন কাজগুলির উপসেট চালানো উচিত। দুর্ভাগ্যক্রমে, প্লেবুক কেবল এগুলি সমস্ত লোড করতে পারে এবং তারপরে আপনাকে --tagsকোন কাজগুলি পরিচালনা করতে হবে তা বেছে নেওয়ার জন্য আপনাকে cmdline এ বিকল্পটি ব্যবহার করতে হবে। এটির সাথে সমস্যাটি হ'ল যদি আপনি সেট করতে বা মনে না রাখেন তবে সমস্ত কাজ চলবে ।--tags--skip-tags

আমি কিছু কাজ সেট আপ করেছি, তবে একটি when:ধারা দিয়ে যা কোনও ভার সেট করা থাকলে কেবল গুলি চালানো হবে।

যেমন

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

এখন, এই কাজটি ডিফল্টরূপে চালিত হবে না, তবে কেবলমাত্র আমি সেট করে দিই stuff=true

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

বা একটি প্লেবুক:

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

আমি কেবল একজন নবাগত এবং আপনি যা বলছেন তা আমি শুনতে পেয়েছি ... তবে কেন আপনি পুরো প্লেবুক চালাতে বিরত আছেন তা আমি এক্সপ্লোর করব। একটি উপযুক্ত উত্তরযোগ্য নাটক সাধারণত আদর্শবান হয়, এবং রাষ্ট্রীয় মানদণ্ড পূরণ করা হলে তথ্য সংগ্রহ করে "কিছুই করবে না" will আমি স্বীকার করি যে আমার বেশিরভাগ নাটক "এই রাষ্ট্র কিনা এটি পরীক্ষা করুন এবং প্রয়োজনে কিছু করুন" এর চেয়ে "কিছু না কিছু" করায় আমি এই উদ্বেগটি ভাগ করি। পূর্ববর্তীটি কেবল একবার চালানো যেতে পারে, বা তদারকি করা হয়েছিল যখন যে কোনও সময় চালানো যেতে পারে এবং এটি ক্ষতিগ্রস্থ হবে না।
স্কট প্রাইভ

আমি সাধারণত এটি ডিবাগ কাজের জন্য ব্যবহার করি। সাধারণত, আমি চাই না যে ডিবাগ তথ্য চলুক, তবে কখনও কখনও আমি তা করি। অন্যান্য প্রতিক্রিয়াগুলির দিকে তাকানো, যদিও এখন এটি করার আরও ভাল উপায় হতে পারে।
চেপাজো

হ্যা এখানে. সুনির্দিষ্টভাবে বলতে গেলে, বেছে বেছে নাটকগুলি চালানোর এখন একটি উপায় নাটকগুলি "ট্যাগিং" করে। নাটকগুলিও সীমাবদ্ধ করার অন্যান্য উপায় থাকতে পারে; আমি এখনও শিখছি ...
স্কট প্রাইভ

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"

এটি কাজ করে না - ত্রুটি! একটি প্লেবুক অবশ্যই নাটকগুলির একটি তালিকা হতে পারে, তার পরিবর্তে একটি <শ্রেণি 'উত্তরযোগ্য p পার্সিং.আইএমএল.ওবজেক্টস Aঅ্যান্সিবলম্যাপিং'>
পেয়েছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.