Ansible을 사용하여 rpm 패키지 설치


22

Ansible을 사용하여 원격 컴퓨터에 .rpm 패키지를 어떻게 설치합니까?

확실한 해결책은 command모듈 을 사용하는 것이지만 약간 바보입니다. 또한 하나의 패키지에 대해 yum 저장소를 설정하지 않으려 고합니다.

이 문제에 대한 좀 더 실용적인 접근 방식이 있습니까?


그것이 ssh가 좋은 것입니다. 나는 놀랄만 한 유틸리티가 있다는 것을 알고 있지만 실제로 사소한 작업은 ssh입니다.
Lorinczy Zsigmond

답변:


32

Ansible yum모듈은 이미이 문제에 대한 솔루션을 제공합니다. 서버의 로컬 rpm 파일 경로는 name매개 변수 로 전달 될 수 있습니다 .

로부터 Ansible 냠 모듈 문서 :

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

먼저 파일을 복사하지 않고도이 작업을 수행 할 수 있습니까?
technocrat

1
http를 통해 패키지를 사용 가능하게하면 URL을 name 매개 변수로 전달할 수 있습니다.
Henrik Pingel Reinstate Monica

@technocrat, 조금 늦었지만 답변
Flippym

4

실제로 yum모듈은 주어진 URL에서 직접 RPM을 설치할 수 있습니다.

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

호기심에서 (잘못된 방법이 아닌) 왜 이것이 작동하지 않습니까? 그것은 나를 위해 실패했다 : yum install redhat.com/repo/my.rpm
eramm

프로토콜이 누락 되었기 때문일 수 있습니다.
Flippym

2

소스 머신에서 여러 개의 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}}"

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

yum이 없기 때문에 rpm 명령을 필수로 사용해야했습니다 (AIX OS 임).

나는 이것으로 dem 등원을 해결했다.

- 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

이 작업은 Ansible에게만 dem 등 해 보입니다. 실제로 RPM은 실행될 때마다 다시 다운로드되고 다시 설치됩니다.
Mike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.