Installa il pacchetto rpm usando Ansible


22

Come installo il pacchetto .rpm sul computer remoto usando Ansible?

La soluzione ovvia è usare il commandmodulo, ma è un po 'sciocco. Inoltre, vorrei evitare di impostare un repository yum solo per un pacchetto.

Esiste un approccio più pragmatico a questo problema?


Ecco a cosa serve ssh. So che ci sono util util con cui giocare, ma per compiti reali, non banali è ssh.
Lorinczy Zsigmond,

Risposte:


32

Il yummodulo Ansible fornisce già una soluzione per questo problema. Il percorso del file rpm locale sul server può essere passato al nameparametro.

Dalla documentazione del modulo Ansible yum :

Puoi anche passare un URL o un percorso locale a un file rpm. Per operare su più pacchetti ciò può accettare un elenco di pacchetti separato da virgole o (a partire da 2.0) un elenco di pacchetti.

I passi corretti per fare questo sarebbe qualcosa del genere:

- name: Copy rpm file to server
  copy:
     src: package.rpm
     dest: /tmp/package.rpm

- name: Install package.
  yum:
     name: /tmp/package.rpm
     state: present

Scusa, l'ho trascurato. Grazie per l'aiuto! :)
Nefasto Octopus

Un modo per ottenere questo risultato senza dover prima copiare il file?
tecnocrate,

1
Se rendi disponibile il pacchetto tramite http, puoi passare l'URL al parametro name.
Henrik Pingel Ripristina Monica il

@technocrat, un po 'in ritardo, ma ha risposto
Flippym il

4

In realtà il yummodulo può installare un RPM direttamente da un determinato URL:

- name: Remote RPM install with yum
  yum: name=http://example.com/some_package.rpm

per curiosità (a parte il modo sbagliato) perché non funziona? Per me non è riuscita shell: yum install redhat.com/repo/my.rpm
eramm

Direi che probabilmente è perché manca il protocollo
Flippym

2

Ecco cosa devo fare per installare più RPM dal computer di origine:

- 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}}"

1

Poiché ho intrappolato lo stesso problema e il post di @Jim Hunziker mi ha spinto nella giusta direzione, mi piace condividere la mia soluzione per l'installazione di una versione rpm specifica e caricare l'rpm solo se necessario.

---
- 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

0

prova questo:

- name: Installed the rpm files
  shell: yum localinstall *.rpm -y
  args:
    chdir: /tmp/rpm_dir

ignora l'avvertimento.


-1

Ho dovuto usare obbligatoriamente il comando rpm perché non ho yum (è un sistema operativo AIX).

Ho risolto l'idempotenza con questo:

- 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

Questa attività sembra idempotente a Ansible. In realtà, l'RPM verrà scaricato e reinstallato ogni volta che lo eseguirai.
Mike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.