在我的用例中,我正在从conf读取目录,源路径是空格分隔的。空间分隔源的数量可以增加或减少。我的product.conf
如下所示
product.conf
{
"directories": [{
"source": "src/main/php/en/path1 src/main/php/en/path2 src/main/php/en/path3",
"lang": "en"
}, {
"source": "src/main/php/jp/path1 src/main/php/jp/path2",
"lang": "jp"
}]
}
Playbook读取conf并将源分配到单独的变量中。
playbook.yml
---
- hosts: 127.0.0.1
connection: local
vars:
BASE_DIR: /home/roop
tasks:
- include_vars: product.conf
- set_fact:
en_source="{{ item.source }}"
with_items: directories
when: item.lang == "en"
- set_fact:
jp_source="{{ item.source }}"
with_items: directories
when: item.lang == "jp"
- debug: var=en_source
- debug: var=jp_source
我动态地获得 BASE_DIR 。我需要在每个来源中添加 BASE_DIR 。喜欢
"en_source" = "/home/roop/src/main/php/en/path1 /home/roop/src/main/php/en/path2"
有什么建议吗?
答案 0 :(得分:1)
有点hacky:
- set_fact:
en_source="{{ BASE_DIR + '/' + item.source | regex_replace('(\s)', '\\1' + BASE_DIR + '/') }}"
regex_replace
是filter from Ansible。
要获得更清晰的解决方案,您可以创建custom filter plugin。