Ansible Playbook 任务被跳过

Ansible Playbook 任务被跳过

我有 3 个 aws ec2 实例,其中 2 个是 ubuntu,1 个是 amazon linux 2。我已经配置了主从设置并且运行良好。

主实例:

NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

从属 1 实例:

NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

从属实例2:

NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

我正在尝试使用以下剧本在两个从属服务器上安装 HTTPD 包。

---
- hosts: test
  become: true
  tasks:
     - name: Install the latest version of Apache on CentOS
       yum: name=httpd state=present
       when: ansible_os_family == "Amazon Linux"

     - name: install the latest version of Apache on Debian
       apt: name=httpd state=present
       when: ansible_os_family == "Ubuntu"

任务被跳过。输出如下

PLAY [test] *********************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
ok: [172.31.4.19]
ok: [172.31.38.171]

TASK [Install the latest version of Apache on CentOS] ***************************************************************
skipping: [172.31.38.171]
skipping: [172.31.4.19]

TASK [install the latest version of Apache on Debian] ***************************************************************
skipping: [172.31.38.171]
skipping: [172.31.4.19]

PLAY RECAP **********************************************************************************************************
172.31.38.171              : ok=1    changed=0    unreachable=0    failed=0
172.31.4.19                : ok=1    changed=0    unreachable=0    failed=0

我不确定如何编写这个剧本。我尝试使用通用的“Package”模块代替“YUM”和“APT”,但也失败了,因此决定将其拆分。我确实知道我可以将代码拆分成单独的文件,然后将它们存储在 Roles/Tasks 目录中,然后使用“Include”模块。但我想知道上述方法是否可以在一个剧本中在多个操作系统系列上安装软件包。谢谢!

答案1

最有可能的是,任务被跳过,因为的值ansible_os_family既不是Ubuntu也不是Amazon Linux

添加以下任务:

- name: show family
  debug:
    var: ansible_os_family

这将打印出您在剧本中需要使用的实例的实际值。

例如,在我的 Ubuntu 机器上, 的值为ansible_os_familyDebian在我的 CentOS 机器上, 的值为RedHat

要获得 Linux 发行版的更详细值,您可以使用,它在我的 Ubuntu 机器和CentOS 机器上ansible_facts.distribution设置为。UbuntuCentOS

相关内容