
Ansibleを触って3日目。ほぼマスターしたと思ったそんな時。
pacemakerのインストールをlocalinstallするために、事前にyumdownloader –resolve でダウンロードした複数のパッケージを、localinstallで同時に一気にドーンとしたい。
with_itemsを使ってループすると、1つずつyumが実行されてしまうため、参照している外部リポジトリからパッケージをもってきてしまう。
今回はそんな時に見つけた、ファイル一覧を一気にドーン(localinstall)する場合のメモを残しておきます。
リモートサーバ上の特定ディレクトリ配下のrpmパッケージを一発でyumる方法
# roles/pacemaker/tasks/main.yml
# リモートサーバ上にRPMパッケージ格納ディレクトを作成
- name: create tmp directory
file:
path: /tmp/pacemaker
state: directory
owner: root
group: root
mode: 0755
# ローカルサーバ上のとfiles/配下にある「*.rpm」ファイルを
# リモートサーバ上にアップロード
- name: upload rpm packages
copy:
src: "{{ item }}"
dest: /tmp/pacemaker/
owner: root
mode: 0644
with_fileglob:
- "files/*.rpm"
become: yes
# リモートサーバ上にアップしたファイル一覧を「find_result」に収める
- name: find rpm files
find:
paths: "/tmp/pacemaker"
patterns: "*.rpm"
register: find_result
# 「find_result」から「rpm_list」を作成
- name: create file list
set_fact:
rpm_list: "{{ find_result.files | map(attribute='path') | list }}"
# 「rpm_list」を元にyumlocalinstall
- name: yum localinstall
yum:
name: "{{ rpm_list }}"
state: present
# アップロードに利用したディレクトリの削除
- name: delete tmp directory from remote
file:
path: "/tmp/pacemaker"
state: absent
become: yes
以上!
コメント