Instale o pacote rpm usando Ansible

18

Como eu instalo o pacote .rpm na máquina remota usando o Ansible?

A solução óbvia é usar o módulo command , mas isso é um pouco bobo. Também gostaria de evitar a configuração de um repositório yum apenas para um pacote.

Existe alguma abordagem mais pragmática para este problema?

    
por NefariousOctopus 15.11.2015 / 18:28

4 respostas

23

O módulo Ansible yum já fornece uma solução para esse problema. O caminho para o arquivo rpm local no servidor pode ser passado para o parâmetro name .

Na documentação do módulo Ansible yum :

You can also pass a url or a local path to a rpm file. To operate on several packages this can accept a comma separated list of packages or (as of 2.0) a list of packages.

Os passos adequados para fazer isso seria algo assim:

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

- name: Install package.
  yum:
     name: /tmp/package.rpm
     state: present
    
por 15.11.2015 / 18:42
2

O módulo yum pode instalar o RPM a partir de uma URL:

- name: Install NUX Repository
  yum: name=http://example.com/some_package.rpm

Ou você pode usar command , já que o comando rpm tem um método interno para instalação remota:

- name: Install RPM from URL
  command: rpm -i http://example.com/some_package.rpm
    
por 21.11.2017 / 17:19
0

Eu tive que usar obrigatório o comando rpm porque eu não tenho yum (é um sistema operacional AIX).

Eu resolvi a idempotência com isso:

- 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
    
por 21.06.2018 / 11:24
0

Veja o que faço para instalar vários RPMs na máquina de origem:

- 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}}"
    
por 18.09.2018 / 22:25

Tags