ansible のモジュール(ファイル操作等)をまとめてみました

とりあえず、よく使うものから。随時更新していきます。

シェル実行系
============

#### [shell](http://docs.ansible.com/ansible/shell_module.html)

```yaml:ファイルやフォルダが既に有るならスキップされる
- shell: シェル
  args:
    chdir: 実行ディレクトリ(省略可)
    creates: ファイルやフォルダ
```

```yaml:ファイルやフォルダが既に無いならスキップされる
- shell: シェル
  args:
    chdir: 実行ディレクトリ(省略可)
    removes: ファイルやフォルダ
```

```yaml:情報を取得したいだけのシェル実行
- shell: ls 取得したいパス
  register: register
  changed_when: false  # 常に未変更にする
  failed_when: false  # 結果コードに関係なく成功にする(ファイルがなかったり権限エラーだと2が返るので)
- file: path="{{ item }}"
        state=absent
  with_items: register.stdout_lines
```


ファイル/フォルダ系
=====================

#### [file](http://docs.ansible.com/ansible/file_module.html)

```yaml:ディレクトリ作成(サブディレクトリも一気に作れる)
- file: path=作成したいパス
        state=directory
        owner=foo
        group=foo
        mode=0644
```

```yaml:ファイル/ディレクトリ削除(下位も一気に消せる)
- file: path=作成したいパス
        state=absent
```

```yaml:ファイル属性変更
- file: path=作成したいパス
        owner=foo
        group=foo
        mode=0644
# 新規作成はできない。したいなら template や copy を使う
```

```yaml:8日以上更新の無いバックアップファイルを削除
- shell: find /var/backups/log.???????? -maxdepth 0 -ctime +8
  sudo: yes
  register: register
  changed_when: false
  failed_when: register.rc not in [0,1]

- file: path="{{ item }}"
        state=absent
  with_items: register.stdout_lines
```


#### [copy](http://docs.ansible.com/ansible/copy_module.html)

```yaml:ローカルのファイルをリモートに
- copy: src=ローカル側のコピー元ファイルのパス
        dest=リモート側のファイルパス(srcがディレクトリならこれもディレクトリ)
        backup=yes  # タイムスタンプつきのbackupつくる(省略可)
        directory_mode=yes  # 新規だけでなく既存についてもmodeを再現する(省略可)
```

#### [template](http://docs.ansible.com/ansible/template_module.html)

```yaml:テンプレートのファイルを置く
- template: src="ローカル側のテンプレートのファイルパス"
            dest="リモート側の配置先"
```


#### [synchronize](http://docs.ansible.com/ansible/synchronize_module.html)

```yaml:rsyncする
- synchronize: src="rsync元のローカルディレクトリ"
               dest="rsync先のリモートディレクトリ"  # この中にローカルディレクトリで指定したディレクトリが作成される
```

- `src="/tmp/aaa" dest="/tmp/aaa"` の場合はリモート側に `/tmp/aaa/aaa` が出来てしまう。`dest="/tmp"` とするのが正しい。
- 環境によっては `sudo` 状態だと鍵が使えずエラーになるので、その場合は `sudo: no` をつける。

```yaml:sudoをnoにする例
- synchronize: src="パス"
               dest="パス"
  sudo: no
```



#### [find](http://docs.ansible.com/ansible/find_module.html) (v2.0以降)

```yaml:パターンで検索
- find: paths=検索対象のパス
        patterns="'*.txt','*.js'"
```

```yaml:正規表現で検索
- find: paths=検索対象のパス
        patterns="\.(?:txt|js)$"
        use_regex=Treu
```

```yaml:日時で検索
- find: paths=検索対象のパス
        age="1w"  # "1d":1日以上、"-1w":1週間以内
```

```yaml:戻り値
- find: paths=検索対象のパス
        patterns="'*.txt','*.js'"
  register: found_files
```


git / composer
================

#### [git](http://docs.ansible.com/ansible/git_module.html)

```yaml:cloneもしくはpull
- git: repo="リポジトリ名"
       version="ブランチ名やタグ名など"
       dest="clone先のパス"  # リポジトリ名含む
       accept_hostkey=True
       key_file="秘密鍵のパス"  
```

#### [composer](http://docs.ansible.com/ansible/composer_module.html)

```yaml:composer
- composer: command=install
            working_dir="composer.jsonがあるディレクトリのパス"
            no_dev="no"  # (省略可) no を指定すると require-dev となる。
```


入力待ち
=========

[ansible で prompt (入力待ち) の実現とその周辺テクニックのまとめ](http://qiita.com/waterada/items/5f3e5d776c50f2aadec4) に書きましたのでそちらを参照してください。