使用带有 Ansible 的 Jinja2 过滤器格式化字符串列表
Format list of strings using Jinja2 filter with Ansible
我有一个类似于
的列表
my_apps:
- bootstrap-client
- theme-client
- engine-client
我想把这个数组变成类似于
的字符串
$LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war
这可以使用 Jinja2 过滤器吗?在 Ansible 模板中?
您可以使用 Ansible 过滤器 regex_replace
in combination with the map
and join
过滤器来实现这一点。
因此必须使用正则表达式匹配整个列表项 ^(.*)$
并在替换中使用 \1
反向引用它。
给你:
"{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\1-*.war' ) | join(' ') }}"
鉴于剧本:
- hosts: all
gather_facts: yes
tasks:
- debug:
msg: "{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\1-*.war' ) | join(' ') }}"
vars:
my_apps:
- bootstrap-client
- theme-client
- engine-client
这产生:
PLAY [all] ********************************************************************************************************
TASK [debug] ******************************************************************************************************
ok: [localhost] =>
msg: $LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war
PLAY RECAP ********************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我有一个类似于
的列表my_apps:
- bootstrap-client
- theme-client
- engine-client
我想把这个数组变成类似于
的字符串$LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war
这可以使用 Jinja2 过滤器吗?在 Ansible 模板中?
您可以使用 Ansible 过滤器 regex_replace
in combination with the map
and join
过滤器来实现这一点。
因此必须使用正则表达式匹配整个列表项 ^(.*)$
并在替换中使用 \1
反向引用它。
给你:
"{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\1-*.war' ) | join(' ') }}"
鉴于剧本:
- hosts: all
gather_facts: yes
tasks:
- debug:
msg: "{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\1-*.war' ) | join(' ') }}"
vars:
my_apps:
- bootstrap-client
- theme-client
- engine-client
这产生:
PLAY [all] ********************************************************************************************************
TASK [debug] ******************************************************************************************************
ok: [localhost] =>
msg: $LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war
PLAY RECAP ********************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0