Ansible dynamic include_变量和操作系统的include_任务

Ansible dynamic include_变量和操作系统的include_任务,dynamic,ansible,operating-system,selection,Dynamic,Ansible,Operating System,Selection,使用ansible引导和维护具有不同操作系统的多台服务器。我希望有自己的角色集,每个角色都有相同的任务/main.yml,类似这样: --- - name: EXIT - not supported OS found fail: msg: "Unsupported OS {{ ansible_distribution }} {{ ansible_distribution_version }} ({{ ansible_distribution_major_version }})"

使用ansible引导和维护具有不同操作系统的多台服务器。我希望有自己的角色集,每个角色都有相同的任务/main.yml,类似这样:

---
- name: EXIT - not supported OS found
  fail:
    msg: "Unsupported OS {{ ansible_distribution }} {{ ansible_distribution_version }} ({{ ansible_distribution_major_version }})"
  when: 
    - ansible_distribution != "CentOS" or ansible_distribution_major_version != "8"
    - ansible_distribution != "Debian" or ansible_distribution_version != "10"
    - ansible_distribution != "Ubuntu" or ansible_distribution_version != "20.04"

- name: "Load OS family specific variables - {{ ansible_os_family }}_family.yml"
  include_vars: 
    file: "vars/{{ ansible_os_family }}_family.yml"
  ignore_errors: true
- name: "Load distribution specific variables - {{ ansible_distribution }}.yml"
  include_vars: 
    file: "vars/{{ ansible_distribution }}.yml"
  ignore_errors: true
- name: "Load distribution major version specific variables - {{ ansible_distribution }}_{{ ansible_distribution_major_version }}.yml"
  include_vars: 
    file: "vars/{{ ansible_distribution }}_{{ ansible_distribution_major_version }}.yml"
  ignore_errors: true
- name: "Load distribution version specific variables - {{ ansible_distribution }}_{{ ansible_distribution_version }}.yml"
  include_vars: 
    file: "vars/{{ ansible_distribution }}_{{ ansible_distribution_version }}.yml"
  ignore_errors: true

- name: Running common tasks for any distribution any version - common.yml
  include_tasks: common.yml
  ignore_errors: true
- name: "Running tasks for OS family - {{ ansible_os_family }}_family.yml"
  include_tasks: "{{ ansible_os_family }}_family.yml"
  ignore_errors: true
- name: "Running tasks for distribution - {{ ansible_distribution }}.yml"
  include_tasks: "{{ ansible_distribution }}.yml"
  ignore_errors: true
- name: "Running tasks for {{ ansible_distribution }} {{ ansible_distribution_version }} ({{ ansible_distribution_major_version }})"
  include_tasks: "{{ lookup('first_found', possible_files) }}"
  vars:
    possible_files:
      - "{{ ansible_distribution }}_{{ ansible_distribution_version }}.yml"
      - "{{ ansible_distribution }}_{{ ansible_distribution_major_version }}.yml"
  ignore_errors: true

第一个任务将预检查所有受支持的操作系统,如果角色不支持该操作系统,则停止执行

有了它,我可以在不同的级别上定义变量,以后可以重写它。例如,如果在RedHat_family.yml中定义了一个变量,则CentOS 7和CentOS 8可以访问该变量,但如果在CentOS_8.yml中重新定义了该变量,则只有CentOS 8可以使用另一个值。同时,由于
ignore\u errors:true
的原因,不必为所有受支持的操作系统和版本存在all.ymls。这部分工作正常

问题在任务部分。这一部分不好

fatal: [myserver]: FAILED! => {"reason": "Could not find or access 'playbooks/common.yml' on the Ansible Controller."}
包含\u任务不支持忽略\u错误。我希望将任务分组为常见任务、操作系统系列任务、分发任务、分发版本任务,并且每个任务都可以存在或不存在。如何实现这种功能?对于操作系统因变量和任务的这种动态负载,有没有更好的解决方案


谢谢你,

正如我所说,include_vars部分正在工作。也许它不需要忽略错误:true,但正在正常工作。我在Debian 10和ansible 2.9.9上尝试了使用include_vars而不忽略错误:true。如果文件不存在,播放被错误中止。正如我所说,include_vars部分正在工作。也许它不需要忽略错误:true,但正在正常工作。我在Debian 10和ansible 2.9.9上尝试了使用include_vars而不忽略错误:true。如果文件不存在,播放被中止,并出现错误。