ansible-playbook実行時に複数tagを指定する

## はじめに

自分用メモ。
久しぶりにansibleを使うとplaybook実行時に複数tagを指定する方法を忘れている。
デリミタがなんだったかとか、スペース入れてよかったかとか。

ついでに挙動をまとめておく。

## 環境

* ansible 2.2.2.0
* macOS Sierra 10.12.4

## By ansible-playbook -h

```
 -t TAGS, --tags=TAGS  only run plays and tasks tagged with these values
```

## Sample Playbook

```
---
- hosts: 127.0.0.1
  connection: local
  tasks:
    - name: tag01
      tags: tag01
      lineinfile:
        state=present
        create=yes
        dest=/tmp/tags-test.log
        line=tag01
    - name: tag02
      tags: tag02
      lineinfile:
        state=present
        create=yes
        dest=/tmp/tags-test.log
        line=tag02
    - name: tag03
      tags: tag03
      lineinfile:
        state=present
        create=yes
        dest=/tmp/tags-test.log
        line=tag03
```

## Using `--tags TAG_NAME1,TAG_NAME2...`

いつも使っている書式。
デリミタはカンマで引数の間にスペースを入れてはいけない。

```
$ ansible-playbook tags-test.yml --tags tag01,tag02,tag03

PLAY [127.0.0.1] ***************************************************************

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [tag01] *******************************************************************
changed: [127.0.0.1]

TASK [tag02] *******************************************************************
changed: [127.0.0.1]

TASK [tag03] *******************************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=4    changed=3    unreachable=0    failed=0


$ cat /tmp/tags-test.log
tag01
tag02
tag03
```

スペースを入れると怒られます。

```
$ ansible-playbook tags-test.yml --tags tag01, tag02, tag03
ERROR! the playbook: tag02, could not be found
```

クォートすれば一応実行はできる。
が、最初の引数しか有効にならない。

```
$ ansible-playbook tags-test.yml --tags "tag01, tag02, tag03"

PLAY [127.0.0.1] ***************************************************************

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [tag01] *******************************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=2    changed=1    unreachable=0    failed=0

$ cat /tmp/tags-test.log
tag01
```

## Using `-t TAG_NAME1,TAG_NAME2...`

ショートオプションは`-t`。
（初めにロングオプションで覚えてしまったので使っていない）

```
$ ansible-playbook tags-test.yml -t tag01,tag02,tag03

PLAY [127.0.0.1] ***************************************************************

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [tag01] *******************************************************************
changed: [127.0.0.1]

TASK [tag02] *******************************************************************
changed: [127.0.0.1]

TASK [tag03] *******************************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=4    changed=3    unreachable=0    failed=0


$ cat /tmp/tags-test.log
tag01
tag02
tag03
```

## オプションを複数指定してみる

誤った指定方法。
最後の一つだけが有効になる。

```
$ ansible-playbook tags-test.yml -t tag01 -t tag02 -t tag03

PLAY [127.0.0.1] ***************************************************************

TASK [setup] *******************************************************************
ok: [127.0.0.1]

TASK [tag03] *******************************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=2    changed=1    unreachable=0    failed=0


$ cat /tmp/tags-test.log
tag03
```

## まとめ

* デリミタはカンマ
* 引数の間にスペースを入れてはいけない
* オプションを複数指定しても最後のひとつしか有効にならない