我想定义一个Ansible角色并注册动态变量:
---
- name: Check for {{ package }}
stat: path=/opt/packages/{{ package }}
register: "{{ package | regex_replace('-', '_') }}"
- name: Install {{ package }} {{ package_version }}
command: "custom-package-installer {{ package }} {{ package_version }}"
when: "not {{ package | regex_replace('-', '_') }}.stat.exists"
Run Code Online (Sandbox Code Playgroud)
用法如下:
- include: install_package.yml package=foo package_version=1.2.3
Run Code Online (Sandbox Code Playgroud)
但是,Ansible不承认条件:
TASK: [example | Install foo 1.2.3] ***********************************
fatal: [my-server] => error while evaluating conditional: not foo.stat.exists
FATAL: all hosts have already failed -- aborting
Run Code Online (Sandbox Code Playgroud)
如何动态定义变量,扩展{{ }}?
无法注册动态变量.{{ var }}注册占位符是没有办法的.然而,有一种更清洁的方式来执行我认为你想要实现的目标:Ansible:这是事实.
简短的摘要:
您可以编写一个打印JSON的简单脚本,如:
#!/bin/python #or /bin/bash or any other executable
....
print """{ "ansible_facts": {
"available_packages": ["a", "b", "c"]
}
}"""
Run Code Online (Sandbox Code Playgroud)
并将其放入计算机上的本地事实文件夹中(作为带有.fact结尾的可执行脚本):
Your second task would then look like:
- name: Install {{ package }} {{ package_version }}
command: "custom-package-installer {{ package }} {{ package_version }}"
when: "not package in ansible_facts['available_packages']"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6887 次 |
| 最近记录: |