【问题标题】:How to pass a register value into a include_role loop如何将寄存器值传递到 include_role 循环中
【发布时间】:2020-02-19 05:18:36
【问题描述】:

我有一个可读取文件列表并为这些值设置寄存器的 ansible 剧本。然后我想将文件列表传递给include_role 任务。以下是我当前的代码。

 - name: Get list of files
   command: "sh -c 'find playbooks/vars/files/*.yml'"
   register: find_files

 - include_vars:
     file: "{{ item }}"
   loop: "{{ find_files.stdout_lines }}"
   register: result

 - name: call role
   include_role:
     name: myRole
   loop: "{{ result.results }}"

当 playbook 运行时,它会在目录中找到两个文件; file1.ymlfile2.yml。但是当它通过include_role 循环时,它会通过file1.yml 两次并且永远不会通过file2.yml。试图确定我如何确保file2.yml 也被传递给角色。

【问题讨论】:

  • 我不相信循环遍历include_role:(尤其是当name: 是常量时)除了浪费CPU 之外不会做任何事情;您是否尝试将不同的 变量 传递给角色?另外,command: sh -c "" 也称为shell:

标签: loops ansible include roles


【解决方案1】:

我能够通过构造一个数组然后将其输入 include_role 并使用 find 模块而不是 shell 来找到正确的问题。

 - name: Recursively find yml files
    find:
      paths: ~/vars
      recurse: yes
    register: find_files

  - name: Construct file array
    set_fact:
      file_arr: "{{ file_arr|default([]) + [file.path] }}"
    with_items: "{{ find_files.files }}"
    loop_control:
      loop_var: file

  - name: Topic Management
    include_role:
      name: kafkaTopicManagement
    vars:
      kafkaFiles: "{{ item }}"
    with_items: "{{ file_arr }}"

现在这会将文件提供给 include_role。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2020-01-11
    • 2012-06-24
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多