Comment installer le package .rpm sur une machine distante à l'aide d'Ansible?
La solution évidente est d'utiliser le module command
, mais c'est un peu idiot. Je voudrais également éviter de configurer un référentiel yum pour un seul package.
Existe-t-il une approche plus pragmatique de ce problème?
Le module Ansible yum
fournit déjà une solution à ce problème. Le chemin d'accès au fichier rpm local sur le serveur peut être transmis au paramètre name
.
De la documentation du module Ansible yum :
Vous pouvez également transmettre une URL ou un chemin d'accès local à un fichier rpm. Pour fonctionner sur plusieurs packages, cela peut accepter une liste de packages séparés par des virgules ou (à partir de 2.0) une liste de packages.
Les étapes appropriées pour ce faire seraient quelque chose comme ceci:
- name: Copy rpm file to server
copy:
src: package.rpm
dest: /tmp/package.rpm
- name: Install package.
yum:
name: /tmp/package.rpm
state: present
En fait, le module yum
peut installer un RPM directement à partir d'une URL donnée:
- name: Remote RPM install with yum
yum: name=http://example.com/some_package.rpm
Voici ce que je fais pour installer plusieurs RPM à partir de la machine source:
- name: mkdir /tmp/RPMS
file: path=/tmp/RPMS state=directory
- name: copy RPMs to /tmp/RPMS
copy:
src: "{{ item }}"
dest: /tmp/RPMS
with_fileglob:
- "../files/*.rpm"
register: rpms_copied
- name: local RPMs not found
fail:
msg: "RPMs not found in ../files/"
when: rpms_copied.results|length == 0 and rpms_copied.skipped and rpms_copied.skipped_reason.find('No items') != -1
- set_fact:
rpm_list: "{{ rpms_copied.results | map(attribute='dest') | list}}"
- name: install RPMs
yum:
name: "{{rpm_list}}"
Parce que j'ai piégé le même problème et que le message de @Jim Hunziker m'a poussé dans la bonne direction, j'aime partager ma solution pour installer une version de rpm spécifique et ne télécharger le rpm que si nécessaire.
---
- hosts: testhosts
tasks:
- name: check if package installed
command: rpm -q --qf "%{VERSION}\n" package
args:
warn: false
register: package_installed
failed_when: false
changed_when: package_installed.rc != 0
- name: check package version
Shell: "[[ `rpm -q --qf \"%{VERSION}\n\" package` == '{{ package_version }}' ]]"
args:
warn: false
register: package_installed_version
failed_when: false
changed_when: package_installed_version.rc != 0
- name: uninstall old package
yum:
name: package
state: removed
when: package_installed_version.rc != 0 and package_installed.rc == 0
- name: copy package-rpm to /tmp
copy:
src: package-{{ package_version }}-1.el7.x86_64.rpm
dest: /tmp/
notify:
- remove package-rpm from /tmp
when: package_installed_version.rc != 0
- name: install package
yum:
name: /tmp/package-{{ package_version }}-1.el7.x86_64.rpm
state: present
when: package_installed_version.rc != 0
handlers:
- name: remove package-rpm from /tmp
file:
name: /tmp/package-{{ package_version }}-1.el7.x86_64.rpm
state: absent
essaye ça:
- name: Installed the rpm files
Shell: yum localinstall *.rpm -y
args:
chdir: /tmp/rpm_dir
ignorer l'avertissement.
J'ai dû utiliser obligatoirement la commande rpm car je n'ai pas miam (c'est un OS AIX).
J'ai résolu l'idempotence avec ceci:
- command: rpm -U "{{rpm}}"
args:
warn: false
register: rpm_install
failed_when: rpm_install.rc != 0 and "is already installed" not in rpm_install.stderr
changed_when: rpm_install.rc == 0