我正在通过额外的变量启动 docker-compose 服务(apache solr)的安装手册。这些变量是在执行时设置的,因为该剧本应该是灵活的并且一台服务器上存在多种配置。
我的想法是,用户可以将 ansible ui (ansible 信号量)中的变量设置为字符串:
project_coresmain_en:english,main_de:german我想将这些核心作为字典进行迭代。我最后想要的是:
{
{
name: main_en,
language: english
},
{
name: main_de,
language: german
},
}
Run Code Online (Sandbox Code Playgroud)
第一步是将它们分开,(这已经有效):
- name: "debug: split cores"
debug:
msg: "{{ item }}"
loop: "{{ project_cores.split(',') }}"
Run Code Online (Sandbox Code Playgroud)
然后我尝试了以下操作但没有成功,因为这不会添加子元素的键:
- name: "Extract solr cores configuration."
set_fact:
dict: "{{ dict|default({}) | combine ( { item.split(':')[0] : item.split(':')[1] } ) }}"
with_items:
- "{{ project_cores.split(',') }}"
Run Code Online (Sandbox Code Playgroud)
我测试了一些组合,但没有找到有关如何添加键的有效解决方案。
知道如何将该字符串转换为第一个示例中所述的真实目录吗?提前致谢!
以下声明
project_cores_dict: "{{ dict(project_cores|
split(',')|
map('split',':')) }}"
Run Code Online (Sandbox Code Playgroud)
给你想要的
project_cores_dict:
main_de: german
main_en: english
Run Code Online (Sandbox Code Playgroud)
- hosts: localhost
vars:
project_cores: 'main_en:english,main_de:german'
project_cores_dict: "{{ dict(project_cores|
split(',')|
map('split',':')) }}"
tasks:
- debug:
var: project_cores_dict
Run Code Online (Sandbox Code Playgroud)
project_cores_dict: "{{ dict(project_cores|
split(',')|map('trim')|
map('split',':')|map('map', 'trim')) }}"
Run Code Online (Sandbox Code Playgroud)
测试一下
- debug:
msg: |
{{ pcd|to_yaml }}
loop:
- 'main_en:english,main_de:german'
- 'main_en:english, main_de:german'
- 'main_en: english, main_de:german'
vars:
pcd: "{{ dict(item|
split(',')|map('trim')|
map('split',':')|map('map', 'trim')) }}"
Run Code Online (Sandbox Code Playgroud)
给出(删节)
msg: |-
{main_de: german, main_en: english}
msg: |-
{main_de: german, main_en: english}
msg: |-
{main_de: german, main_en: english}
Run Code Online (Sandbox Code Playgroud)
无需修剪
- debug:
msg: |
{{ pcd|to_yaml }}
loop:
- 'main_en:english,main_de:german'
- 'main_en:english, main_de:german'
- 'main_en: english,main_de:german'
vars:
pcd: "{{ dict(item|
split(',')|
map('split',':')) }}"
Run Code Online (Sandbox Code Playgroud)
空格将成为键和值的一部分
msg: |-
{main_de: german, main_en: english}
msg: |-
{' main_de': german, main_en: english}
msg: |-
{main_de: german, main_en: ' english'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2309 次 |
| 最近记录: |