3月 132020
 

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

以上!

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ

%d人のブロガーが「いいね」をつけました。