Ansible

ansible コマンドでモジュール引数 ( パラメータ ) を複数渡す方法

Playbook に書くような内容を ansible コマンドで実行したい

例えばこんなのを ansible コマンドでやりたい。

some_playbook.yml
- hosts: localhost
  tasks:
    - file:
        path: ~/example.txt
        state: touch

結論

こんな風に、key=value形式をスペースで区切って渡せば良い。

$ ansible -m "モジュール名" --args "key1=value2 key2=value2"

実行例

$ ansible localhost -m "file" --args "path=~/example.txt state=touch" 
localhost | SUCCESS => {
    "changed": true,
    "dest": "/Users/yinaura/example.txt",
    "gid": 20,
    "group": "staff",
    "mode": "0644",
    "owner": "yinaura",
    "size": 4,
    "state": "file",
    "uid": 501
}

(注釈‥localhostであれば便宜的にインベントリ指定なしでも動く)

ここに至る経緯

最新版の ansible help でもごく簡素にしか書かれていない。

Options:
  -a MODULE_ARGS, --args=MODULE_ARGS
                        module arguments

StackOverFlow や 公式ドキュメントを探しても例が出てこない。
コロンやセミコロンや改行で区切っても無理だ。

色々試してようやく動いた。

追記

How Ansible Works にしれっと例が書いてあったという驚き。

ansible all -m ping 
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

環境

  • ansible 2.6.0

Links