こんにちは!
BFT名古屋支店の佐野です。
今回は管理対象にyumを実行させ、指定したソフトウェア(パッケージ)のインストールおよびアップデート等を行なわせる「yumモジュール」と、その利用方法について解説いたします。
はじめに:Ansibleのyumモジュールでできること。
yumモジュールにて行えることは、ほぼほぼ従来のyumコマンドで行なえることと同様です。
パッケージあるいはグループのインストール・アップデート・削除、そしてインストール済みや更新可能であるパッケージのリスト表示を行なうことができます。
またkernel-develなどの「特定のバージョンのインストールが必要となる」場合においても、パッケージバージョンの直接指定、あるいは変数を使った指定を行なうことで可能です。
本記事は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の面目躍如となる場面かと思いますので、是非使いこなしていただければと思います。
以上、お読みいただきありがとうございました。