我想安装多个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
您的剧本应该可以使用,但是您可以通过添加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"
我用一些不同的语法解决了
- 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
您可以使用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 }}"