Ansible 角色,是否可以有条件地定义变量?

Ansible 角色,是否可以有条件地定义变量?

我有一个使用很多变量的 Ansible 角色,并且由于这些变量是在服务器配置之后调整的(例如它正在使用的操作系统版本),所以我的目录“MyRole/vars”充满了针对不同情况的不同文件。

在“MyRole/vars”中我有:

  • RedHat6_安装.yml
  • Redhat7_安装.yml
  • RedHat8_安装.yml
  • RedHat6_卸载.yml
  • RedHat7_卸载.yml
  • RedHat8_卸载.yml

等等...

我想知道是否可以将变量分组到一个文件中并为其制定条件,例如:

主要.yml:

    - uninstall_var_1
      when: >
            ansible_distribution_major_version == 6
    - uninstall_var_2
      when: >
            ansible_distribution_major_version == 7
    - uninstall_var_3
      when: >
            ansible_distribution_major_version == 8

and so on...

答案1

可能有更好的方法可以做到这一点,我期待看到它们,但我目前正在做的事情看起来很像这样。取自我正在使用的自定义fail2ban角色:

变量看起来像这样。我为每个变量都创建了变量文件{{ansible_os_family}},然后为{{ansible_distribution}}_{{ansible_distribution_major_version}}可能需要它们的任何变量进行覆盖。

$ ls -l
lrwxrwxrwx. 1 error error 24 May  7 07:51 fail2ban_os_CentOS_6.yml -> fail2ban_os_RedHat_6.yml
lrwxrwxrwx. 1 error error 22 May  7 07:51 fail2ban_os_CentOS.yml -> fail2ban_os_RedHat.yml
-rw-rw-r--. 1 error error 64 May  7 07:51 fail2ban_os_Debian.yml
-rw-rw-r--. 1 error error 64 May  7 07:51 fail2ban_os_Fedora.yml
-rw-rw-r--. 1 error error 62 May  7 07:51 fail2ban_os_RedHat_6.yml
-rw-rw-r--. 1 error error 64 May  7 07:51 fail2ban_os_RedHat.yml
-rw-rw-r--. 1 error error 62 May  7 07:51 fail2ban_os_Ubuntu_14.yml
-rw-rw-r--. 1 error error 65 May  7 07:51 fail2ban_os_Ubuntu.yml
$ cat fail2ban_os_Ubuntu.yml 
fail2ban_backend: systemd
fail2ban_banaction: iptables-multiport
$ cat fail2ban_os_Fedora.yml 
fail2ban_backend: systemd
fail2ban_banaction: firewallcmd-ipset

要加载这些文件,roles/fail2ban/tasks/main.yml请按如下方式开始:

---
- include_vars: fail2ban_os_{{ansible_os_family}}.yml
  ignore_errors: True

- include_vars: fail2ban_os_{{ansible_distribution}}_{{ansible_distribution_major_version}}.yml
  ignore_errors: True

这意味着变量文件不需要存在。当然,如果所需的变量没有在某处定义,后面的任务就会失败,然后你就可以去定义你错过的变量。

为了保持一致性和可维护性,通用操作系统系列变量文件包含代表最新支持的发行版的变量,而特定发行版的覆盖则适用于较旧的发行版。

相关内容