如何使用具有不同变量集的模板模块? [英] How to use template module with different set of variables?

查看:23
本文介绍了如何使用具有不同变量集的模板模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的用例如下:

我有一个模板文件,我想从该模板创建 2 个不同的文件,每个文件的变量由一组不同的变量填充.

I have a template file, and I would like to create 2 different files from that template, with the variables being filled by a different set of variables for each file.

例如,假设我想对包含该行的文件进行模板化:

For example, lets say I want to template the file containing the line:

mkdir -p {{myTemplateVariable}}

我想找到一种正确的方法来让File1"和File2"填充这个变量.类似的东西:

I would like to find a proper way to get this variable filled by "File1" and "File2". Something like :

- name: template test 1
  template: 
        src=myTemplateFile
        dest=result1


- name: template test 2
  template: 
        src=myTemplateFile
        dest=result2

我可以为第一个模板指定要使用的变量 a = "File1" 和第二个模板 b = "File2".

where I could specify for the first templating that the variable to use is a = "File1" and for the second, b = "File2".

推荐答案

对于 Ansible 2.x:

For Ansible 2.x:

- name: template test
  template: 
    src: myTemplateFile
    dest: result1
  vars:
    myTemplateVariable: File1

- name: template test
  template: 
    src: myTemplateFile
    dest: result2
  vars:
    myTemplateVariable: File2

<小时>

对于 Ansible 1.x:


For Ansible 1.x:

不幸的是,template 模块不支持将变量传递给它,可以在模板内部使用.有一个功能请求,但被拒绝了.

Unfortunately the template module does not support passing variables to it, which can be used inside the template. There was a feature request but it was rejected.

我可以想到两种解决方法:

I can think of two workarounds:

1.包括

include 语句支持传递变量.因此,您可以将 template 任务放在一个额外的文件中,并使用适当的参数将其包含两次:

The include statement supports passing variables. So you could have your template task inside an extra file and include it twice with appropriate parameters:

my_include.yml:

my_include.yml:

- name: template test
  template: 
        src=myTemplateFile
        dest=destination

main.yml:

- include: my_include.yml destination=result1 myTemplateVariable=File1

- include: my_include.yml destination=result2 myTemplateVariable=File2

2.重新定义 myTemplateVariable

另一种方法是在每个 template 任务之前简单地重新定义 myTemplateVariable.

Another way would be to simply re-define myTemplateVariable right before every template task.

- set_fact:
     myTemplateVariable: File1

- name: template test 1
  template: 
        src=myTemplateFile
        dest=result1

- set_fact:
     myTemplateVariable: File2

- name: template test 2
  template: 
        src=myTemplateFile
        dest=result2

这篇关于如何使用具有不同变量集的模板模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆