Ansible:如何安装多个rpm但每个操作系统一个?

问题描述 投票:0回答:3

我想安装多个rpm,一个用于Fedora服务器,另一个用于Centos服务器。我已经完成了此剧本文件,但有错

- name: Copy rpm file to server
  hosts: fedora
  copy:
     src: /tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm
     dest: /tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm

- name: Install package.
  hosts: fedora
  yum:
     name: /tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm
     state: present

- name: Copy another rpm file to server
  hosts: centos
  copy:
     src: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
     dest: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm

- name: Install another package.
  hosts: centos
  yum:
     name: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
     state: present
ansible installation rpm
3个回答
1
投票

您的剧本应该可以使用,但是您可以通过添加when语句来加倍保护自己:

- name: Copy another rpm file to server
  hosts: centos
  copy:
     src: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
     dest: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
  when:
    - ansible_facts['distribution'] == "CentOS"

- name: Install another package.
  hosts: centos
  yum:
     name: /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
     state: present
  when:
    - ansible_facts['distribution'] == "CentOS"

0
投票

我用一些不同的语法解决了

- name: Transfer and install a rpm for Centos server
  hosts: centos
  become_user: root
  tasks:
     - name: Copy another rpm file to server
       copy: src=/tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm dest=/tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm
     - name: Install the rpm
       command: dnf -y localinstall /tmp/pam_krb5-2.4.8-6.el8.x86_64.rpm

- name: Transfer and install a rpm for Fedora server
  hosts: fedora
  become_user: root
  tasks:
     - name: Copy another rpm file to server
       copy: src=/tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm dest=/tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm
     - name: Install the rpm
       command: dnf -y localinstall /tmp/pam_krb5-2.4.8-6.fc31.x86_64.rpm

0
投票

您可以使用2个vars文件(每个发行版一个):

vars / centos_8.yml

packages:
  - pam_krb5-2.4.8-6.el8.x86_64.rpm
  - ...

vars / fedora_31.yml

packages:
  - pam_krb5-2.4.8-6.fc31.x86_64.rpm
  - ...

然后在您的任务中,您可以执行以下操作:

- name: Include vars for host distribution
  include_vars: "{{ ansible_distribution|lower }}_{{ ansible_distribution_major_version }}.yml"

- name: Copy RPM files to server
  copy:
     src: /tmp/{{ item }}
     dest: /tmp/{{ item }}
  with_items:
    - "{{ packages }}" 

- name: Install RPM packages
  yum:
     name: /tmp/{{ item }}
     state: present
  with_items:
    - "{{ packages }}"
© www.soinside.com 2019 - 2024. All rights reserved.