■ はじめに
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
の一覧からご確認ください。