首页 > 解决方案 > ansible 角色,从命令行调用怪异行为

问题描述

我有一个简单的任务,即在多个路径中查找一些文件以及显示它找到的内容的调试语句,如下所示:

- name: "find smth"
  find:
    paths: "{{ search_path }}"
    file_type: file
    patterns: "*.gz"
    recurse: no
  loop_control:
    loop_var: search_path
  loop: "{{ search_paths }}"
  register: find_result

- debug:
    msg: "{{ file_path }}"
  loop_control:
    loop_var: file_path
  loop: "{{ find_result.results | map(attribute='files') | sum(start=[]) | map(attribute='path') | list }}"

这在我使用剧本时有效,但是当我通过命令行调用角色时它不起作用,如下所示:

ansible HOST -u REMOTE_USER -m include_role -a name=ROLE_NAME -e '{"include": {"step1": "06_test"}}' -e '{"search_paths":["/tmp","/opt/tmp"]}'

main.yml (只是为了解释 step1 包括):

- include: "{{ item.value }}.yml"
  loop: "{{ lookup('dict', include, wantlist=True) }}"

在这种情况下,调试任务总是打印:

HOST | SUCCESS => {
    "msg": "All items completed"
}

这是循环的结果消息,注册的 find_result 结构在那里,但我无法通过调试任务中的循环访问它。然而,访问一个值是有效的(例如 msg: "{{ find_result.results[0].files[0].path }}")。

我在 2.9.9 版本中使用 ansible,在 debian 拉伸上使用 python 3.5.7。上面的任务只是对真实场景的分解测试。

标签: pythonansibleansible-role

解决方案


推荐阅读