ติดตั้งแพ็คเกจ rpm โดยใช้ Ansible


22

ฉันจะติดตั้งแพคเกจ. rpm บนเครื่องระยะไกลโดยใช้ Ansible ได้อย่างไร

ทางออกที่ชัดเจนคือการใช้commandโมดูล แต่มันก็ค่อนข้างโง่ นอกจากนี้ฉันต้องการหลีกเลี่ยงการตั้งค่าที่เก็บ yum เพียงหนึ่งแพคเกจ

มีวิธีการปฏิบัติเพิ่มเติมในการแก้ไขปัญหานี้หรือไม่?


นั่นคือสิ่งที่ดีสำหรับ SSH ฉันรู้ว่ามีสิ่งที่น่าสนใจให้เล่นด้วย แต่สำหรับงานจริงที่ไม่สำคัญมันคือ ssh
Lorinczy Zsigmond

คำตอบ:


32

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

ขออภัยฉันมองข้ามมันไป ขอขอบคุณสำหรับความช่วยเหลือของคุณ! :)
NefariousOctopus

วิธีใดในการทำให้สำเร็จโดยไม่ต้องคัดลอกไฟล์ก่อน
นักเทคโนโลยี

1
หากคุณทำให้แพ็คเกจพร้อมใช้งานผ่าน http คุณสามารถส่ง URL ไปยังพารามิเตอร์ชื่อได้
Henrik Pingel Reinstate Monica

@technocrat สายเล็กน้อย แต่ตอบแล้ว
Flippym

4

ที่จริงแล้วyumโมดูลสามารถติดตั้ง RPM ได้โดยตรงจาก URL ที่กำหนด:

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

ออกมาจากความอยากรู้อยากเห็น (นอกเหนือจากวิธีที่ผิด) ทำไมมันไม่ทำงาน? มันล้มเหลวสำหรับฉัน shell: yum install redhat.com/repo/my.rpm
eramm

ฉันจะบอกว่าอาจเป็นเพราะไม่มีโปรโตคอล
Flippym

2

นี่คือสิ่งที่ฉันทำเพื่อติดตั้งหลายรอบต่อนาทีจากเครื่องต้นทาง:

- 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

เนื่องจากฉันติดกับปัญหาเดียวกันและโพสต์ของ @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

0

ลองนี้:

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

เพิกเฉยต่อการเดินทาง


-1

ฉันต้องใช้คำสั่ง 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

งานนี้ดูเหมือนว่า idempotent เป็น Ansible เท่านั้น ในความเป็นจริง RPM จะได้รับการดาวน์โหลดและติดตั้งใหม่ทุกครั้งที่คุณเรียกใช้
Mike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.