カテゴリー
Linux

【Ansible】yum モジュールで冪等性を保ったまま remi-release-7 リポジトリをインストールする書き方

はじめに

Ansible の yum モジュールでパッケージを指定したとき、通常ですとインストールがすでにされているか否かを気にする必要はなく、冪等性の担保も意識する必要がございません。

これと同じ気持ちで remi-release-7.rpm を yum モジュールでインストールしましたところ、2 回目のインストールで失敗してしまいました><。

TASK [php-fpm : Install remi-release-7] ****************************************
fatal: [default]: FAILED! => {"changed": true, "failed": true, "msg": "エラー: 何もしません\n", "rc": 1, "results": ["読み込んだプラグイン:fastestmirror\n/var/tmp/yum-root-YOhnx0/remi-release-7.rpm を調べています: remi-release-7.3-1.el7.remi.noarch\n/var/tmp/yum-root-YOhnx0/remi-release-7.rpm: インストールされたパッケージを更新しません。\n"]}
	to retry, use: --limit @/vagrant/ansible/site.retry

したがいまして、remi-release-7.rpm がインストールされているかどうかを評価する記述を追加しなければなりません!

今回は、その記録をノートいたします。

ポイント

  • stat を使用してインストールされるファイルの状態を取得する処理を入れ、結果を register を使って変数に代入する。
  • 変数.stat.exits を評価することでファイルの存在をチェックする。
  • デバッグ出力で内容を確認するために、debug を使用する。

Ansible コード例

- name: check remi-release-7
  stat: path=/etc/yum.repos.d/remi-php70.repo
  register: remi_release_7

# ↓これはデバッグ用のため、不要となったら削除する。
- debug: var=remi_release_7

- name: Install remi-release-7
  yum:
    name: http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    state: latest
  when: remi_release_7.stat.exists == false

- name: Install php-fpm and deps
  yum: name={{ item }} enablerepo=remi-php71 state=latest
  with_items:
    - php
    - php-fpm
    - php-enchant
    - php-IDNA_Convert
    - php-mbstring
    - php-mysql
    - php-PHPMailer
    - php-process
    - php-simplepie
    - php-xml

実際に動かした時の出力

remi-release-7未インストールな1回目の実行結果

remi-release-7 はインストールしていない状態からのスタートですので、remi_release_7 の状態は remi_release_7.stat.exists は false となります。

when を使用して、条件に remi_release_7.stat.exists が false の時のみ remi-release-7.rpm をインストールいたしますた。

以上の様子が確認できますわね♪

TASK [php-fpm : check remi-release-7] ******************************************
ok: [default]

TASK [php-fpm : debug] *********************************************************
ok: [default] => {
    "remi_release_7": {
        "changed": false, 
        "stat": {
            "exists": false
        }
    }
}

TASK [php-fpm : Install remi-release-7] ****************************************
changed: [default]

TASK [php-fpm : Install php-fpm and deps] **************************************
changed: [default] => (item=[u'php', u'php-fpm', u'php-enchant', u'php-IDNA_Convert', u'php-mbstring', u'php-mysql', u'php-PHPMailer', u'php-process', u'php-simplepie', u'php-xml'])

remi-release-7インストール後、2回目の実行結果

1 回目の Ansible 実行により remi-release-7.rpm はインストール済みとなっております。

その結果、デバッグ出力した remi_release_7 変数の中身は、インストールされた状態の分だけ 1 回目よりも遥かに情報量が増えておりますの♪

remi_release_7.stat.exists は true ですので、remi-release-7.rpm のインストールはスキップされますわ!

以上の様子が、次の出力からわかりますわね♪

TASK [php-fpm : check remi-release-7] ******************************************
ok: [default]

TASK [php-fpm : debug] *********************************************************
ok: [default] => {
    "remi_release_7": {
        "changed": false, 
        "stat": {
            "atime": 1488894158.4026325, 
            "checksum": "bbc61662ae43fa6015042ea043f86581ce6e118f", 
            "ctime": 1488894157.701983, 
            "dev": 64768, 
            "executable": false, 
            "exists": true, 
            "gid": 0, 
            "gr_name": "root", 
            "inode": 67741159, 
            "isblk": false, 
            "ischr": false, 
            "isdir": false, 
            "isfifo": false, 
            "isgid": false, 
            "islnk": false, 
            "isreg": true, 
            "issock": false, 
            "isuid": false, 
            "md5": "ed7792cb9903248db7a15590024e413e", 
            "mode": "0644", 
            "mtime": 1486733264.0, 
            "nlink": 1, 
            "path": "/etc/yum.repos.d/remi-php70.repo", 
            "pw_name": "root", 
            "readable": true, 
            "rgrp": true, 
            "roth": true, 
            "rusr": true, 
            "size": 1316, 
            "uid": 0, 
            "wgrp": false, 
            "woth": false, 
            "writeable": true, 
            "wusr": true, 
            "xgrp": false, 
            "xoth": false, 
            "xusr": false
        }
    }
}

TASK [php-fpm : Install remi-release-7] ****************************************
skipping: [default]

TASK [php-fpm : Install php-fpm and deps] **************************************
changed: [default] => (item=[u'php', u'php-fpm', u'php-enchant', u'php-IDNA_Convert', u'php-mbstring', u'php-mysql', u'php-PHPMailer', u'php-process', u'php-simplepie', u'php-xml'])

おわりに

次のページが参考になりました!ありがとう存じます!

以上です。

コメントを残す