Ansible:如何用项替换字符串中的文本

时间:2017-09-14 15:55:31

标签: ansible

我有一个Ansible命令,它返回一个目录列表:

- local_action: command find {{ role_path }}/files -type f
  register: result

例如,它返回了两条路径:path/files/a/1.zippath/files/a/2.zip。我需要剪切字符串路径/文件的开头,离开/a/1.zip/a/2.zip并注册结果以删除这些文件。我尝试了regex_replace和shell sed。但这没效果。有可能吗?

  - command: "echo {{item}} | sed s/'{{ role_path }}/files'/''"
    with_items: "{{result.stdout_lines}}"
    register: script_results

  - msg: {{ item | regex_replace('/path/files','\\1') }}
    with_items: "{{result.stdout_lines}}"

1 个答案:

答案 0 :(得分:0)

如评论中所述:您不应该首先使用命令。您可以将find任务委派给map,它应该在您执行剧本的机器上执行。

您可以使用the relpath filter删除路径的开头,并使用attribute过滤器和- find: path: "{{ role_path }}" recurse: yes register: result delegate_to: 127.0.0.1 - debug: msg: "{{ item | relpath(role_path) }}" with_items: "{{ result.files | map(attribute='path')}}" 方便地提取路径:

ok: [127.0.0.1] => (item=/path/to/role/dir/file_1) => {
    "item": "/path/to/role/dir/file_1", 
    "msg": "dir/file_1"
}

您将获得的输出将类似于以下示例。价值观不是以斜杠开头的,但我认为您可以轻松解决这个问题。

time.sleep(0.005)