【Ansible Tower/AWX】ファイルの存在確認と条件分岐


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible Tower・AWX リファレンス

Ansibleで、ファイルの存在確認を行い、その結果を元に処理を条件分岐させる方法を解説します。

ファイルの存在確認

ファイルの存在確認は、statモジュールを使用します。
では、statモジュールを使用したサンプルと実行結果を見てみましょう。

サンプル

サンプルのソースコードです。
statモジュールのパラメーターの1つ[path]にファイルを指定することで、存在確認することが可能です。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: ファイルの存在確認
    stat:
      path: /home/awx/test.txt

実行結果

ファイルが存在する場合の実行結果です。
[exists]が[true]となっていれば、ファイルが存在します。
また、ファイルが存在する場合は、下記のように様々な情報を取得することが可能です。

{
    "changed": false,
    "stat": {
        "exists": true,
        "path": "/home/awx/test.txt",
        "mode": "0644",
        "isdir": false,
        "ischr": false,
        "isblk": false,
        "isreg": true,
        "isfifo": false,
        "islnk": false,
        "issock": false,
        "uid": 1000,
        "gid": 1000,
        "size": 0,
        "inode": 16800257,
        "dev": 64768,
        "nlink": 1,
        "atime": 1657237397.0795913,
        "mtime": 1657237397.0795913,
        "ctime": 1657237410.0525568,
        "wusr": true,
        "rusr": true,
        "xusr": false,
        "wgrp": false,
        "rgrp": true,
        "xgrp": false,
        "woth": false,
        "roth": true,
        "xoth": false,
        "isuid": false,
        "isgid": false,
        "blocks": 0,
        "block_size": 4096,
        "device_type": 0,
        "readable": true,
        "writeable": true,
        "executable": false,
        "pw_name": "awx",
        "gr_name": "awx",
        "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
        "mimetype": "inode/x-empty",
        "charset": "binary",
        "version": "427586943",
        "attributes": [],
        "attr_flags": ""
    },
    "invocation": {
        "module_args": {
            "path": "/home/awx/test.txt",
            "follow": false,
            "get_md5": false,
            "get_checksum": true,
            "get_mime": true,
            "get_attributes": true,
            "checksum_algorithm": "sha1"
        }
    },
    "_ansible_no_log": false
}

ファイルが存在しない場合は[exists]が[false]になります。

TASK [ファイルの存在確認] ***************************************************************
ok: [SYUTAKUAPL01] => {"changed": false, "stat": {"exists": false}}

ファイルの存在確認と条件分岐

ここでは、ファイルの存在確認を行い、その結果によって処理を分岐させる方法を説明します。

サンプル

サンプルのソースコードです。
処理を分岐させるために、存在確認の結果を変数に格納する必要があります。
下記のサンプルでは、結果を変数[result]に格納しています。

実行結果が格納された変数[result]から、ファイルの存在確認結果のみを取り出すには下記のように記述します。

result.stat.exists

また、先頭に「not」を付けて、「not result.stat.exists」とすることで、ファイルが存在しない場合の処理となります。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: ファイルの存在確認
    stat:
      path: /home/awx/test.txt
    register: result

  - name: ファイルが存在する場合の処理
    debug:
      msg: "ファイルは存在します。"
    when: result.stat.exists

  - name: ファイルが存在しない場合の処理
    debug:
      msg: "ファイルは存在しません。"
    when: not result.stat.exists

実行結果

ファイルが存在する場合の実行結果です。
ファイルが存在するので、タスク「ファイルが存在する場合の処理」が実行されます。
逆にタスク「ファイルが存在しない場合の処理」は「skipping」となり、処理がスキップされます。

SSH password: 

PLAY [all] *********************************************************************

TASK [ファイルの存在確認] ***************************************************************
ok: [SYUTAKUAPL01]

TASK [ファイルが存在する場合の処理] **********************************************************
ok: [SYUTAKUAPL01] => {
    "msg": "ファイルは存在します。"
}

TASK [ファイルが存在しない場合の処理] *********************************************************
skipping: [SYUTAKUAPL01]

PLAY RECAP *********************************************************************
SYUTAKUAPL01               : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

コメント

タイトルとURLをコピーしました