ฉันจะติดตั้งแพคเกจ. rpm บนเครื่องระยะไกลโดยใช้ Ansible ได้อย่างไร
ทางออกที่ชัดเจนคือการใช้command
โมดูล แต่มันก็ค่อนข้างโง่ นอกจากนี้ฉันต้องการหลีกเลี่ยงการตั้งค่าที่เก็บ yum เพียงหนึ่งแพคเกจ
มีวิธีการปฏิบัติเพิ่มเติมในการแก้ไขปัญหานี้หรือไม่?
ฉันจะติดตั้งแพคเกจ. rpm บนเครื่องระยะไกลโดยใช้ Ansible ได้อย่างไร
ทางออกที่ชัดเจนคือการใช้command
โมดูล แต่มันก็ค่อนข้างโง่ นอกจากนี้ฉันต้องการหลีกเลี่ยงการตั้งค่าที่เก็บ yum เพียงหนึ่งแพคเกจ
มีวิธีการปฏิบัติเพิ่มเติมในการแก้ไขปัญหานี้หรือไม่?
คำตอบ:
yum
โมดูลAnsible มีวิธีแก้ไขปัญหานี้อยู่แล้ว พา ธ ไปยังไฟล์ rpm โลคัลบนเซิร์ฟเวอร์สามารถส่งผ่านไปยังname
พารามิเตอร์
จากเอกสารประกอบโมดูล Ansible yum :
นอกจากนี้คุณยังสามารถส่ง URL หรือเส้นทางท้องถิ่นไปยังไฟล์ rpm หากต้องการดำเนินการกับแพ็คเกจหลายรายการสามารถยอมรับรายการแพ็กเกจที่คั่นด้วยเครื่องหมายจุลภาคหรือ (จาก 2.0) รายการแพ็กเกจ
ขั้นตอนที่เหมาะสมในการทำเช่นนี้จะเป็นดังนี้:
- name: Copy rpm file to server
copy:
src: package.rpm
dest: /tmp/package.rpm
- name: Install package.
yum:
name: /tmp/package.rpm
state: present
ที่จริงแล้วyum
โมดูลสามารถติดตั้ง RPM ได้โดยตรงจาก URL ที่กำหนด:
- name: Remote RPM install with yum
yum: name=http://example.com/some_package.rpm
นี่คือสิ่งที่ฉันทำเพื่อติดตั้งหลายรอบต่อนาทีจากเครื่องต้นทาง:
- 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}}"
เนื่องจากฉันติดกับปัญหาเดียวกันและโพสต์ของ @Jim Hunziker ผลักฉันไปในทิศทางที่ถูกต้องฉันต้องการแบ่งปันโซลูชันของฉันสำหรับการติดตั้งเวอร์ชัน rpm เฉพาะและอัปโหลด rpm เฉพาะในกรณีที่จำเป็น
---
- 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
ลองนี้:
- name: Installed the rpm files
shell: yum localinstall *.rpm -y
args:
chdir: /tmp/rpm_dir
เพิกเฉยต่อการเดินทาง
ฉันต้องใช้คำสั่ง rpm เพราะไม่มี yum (เป็น AIX OS)
ฉันได้แก้ไข idempotency ด้วยสิ่งนี้:
- 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