有没有办法重用通用任务文件但包含不同的变量?

问题描述

我是ansible的新手,因此请原谅任何不正确的语法错误我有一个简单的剧本,用于安装软件包

我的项目结构如下:

TopDir
  dev
    |roles
    |  |ant
    |  |  |install
    |  |  |  tasks
    |  |  |    main.yml
    |  |  |vars
    |  |    main.yml
    |  |ant-junit
    |    |install
    |    |  tasks
    |    |    main.yml
    |    |vars
    |      main.yml
    |install_tools.yml
    

Playbook(install_tools.yml):

- name: Install tools
  hosts: hostA
  tags: ['hostA']
  become: yes
  roles:
    - ant/install
    - ant-junit/install
    - doxygen/install

每个install / main.yml都完全像这样

- name: Include variables in vars
  include_vars: ../../vars/main.yml
  
- name: Install {{tool_name}}
  yum:
    name: "{{tool_name}}-{{tool_version}}"
    state: present

在每个vars / main.yml中,我都定义了tool_name和tool_version。所以我想做类似下面的事情,但是vars_files不是TaskInclude的有效属性。这个想法是,generic_install将使用从vars_files定义的变量

- name: Call generic install
  include_tasks: ../../../generic_install.yml
  vars_files: ../../vars/main.yml

解决方法

我使用了错误的属性。以下对我有用。请注意,我必须使用import_task而不是include_tasks。我不确定这些差异,但仅适用于import_tasks和vars

- name: Call generic install
  import_tasks: ../../../generic_install.yml
  vars:
    tool_name: "{{tool_name}}"
    tool_version: "{{tool_version}}"