Rpm paketini Ansible kullanarak kurun


22

.Rpm paketini Ansible kullanarak uzaktaki makineye nasıl kurarım?

Açık çözüm, commandmodülü kullanmaktır , ancak bu biraz saçma. Ayrıca sadece bir paket için bir yum havuzu kurmaktan kaçınmak istiyorum.

Bu soruna daha pratik bir yaklaşım var mı?


Ssh bunun için iyidir. Oynamak için harika araçlar olduğunu biliyorum, ancak gerçek, önemsiz olmayan işler için bu ssh.
Lorinczy Zsigmond 12:18

Yanıtlar:


32

Ansible yummodülü zaten bu sorun için bir çözüm sunuyor. Sunucudaki yerel rpm dosyasının yolu nameparametreye iletilebilir .

Gönderen yanıtlayıcı 'yum modülü belgelerine :

Ayrıca bir rpm dosyasına bir url veya yerel yol iletebilirsiniz. Birkaç paket üzerinde çalışmak için bu, virgülle ayrılmış paket listesini veya (2.0'dan itibaren) paket listesini kabul edebilir.

Bunu yapmak için uygun adımlar şöyle olur:

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

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

Üzgünüm, göz ardı ettim. Yardımın için teşekkürler! :)
NefariousOctopus 15:15

İlk önce dosyayı kopyalamak zorunda kalmadan bunu başarmanın bir yolu var mı?
technocrat

1
Paketi http üzerinden kullanabiliyorsanız, url'yi name parametresine iletebilirsiniz.
Henrik Pingel Monica

@technocrat, biraz geç, ama cevaplandı
Flippym 21:17

4

Aslında yummodül doğrudan bir URL’den bir RPM yükleyebilir:

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

meraktan (yanlış olanın dışında) neden bu işe yaramıyor? Benim için kabuk başarısız oldu: yum yüklemek redhat.com/repo/my.rpm
eramm

Muhtemelen protokolü eksik olduğu için söyleyebilirim
Flippym

2

Kaynak makineden birden fazla RPM yüklemek için yaptığım iş:

- 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

Aynı problemi hapsettiğimden ve @Jim Hunziker'in görevimi beni doğru yöne ittiği için, belirli bir rpm sürümünü kurmak için çözümümü paylaşmak ve yalnızca gerekliyse rpm'yi yüklemek istiyorum.

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

bunu dene:

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

savaşı görmezden gel.


-1

Rpm komutunu kullanmak zorunda kaldım çünkü yum kullanmıyorum (bu bir AIX işletim sistemidir).

Bu saygısızlığı bu şekilde çözdüm:

- 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

Bu görev sadece Ansible için iddiasız görünüyor. Gerçekte, RPM her çalıştırdığınızda yeniden indirilecek ve yeniden yüklenecektir.
Mike,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.