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
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ステートメント内のすべてのタスクにタグを付ける機能を持っています。
それほどエレガントではありませんが、方法があります。
ansible-playbook roles/hadoop_primary/tasks/hadoop_master.yml --step --start-at-task='start hadoop jobtracker services'
Perform task: start hadoop jobtracker services (y/n/c)
y
Ctrl-C
を押します。自分のプレイブックで、実行するタスクのサブセットを選択できるように、ロールをタスクのコレクションとして使用する機能が大好きです。残念ながら、プレイブックはそれらをすべて読み込むことしかできず、実行するタスクを選択するには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}
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]
あなたは ハンドラ をよく知っていますか?私はそれがあなたが探しているものだと思います。再起動を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
これはタグを使って簡単にできます。
タグの例を以下に定義します。
---
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"