Instal paket rpm menggunakan Ansible


22

Bagaimana cara menginstal paket .rpm pada mesin jarak jauh menggunakan Ansible?

Solusi yang jelas adalah dengan menggunakan commandmodul, tetapi itu agak konyol. Saya juga ingin menghindari pengaturan repositori yum hanya untuk satu paket.

Apakah ada pendekatan yang lebih pragmatis untuk masalah ini?


Itulah gunanya ssh bagus. Saya tahu ada utils keren untuk bermain, tetapi untuk tugas-tugas yang sebenarnya, non-sepele itu ssh.
Lorinczy Zsigmond

Jawaban:


32

yumModul yang memungkinkan sudah memberikan solusi untuk masalah ini. Path ke file rpm lokal di server dapat diteruskan ke nameparameter.

Dari dokumentasi modul Anum yum :

Anda juga dapat meneruskan url atau jalur lokal ke file rpm. Untuk beroperasi pada beberapa paket, ini dapat menerima daftar paket yang dipisahkan koma atau (per 2.0) daftar paket.

Langkah yang tepat untuk melakukan ini adalah seperti ini:

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

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

Maaf, saya mengabaikannya. Terima kasih untuk bantuannya! :)
NefariousOctopus

Adakah cara untuk melakukan ini tanpa harus menyalin file lebih dulu?
teknokrat

1
Jika Anda membuat paket tersedia melalui http Anda dapat meneruskan url ke parameter nama.
Henrik Pingel Reinstate Monica

@ technocrat, sedikit terlambat, tetapi menjawab
Flippym

4

Sebenarnya yummodul dapat menginstal RPM langsung dari URL yang diberikan:

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

karena penasaran (selain itu cara yang salah) mengapa ini tidak berhasil? Gagal bagi saya shell: yum install redhat.com/repo/my.rpm
eramm

Saya akan mengatakan itu mungkin karena protokol tidak ada
Flippym

2

Inilah yang saya lakukan untuk menginstal beberapa RPM dari mesin sumber:

- 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

Karena saya terjebak pada masalah yang sama, dan posisi @Jim Hunziker mendorong saya ke arah yang benar, saya suka berbagi solusi untuk menginstal versi rpm tertentu dan hanya mengunggah rpm jika perlu.

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

coba ini:

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

abaikan perang itu.


-1

Saya harus menggunakan perintah rpm karena saya tidak punya yum (ini adalah OS AIX).

Saya telah memecahkan idempotensi dengan ini:

- 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

Tugas ini hanya terlihat idempoten untuk Ansible. Pada kenyataannya, RPM akan diunduh ulang dan diinstal ulang setiap kali Anda menjalankannya.
Mike
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.