从 stdout 构建 Ansible 字典

Build Ansible dictionary from stdout

我正在创建 Ansible 角色来安装各种软件。在这些角色中,我使用 ansible_pkg_mgr 来确定我是否必须使用 aptyum。这按预期工作。

在检索某些存储库时,例如 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 }}"