yumモジュールを使ってrpmファイルをインストールする
お疲れ様です。伊藤です。
以前yumの説明文を記載しましたが、実際には環境がインターネットにつながっていることはほとんどなく、別途取得してきたrpmファイルをオフラインの環境にインストールすることが多いと思います。そこで今回は実際に使えるようなPlaybookとしてタイトルにある内容を実施してみたいと思います。
実際、rpmファイルをインストールしようとすると、管理対象側にファイルを転送する必要があります。そのためにまずは手動で管理サーバ(ansibleが入っている側のサーバ)にインストールしたいrpmファイルを置いて、そのファイルを管理対象に転送する必要があります。
管理サーバ側にファイルを置く場所は
./role/common/files
になります。roleの下はサーバの役割毎(DBServerとかWebServerとか)に分かれていますのでそれに応じて変えてください。
そこに置いたら下記のPlaybookで管理対象サーバのtmpに転送します。
- name: file cp copy: src: boost-test-1.53.0-27.el7.x86_64.rpm dest: /tmp/
この例ではboost-test-1.53.0-27.el7.x86_64.rpmというrpmファイルを使用していますので必要に応じて変えてください。
その後yumモジュールでインストールするPlaybookはこちら
- name: rpm install yum: name: /tmp/boost-test-1.53.0-27.el7.x86_64.rpm state: present
最後に配置したrpmファイル削除します。
- name: file del file: path: /tmp/boost-test-1.53.0-27.el7.x86_64.rpm state: absent
これらをまとめて一つのPlaybookにしてしまえば、管理サーバにファイルを置いて実行するだけで各サーバにrpmを反映できます。
また、反映結果を確認したい場合、管理対象側でrpmコマンドで一覧を表示して、その結果を管理サーバ側に持ってくればエビデンスにもなりますので一挙両得です。できれば作業前後でとりたいですね。
そのためのPlaybookはこんな感じ
- name: command=rpm -qa | sort shell: rpm -qa | sort > /tmp/rpm_list_before - name: file get filename=rpm_list_before fetch: src=/tmp/rpm_list_before dest=/work/ - name: file del filename=rpm_list_before file: path=/tmp/rpm_list_before state=absent
rpm -qa | sortを実行してファイルにリダイレクトして、そのファイルを管理サーバに取得、管理対象側のファイルは削除する、というものです。
全部をまとめるとこんな感じかと思います。
- name: command=rpm -qa | sort shell: rpm -qa | sort > /tmp/rpm_list_before - name: file get filename=rpm_list_before fetch: src=/tmp/rpm_list_before dest=/work/ - name: file del filename=rpm_list_before file: path=/tmp/rpm_list_before state=absent - name: rpmfile cp copy: src: boost-test-1.53.0-27.el7.x86_64.rpm dest: /tmp/ - name: rpm install yum: name: /tmp/boost-test-1.53.0-27.el7.x86_64.rpm state: present - name: rpmfile del file: path: /tmp/boost-test-1.53.0-27.el7.x86_64.rpm state: absent - name: command=rpm -qa | sort shell: rpm -qa | sort > /tmp/rpm_list_after - name: file get filename=rpm_list_after fetch: src=/tmp/rpm_list_after dest=/work/ - name: file del filename=rpm_list_after file: path=/tmp/rpm_list_after state=absent
実行結果は管理サーバの/work配下にサーバ毎にインストール前後の一覧が入ります。
個人的にはこのようにしてPlaybookを組み立てています。
以上です、お疲れ様でした。