BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】Ansibleを使って管理対象でyumを実行する

 こんにちは!
 BFT名古屋支店の佐野です。

 今回は管理対象にyumを実行させ、指定したソフトウェア(パッケージ)のインストールおよびアップデート等を行なわせる「yumモジュール」と、その利用方法について解説いたします。  

はじめに:Ansibleのyumモジュールでできること。

 yumモジュールにて行えることは、ほぼほぼ従来のyumコマンドで行なえることと同様です。
 パッケージあるいはグループのインストール・アップデート・削除、そしてインストール済みや更新可能であるパッケージのリスト表示を行なうことができます。
 またkernel-develなどの「特定のバージョンのインストールが必要となる」場合においても、パッケージバージョンの直接指定、あるいは変数を使った指定を行なうことで可能です。

 yumモジュールの公式ドキュメントはこちらになります。

 本記事はyumモジュールで行なえることから、パッケージインストールおよびアップデート、そしてパッケージのバージョンを指定した上でのインストールを行なうPlaybookの一例を抜粋して紹介いたします。


特定のパッケージをyumでインストールするPlaybook

 今回はVMware Toolsのオープンソース版である「open-vm-tools」をインストールするPlaybookを例として挙げさせて頂きます。
 構文例は以下のようになります。

- hosts: all

  tasks:
  - name: yum install open-vm-tools
    yum:
      name: open-vm-tools
      state: present

 オプションの「name」にてインストールするパッケージ名を指定しています。
 また「state」のpresentを指定すると、もしこのパッケージがインストール済みである場合はインストールせずに処理を終えます。

 また複数のパッケージをインストールする場合は、「name」を以下の構文のように連ねることで、一度のyumモジュールの使用で上から順にインストールすることができます。
 以下のPlaybook例ではbind-utilsをはじめとした複数のパッケージをまとめてインストールしています。

- hosts: all

  tasks:
  - name: yum install multi-list
    yum:
      name:
        - bind-utils
        - glibc.i686
        - libgcc.i686
        - libX11.i686
        - gcc
        - bzip2
      state: present

インストール済みのパッケージを全て最新にアップデートするPlaybook

 以下の構文例は、yumコマンドで言えば“yum -y update”に相当する処理を行なうものになります。
 オプションの「name」で'*'を指定することでインストール済みのすべてのパッケージを対象とすることができ、「state」をlatestにすることによって、パッケージを最新のバージョンに更新することができます。
 なお、「name」でインストール済みのパッケージ名をしていすることで、そのパッケージのみの更新を行なうことができます。

- hosts: all

  tasks:
  - name: yum Upgrade all packages
    yum:
      name: '*'
      state: latest

OSに合うバージョンのパッケージを特定し、インストールするPlaybook

 今回例に挙げるkernel-develは、OSと同じバージョンをインストールしないと機能しないパッケージです。
 管理対象のOSすべてが同じバージョンであれば問題ありませんが、そうでない場合は処理内でOSのバージョンを取得し、参照できるようにしなければなりません。
 以下の構文例は、バージョン違いのOSがあることを考慮し、一度shellモジュールを使用して管理対象上で「uname -r」を実行して、「register」で結果を変数"kernel-version“として取得。
 その後yumモジュールの「name」オプションでkernel-develを指定する際、バージョン指定部分で変数を利用して管理対象OSバージョンに合わせたバージョンのkernel-develをインストールできるようにしています。

- hosts: all

  tasks:
  - name: kernel uname
    shell: uname -r
    register: kernel-version

  - name: install kernel-devel
    yum:
      name: kernel-devel-"{{ kernel-version }}" 
      state: present

さいごに

 以上がyumモジュールの利用方法と使用例の解説になります。
 管理対象へ共通のパッケージのインストール、および一斉更新を行なうというシチュエーションは特に運用業務時などで避けて通れないものであると思います。
 そういう時こそAnsibleの面目躍如となる場面かと思いますので、是非使いこなしていただければと思います。
 以上、お読みいただきありがとうございました。