Ansible statモジュールで取得できる内容
Ansibleのstatモジュールではドキュメントに
Retrieves facts for a file similar to the linux/unix ‘stat’ command
と記載されていますが、具体的な値は記載されていません(2015-02-17現在)。
(issueには上がっているようです。stat module documentation · Issue #107)
ソースを見れば一発ですが、分かりやすいように一覧を作成しました。
尚、ansibleのv1.8.2を対象にしています。
statのプロパティ一覧
property | type | description |
---|---|---|
exists | bool | 存在すれば True / 存在しない場合は False (存在しない場合以下の全プロパティはundefined) |
mode | string | "0777" 形式のアクセス権 |
isdir | bool | ディレクトリなら True |
ischr | bool | キャラクタ型の特殊デバイスファイルの場合 True |
isblk | bool | ブロック型の特殊デバイスファイルの場合 True |
isreg | bool | 通常ファイルの場合 True |
isfifo | bool | FIFO (名前つきパイプ) の場合 True |
islnk | bool | シンボリックリンクの場合 True |
issock | bool | ソケットの場合 True |
uid | number | オーナーの uid |
gid | number | オーナーの group id |
size | number | ファイルのサイズ(単位: byte) |
inode | number | inode 番号 |
dev | number | デバイス |
nlink | number | ハードリンク数 |
atime | number | 最近にアクセスされた時間(Linuxの例: 1424174164.9125264) |
mtime | number | 最近に内容を変更した時間(Linuxの例: 1424174164.9125264) |
ctime | number | 最近のメタデータ変更時間(Linuxの例: 1424174164.9125264) |
wusr | bool | ユーザーのwrite権があれば True |
rusr | bool | ユーザーのread権があれば True |
xusr | bool | ユーザーのexecute権があれば True |
wgrp | bool | グループのwrite権があれば True |
rgrp | bool | グループのread権があれば True |
xgrp | bool | グループのexecute権があれば True |
woth | bool | 他ユーザーのwrite権があれば True |
roth | bool | 他ユーザーのread権があれば True |
xoth | bool | 他ユーザーのexecute権があれば True |
isuid | bool | セットUIDビットが立っていれば True |
isgid | bool | セットgroup IDビットが立っていれば True |
lnk_source | string | リンクの場合はリンク元の絶対パス、リンクでない場合はundefined |
md5 | string | 通常ファイルでread権があればファイルのmd5 |
checksum | string | 通常ファイルでread権があればファイルのchecksum(sha1) |
pw_name | string | ユーザー名 |
使用例
stat-test.yaml
---
- hosts: localhost
tasks:
- stat: path=test.txt
register: f
- debug: msg="File exists."
when: f.stat.exists # ファイルが存在すれば実行
- debug: var=f.stat # デバッグ用
- stat: path=test_not_found.txt
register: f
- debug: msg="File not exists."
when: not f.stat.exists # ファイルが存在しなければ実行
- debug: var=f.stat # デバッグ用
ファイルが存在するかどうかはこのような感じで調べられます。
このplaybookとインベントリ
hosts
localhost
を使って、test.txtを用意して実行するとこんな感じになります。
$ ansible-playbook -i hosts stat-test.yaml
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [stat path=test.txt] ****************************************************
ok: [localhost]
TASK: [debug msg="File exists."] **********************************************
ok: [localhost] => {
"msg": "File exists."
}
TASK: [debug var=f.stat] ******************************************************
ok: [localhost] => {
"f.stat": {
"atime": 1424177381.4317896,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"ctime": 1424177378.7864673,
"dev": 2049,
"exists": true,
"gid": 1000,
"inode": 919511,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"md5": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0664",
"mtime": 1424177378.7864673,
"nlink": 1,
"pw_name": "user",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 0,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}
}
TASK: [stat path=test_not_found.txt] ******************************************
ok: [localhost]
TASK: [debug msg="File not exists."] ******************************************
ok: [localhost] => {
"msg": "File not exists."
}
TASK: [debug var=f.stat] ******************************************************
ok: [localhost] => {
"f.stat": {
"exists": false
}
}
PLAY RECAP ********************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0
参考
statのソース
https://github.com/ansible/ansible-modules-core/blob/devel/files/stat.py
Python のドキュメント
http://docs.python.jp/2/library/os.html#os.stat
http://docs.python.jp/2/library/stat.html