■ はじめに
Ansible には、yum によるパッケージの管理(インストール、更新、削除など)をする yum モジュール があります。
この記事では、 yum モジュールの公式ドキュメントに記載されている使用例をベースにして、使い方を説明します。
なお、公式ドキュメントの使用例は、Playbook 単位ではなくtask 単位で記載されています。この記事では Playbook 単位で例示します。
動作確認環境
- Ansible 2.3.0, 2.7.8
- CentOS 7.6 (Ansible 側、管理対象ホスト側とも)
目次
■ 最新バージョンのパッケージをインストールされた状態にする
Playbook
apache httpd の最新版をインストールされた状態にする Playbook です。
- hosts: linux gather_facts: no become: yes tasks: - name: install the latest version of Apache yum: name: httpd state: latest
nameオプション- 対象のパッケージ名を指定します。
stateオプションnameで指定したパッケージをどのような状態としたいかを指定します。state: latestを指定すると最新バージョンがインストールされた状態になります。- インストールされていない状態だった場合は、最新バージョンをインストールします。
yum install httpdのイメージ
- 古いバージョンがインストールされている場合は、最新にアップデートします。
yum update httpdのイメージ
- インストールされていない状態だった場合は、最新バージョンをインストールします。
- もし、
state: presentを指定した場合は、任意のバージョンがインストールされた状態という指定になります。
実行ログ
ここでは、インストールされていない状態で Playbook を実行します。
$ ansible-playbook -i inventory yum_latest.yml PLAY [linux] *********************************************************************** TASK [install the latest version of Apache] **************************************** changed: [linux1] PLAY RECAP ************************************************************************* linux1 : ok=1 changed=1 unreachable=0 failed=0 $ yum list installed | grep httpd httpd.x86_64 2.4.6-88.el7.centos @base httpd-tools.x86_64 2.4.6-88.el7.centos @base
無事に最新版がインストールされました。
■ 複数のパッケージをインストールされた状態にする
Playbook
git と wget をインストールされた状態にする Playbook です。
- hosts: linux gather_facts: no become: yes tasks: - name: ensure a list of packages installed yum: name: "{{ packages }}" vars: packages: - git - wget
nameオプション- 対象のパッケージ名を指定します。
- 別途定義する変数
packagesを指定しています。 - 本タスクのようにリストを指定した場合は、1回の
yumコマンドに対するオプションの指定になります。- 例えば
yum install git、yum install wgetをそれぞれ実行するのではなく、yum install git wgetを 1回実行。
- 例えば
- 本タスクでは
stateオプションを省略しているので、実質state: present扱いになり、任意のバージョンがインストールされた状態という指定になります。
packages変数- インストールされた状態としたいパッケージ名をリストで指定しています。
- 変数名は任意で、
nameオプションの指定と整合性があれば問題ありません。
実行ログ
ここでは、いずれもインストールされていない状態で Playbook を実行します。
$ ansible-playbook -i inventory yum_multi.yml PLAY [linux] *********************************************************************** TASK [install the latest version of Apache] **************************************** changed: [linux1] PLAY RECAP ************************************************************************* linux1 : ok=1 changed=1 unreachable=0 failed=0 $ yum list installed | grep git git.x86_64 1.8.3.1-20.el7 @updates $ yum list installed | grep wget wget.x86_64 1.14-18.el7 @base
無事に git と wget がインストールされました。
■ パッケージがインストールされていない状態にする
Playbook
apache httpd がインストールされていない状態にする Playbook です。
- hosts: linux gather_facts: no become: yes tasks: - name: remove the Apache package yum: name: httpd state: absent
nameオプション- 対象のパッケージ名を指定します。
stateオプションstate: absentを指定すると、インストールされていない状態になります。- インストールされている状態だった場合は、アンインストールします。
yum remove httpdのイメージ
- インンストールされていない状態だった場合は何もしません
- インストールされている状態だった場合は、アンインストールします。
実行ログ
ここでは、httpd がインストールされている状態で Playbook を実行します。
$ ansible-playbook -i inventory yum_absent.yml PLAY [linux] ******************************************************************* TASK [remove the Apache package] *********************************************** changed: [linux1] PLAY RECAP ********************************************************************* linux1 : ok=1 changed=1 unreachable=0 failed=0 $ yum list installed | grep httpd httpd-tools.x86_64 2.4.6-88.el7.centos @base $
無事に http がアンインストールされました。(httpd をインストールしたときに一緒にインストールした httpd-tools は残ります)
■ まとめ
公式ドキュメントの使用例をベースにして、yum モジュール モジュールの使い方を説明しました。
他に「こんなことできるかな?」と気になる事がありましたら、公式ドキュメントで詳細をご確認ください。
また、yum モジュールは Packaging modulesに分類されています。Packaging modules
には、他にも yum_repository や dnf、apt などのモジュールがあります。詳細は Packaging modules の一覧からご確認ください。