てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Ansible] yum モジュールの基本的な使い方(パッケージのインストールなど)

■ はじめに

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

gitwget をインストールされた状態にする 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 gityum 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           

無事に gitwget がインストールされました。


■ パッケージがインストールされていない状態にする

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 モジュール モジュールの使い方を説明しました。

他に「こんなことできるかな?」と気になる事がありましたら、公式ドキュメントで詳細をご確認ください。

docs.ansible.com

また、yum モジュールは Packaging modulesに分類されています。Packaging modules には、他にも yum_repositorydnfapt などのモジュールがあります。詳細は Packaging modules の一覧からご確認ください。