新卒エンジニアによる全部俺カレンダー2022 2日目投稿記事です。
やりたいこと
yumで特定のパッケージがインストール済みかどうかを確認し、その結果によって以降のTaskの実行可否を分岐させたい
サンプルコード
httpdがインストールされていなかったら、yum install httpdを実行するコード
- name: check if httpd is already installed
yum:
name: httpd
state: installed
check_mode: true
register: is_installed
- name: debug check
debug:
msg: "{{ is_installed.changed }}" # falseならインストール済み
- name: install httpd
yum:
name: httpd
state: latest
when: is_installed.changed # インストールしてなかったら(trueだったら)実行される
解説
yum:
name: httpd
state: installed
check_mode: true
register: is_installed
check_mode
をtrueにすることによって、playbook実行時は常にdry run(このタスクによってhttpdが勝手にインストールされることはない)
yumモジュールのstate: installed
で、registerに指定した変数にhttpdのインストール情報を格納する。
is_installedに格納される情報が以下の通り。
"changed": false,
"failed": false,
"msg": "",
"rc": 0,
"results": [
"httpd-2.4.54-1.amzn2.x86_64 providing httpd is already installed"
]
httpdがインストールされているかどうかの判定はis_installed.changedに格納される。
(インストール済みならfalseとなる)
- name: install httpd
yum:
name: httpd
state: latest
when: is_installed.changed # インストールしてなかったら実行される
yumモジュールのstate: latest
でhttpdの最新版をインストールする。
whenモジュールはタスクを実行する条件であり、is_installed.changedがtrueならタスクを実行する。
参考