LoginSignup
2
1

More than 1 year has passed since last update.

【Ansible】特定のパッケージがインストール済みかどうかでTask処理を分岐させる

Last updated at Posted at 2022-12-01

新卒エンジニアによる全部俺カレンダー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ならタスクを実行する。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1