.Rpm paketini Ansible kullanarak uzaktaki makineye nasıl kurarım?
Açık çözüm, command
modü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ı?
.Rpm paketini Ansible kullanarak uzaktaki makineye nasıl kurarım?
Açık çözüm, command
modü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ı?
Yanıtlar:
Ansible yum
modülü zaten bu sorun için bir çözüm sunuyor. Sunucudaki yerel rpm dosyasının yolu name
parametreye 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
Aslında yum
modül doğrudan bir URL’den bir RPM yükleyebilir:
- name: Remote RPM install with yum
yum: name=http://example.com/some_package.rpm
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}}"
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
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