Help us understand the problem. What is going on with this article?

registerで登録した処理結果の中を知る

More than 1 year has passed since last update.

register 使用例

よく見かけるAnsibleの"register"。
使い方はだいたい以下の感じ。

delete.yml
---
- hosts: "web"
  tasks:

  # /tmp/hoge配下のファイルリスト(*.txt)を取得
  - name: "get file list"
    find:
      paths: "/tmp/hoge"
      patterns: "*.txt"
    # 「f_list」に格納
    register: "f_list"

  # ファイルを削除
  - name: "file delete"
    file:
      # 「item」の中の「path」要素をfileモジュールのpathに入れる
      path: "{{ item.path }}"
      state: "absent"
    # 先程のファイルリストの「files」要素を「item」に入れる
    with_items: "{{ f_list.files }}"

registerに登録された処理結果を知る

先の例では find モジュールの処理結果が f_listregister (登録)される。
削除処理では f_list の中に files という要素があることを示しており、 files には path という要素があるらしい。

って、本当に?を知りたい。
また他にどのような要素があるのかを知りたい。

debug.yml
---
- hosts: "web"
  tasks:

  - name: "get file list"
    find:
      paths: "/tmp/hoge"
      patterns: "*.txt"
    register: "f_list"

  - name: "debug find"
    debug:
      msg: "{{ f_list }}"

dubg: msg: に出すだけかーい!
で、その結果

# ansible-playbook -i hosts -l web debug.yml

PLAY [web] *****************************************************************

TASK [Gathering Facts] *****************************************************
ok: [192.168.200.230]

TASK [get file list] *******************************************************
ok: [192.168.200.230]

TASK [debug find] **********************************************************
ok: [192.168.200.230] => {
    "msg": {
        "changed": false,
        "examined": 3,
        "failed": false,
        "files": [
            {
                "atime": 1542122241.550976,
                "ctime": 1542123388.5329752,
                "dev": 64769,
                "gid": 0,
                "gr_name": "root",
                "inode": 1581397,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0744",
                "mtime": 1541056298.0,
                "nlink": 1,
                "path": "/tmp/hoge/ccc.txt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 630,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": true
            },
            {
                "atime": 1542122241.550976,
                "ctime": 1542123385.1549752,
                "dev": 64769,
                "gid": 0,
                "gr_name": "root",
                "inode": 1581396,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0644",
                "mtime": 1414064490.0,
                "nlink": 1,
                "path": "/tmp/hoge/bbb.txt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 647,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": false
            },
            {
                "atime": 1542122241.550976,
                "ctime": 1542123380.2449753,
                "dev": 64769,
                "gid": 0,
                "gr_name": "root",
                "inode": 1581394,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0644",
                "mtime": 1414064490.0,
                "nlink": 1,
                "path": "/tmp/hoge/aaa.txt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 1991,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": false
            }
        ],
        "matched": 3,
        "msg": ""
    }
}
PLAY RECAP *****************************************************************
192.168.200.230            : ok=3    changed=0    unreachable=0    failed=0

上記をみると find: の処理結果にはファイルのフルパスは含まれるけど basenamedirname といった要素が無いことがわかる。
特定のファイル名は削除したくない、という場合は whenpath を渡しつつ正規表現でチェックするしかなさそうだ。

is 系の要素を使えば when でファイルの種別判定ができそうだ。
「リンク以外を削除」であれば when: "{{ item.islnk }}" == false だろうか。

rgrp 以降の要素がなんだろうと思ったけど、ファイルのパーミッションのようだ。
aaa.txt0644 = -rw-r--r-- なので rxxx は全部trueで、残りはユーザの書き込み権のみtrue。

ファイルがいくつ存在したのか、は "{{ f_list.matched }}" を見ればいいのかもしれない。

最終的には公式ドキュメントだけど

いきなり活字を読んでも眠くなるだけ。
ある程度、あたりをつけてからの方が効率的だろう。

ただ、「あたり」は必ず公式ドキュメントで裏を取るようにしないと「思い込み」になるので注意。
※ココに書いてあることはすべて「あたり」なので公式ドキュメントで裏をとってね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした