ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

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

f:id:pj_doaa:20171026104504p:plain


実行結果は管理サーバの/work配下にサーバ毎にインストール前後の一覧が入ります。
個人的にはこのようにしてPlaybookを組み立てています。

以上です、お疲れ様でした。