ansible \包含其他带有参数的yml不起作用
ansible \ include other yml with param doesn't work
为什么这不起作用:
---
- hosts: all
vars:
input_version: 99
- include: ./tagger_1.yml input="{{ input_version }}"
child 是:
---
- name: build tagger docker
hosts: all
vars:
version: "11.0"
tasks:
- name: some step !!!!!!
command: echo {{ version }}
echo 打印 child 但我想用来自 parent 的输入参数覆盖它。可行吗?
changed: [localhost] => {"changed": true, "cmd": ["echo", "11.0"], "delta": "0:00:00.010476", "end": "2016-06-23 13:21:44.091857", "invocation": {"module_args": {"_raw_params": "echo 11.0", "_uses_shell": false, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 0, "start": "2016-06-23 13:21:44.081381", "stderr": "", "stdout": "11.0", "stdout_lines": ["11.0"], "warnings": []}
你echo {{ version }}
但是你在parent中设置了变量input。
如果你 command: echo {{ input }}
它应该工作。
如果你想要覆盖直接在子中定义的 var,我认为你不能,因为变量优先级。
对于 ansible 1.x
优先级如下(最后列出的变量优先):
- “角色默认值”,其优先级高于一切并且最容易被覆盖
- 清单中定义的变量
- 关于系统的发现事实
- “大多数其他”(命令行开关、游戏中的变量、包含的变量、角色变量等)
- 连接变量(ansible_user,等等)
- 额外的变量(命令行中的-e)总是赢
对于 ansible 2.x
- 角色默认值
- 库存变量 [2]
- 库存group_vars
- 库存host_vars
- 剧本group_vars
- 剧本host_vars
- 主机事实
- 播放变量
- 播放vars_prompt
- 播放vars_files
- 注册变量
- set_facts
- 角色并包含变量
- 块变量(仅适用于块中的任务)
- 任务变量(仅针对任务)
- 额外变量(总是优先)
为什么这不起作用:
---
- hosts: all
vars:
input_version: 99
- include: ./tagger_1.yml input="{{ input_version }}"
child 是:
---
- name: build tagger docker
hosts: all
vars:
version: "11.0"
tasks:
- name: some step !!!!!!
command: echo {{ version }}
echo 打印 child 但我想用来自 parent 的输入参数覆盖它。可行吗?
changed: [localhost] => {"changed": true, "cmd": ["echo", "11.0"], "delta": "0:00:00.010476", "end": "2016-06-23 13:21:44.091857", "invocation": {"module_args": {"_raw_params": "echo 11.0", "_uses_shell": false, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 0, "start": "2016-06-23 13:21:44.081381", "stderr": "", "stdout": "11.0", "stdout_lines": ["11.0"], "warnings": []}
你echo {{ version }}
但是你在parent中设置了变量input。
如果你 command: echo {{ input }}
它应该工作。
如果你想要覆盖直接在子中定义的 var,我认为你不能,因为变量优先级。
对于 ansible 1.x
优先级如下(最后列出的变量优先):
- “角色默认值”,其优先级高于一切并且最容易被覆盖
- 清单中定义的变量
- 关于系统的发现事实
- “大多数其他”(命令行开关、游戏中的变量、包含的变量、角色变量等)
- 连接变量(ansible_user,等等)
- 额外的变量(命令行中的-e)总是赢
对于 ansible 2.x
- 角色默认值
- 库存变量 [2]
- 库存group_vars
- 库存host_vars
- 剧本group_vars
- 剧本host_vars
- 主机事实
- 播放变量
- 播放vars_prompt
- 播放vars_files
- 注册变量
- set_facts
- 角色并包含变量
- 块变量(仅适用于块中的任务)
- 任务变量(仅针对任务)
- 额外变量(总是优先)