1. ホーム

[解決済み】ansible playbookで1つのタスクだけを実行する方法は?

2022-04-06 03:35:01

質問

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

解決方法は?

を使用する必要があります。 tags: で説明されているように https://docs.ansible.com/ansible/latest/user_guide/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文のタグ付けも可能です。

- include: foo.yml tags=web,foo

いずれも、include文の中の一つ一つのタスクにタグ付けする機能を持っています。