从 stdout 构建 Ansible 字典
Build Ansible dictionary from stdout
我正在创建 Ansible 角色来安装各种软件。在这些角色中,我使用 ansible_pkg_mgr 来确定我是否必须使用 apt
或 yum
。这按预期工作。
在检索某些存储库时,例如 https://download.docker.com/linux/centos/7/x86_64/stable/repodata/
,我想使用 lsbs_release -a
获取所需的值,以便正确填充特定版本的 URL。
下面的代码有效,但我如何循环到列表的末尾并将 key/value 对放入字典中?
我总是乐于接受其他建议,或者是否有更简洁的方法。我不一定被卡住了,会欣赏另一双眼睛。我认为这是一个很好的解决问题,因为它对未来的项目很有用。
- hosts: localhost
connection: local
tasks:
- name: check OS
command: lsb_release -a
register: var
- name:
set_fact:
foo: "{{ var.stdout }}"
- name:
set_fact:
bar: "{{ foo.split('\n') | replace('\t','') }}"
- name:
set_fact:
lsbs_release_attributes:
- key: "{{ bar[0].split(':',1)[0] }}"
- value: "{{ bar[0].split(':',1)[1] }}"```
问:"我如何循环到列表的末尾并将 key/value 对放入字典中?"
答:试试
- set_fact:
lsbs_release_attributes: "{{ lsbs_release_attributes|d({})|
combine({key: val}) }}"
loop: "{{ bar }}"
vars:
_item: "{{ item.split(':',1) }}"
key: "{{ _item.0 }}"
val: "{{ _item.1 }}"
我正在创建 Ansible 角色来安装各种软件。在这些角色中,我使用 ansible_pkg_mgr 来确定我是否必须使用 apt
或 yum
。这按预期工作。
在检索某些存储库时,例如 https://download.docker.com/linux/centos/7/x86_64/stable/repodata/
,我想使用 lsbs_release -a
获取所需的值,以便正确填充特定版本的 URL。
下面的代码有效,但我如何循环到列表的末尾并将 key/value 对放入字典中?
我总是乐于接受其他建议,或者是否有更简洁的方法。我不一定被卡住了,会欣赏另一双眼睛。我认为这是一个很好的解决问题,因为它对未来的项目很有用。
- hosts: localhost
connection: local
tasks:
- name: check OS
command: lsb_release -a
register: var
- name:
set_fact:
foo: "{{ var.stdout }}"
- name:
set_fact:
bar: "{{ foo.split('\n') | replace('\t','') }}"
- name:
set_fact:
lsbs_release_attributes:
- key: "{{ bar[0].split(':',1)[0] }}"
- value: "{{ bar[0].split(':',1)[1] }}"```
问:"我如何循环到列表的末尾并将 key/value 对放入字典中?"
答:试试
- set_fact:
lsbs_release_attributes: "{{ lsbs_release_attributes|d({})|
combine({key: val}) }}"
loop: "{{ bar }}"
vars:
_item: "{{ item.split(':',1) }}"
key: "{{ _item.0 }}"
val: "{{ _item.1 }}"