web-dev-qa-db-ja.com

Ansible Playbookでタスクを1つだけ実行する方法

Ansible Playbookでタスクを1つだけ実行する方法はありますか?

たとえば、roles/hadoop_primary/tasks/hadoop_master.ymlにあります。 "start hadoop job tracker services"タスクがあります。その1つのタスクだけを実行できますか?

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
137
Billz

http://docs.ansible.com/playbooks_tags.html に記載されているようにtags:を使用するべきです


大規模なプレイブックがある場合は、プレイブック全体を実行せずに構成の特定の部分を実行できるようにすると便利な場合があります。

このため、再生とタスクの両方で「tags:」属性がサポートされています。

例:

tasks:

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

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

非常に長いプレイブックの「configuration」と「packages」の部分だけを実行したい場合は、次のようにします。

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

その一方で、特定の作業をせずにプレイブックを実行したい場合は、次のようにします。

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

タグをロールに適用することもできます。

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

また、基本的なinclude文にタグを付けることもできます。

- include: foo.yml tags=web,foo

どちらも、includeステートメント内のすべてのタスクにタグを付ける機能を持っています。

200
Mxx

それほどエレガントではありませんが、方法があります。

  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を押します。
70
Victor Ashik

自分のプレイブックで、実行するタスクのサブセットを選択できるように、ロールをタスクのコレクションとして使用する機能が大好きです。残念ながら、プレイブックはそれらをすべて読み込むことしかできず、実行するタスクを選択するにはcmdlineの--tagsオプションを使用する必要があります。これの問題点は、--tagsまたは--skip-tagsを忘れずにallタスクが実行されることです。

ただし、varが設定されている場合にのみ起動する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}
6
ChePazzo

Ansible 2.2のFWIWでは、 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
ddragosd

あなたは ハンドラ をよく知っていますか?私はそれがあなたが探しているものだと思います。再起動をhadoop_master.ymlからroles/hadoop_primary/handlers/main.ymlに移動します。

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

そしてhadoop_master.ymlでuse notifyを呼び出します。

- 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
4
tedder42

これはタグを使って簡単にできます。

タグの例を以下に定義します。

---
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"
2
Nitesh Jain