使用 Ansible,如何对特定位置的每个文件采取行动?

使用 Ansible,如何对特定位置的每个文件采取行动?

我正在构建剧本来部署 Windows 应用程序,该应用程序需要在应用程序本身之前安装一些先决条件(Visual C++ 运行时和 dotNet 框架)。这些先决条件是 .EXE 文件,都包含在特定文件夹中。

我想构建一个 Ansible 剧本,它将(除其他外)使用参数“/ install / passive”执行 preriquisites 文件夹中的每个 .EXE 文件

我不想在我的剧本中指定每个文件名。

我的想法是首先使用“win_file”模块找到先决条件设置文件,将结果分配给变量,然后遍历该变量并对其包含的每个文件运行“win_command”模块。

不幸的是,我无法使用 register 语句将 win_find 结果分配给变量,它根本什么也不做。

以下是我尝试过的:

- hosts: "{{ target }}"

  tasks:

  - name: Find files in path
    win_find:
      register: myvar
      paths: E:\Temp\Prognosis_11.2\Prerequisites

  - name: debug
    debug:
      msg: "{{ myvar }}"

使用 -v(详细模式)运行时的剧本输出:

任务 [在路径中查找文件] *************************************************************************************************************************************************************************

确定:[SMN001] => {“已更改”:false,“已检查”:5,“文件”:[{“属性”:“存档”,“校验和”:“3049a85843eaf65e89e2336d5fe6e85e416797be”,“创建时间”:1550942958.6690862,“扩展名”:“ exe”,“文件名”:“NDP46-KB3045557-x86-x64-AllOS-ENU.exe”,“isarchive”:true,“isdir”:false,“ishidden”:false,“islnk”:false,“isreadonly”:false,“isshared”:false,“lastaccesstime”:1550942958.6690862,“lastwritetime”:1459427148,“所有者”:“BUILTIN \ Administrators”, “路径”:“E:\Temp\Prognosis_11.2\Prerequisites\NDP46-KB3045557-x86-x64-AllOS-ENU.exe”,“大小”:65444688},{“属性”:“存档”,“校验和”:“8bf41ba9eef02d30635a10433817dbb6886da5a2”,“创建时间”:1550942958.7627323,“扩展名”:“.exe”,“文件名”:“vcredist2013_x64.exe”,“isarchive”:true,“isdir”:false,“ishidden”:false,“islnk”:false,“isreadonly”:false,“isshared”:false,“lastaccesstime”:1550942958.7627323,“lastwritetime”: 1489501866,“所有者”:“BUILTIN \ Administrators”,“路径”:“E:\ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2013_x64.exe”,“大小”:7194312},{“属性”:“存档”,“校验和”:“df7f0a73bfa077e483e51bfb97f5e2eceedfb6a3”,“创建时间”:1550942958.7779777,“扩展名”:“ exe”,“文件名”:“vcredist2013_x86.exe”,“isarchive”:true,“isdir”:false,“ishidden”:false,“islnk”:false,“isreadonly”:false,“isshared”:false,“lastaccesstime”:1550942958.7779777, “lastwritetime”:1489501866,“所有者”:“BUILTIN \ Administrators”,“路径”:“E:\ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2013_x86.exe”,“大小”:6503984},{“属性”:“存档”,“校验和”:“007064d974a55940838f19cd0b0e3aaf27ca06a7”,“创建时间”:1550942958.7939014,“扩展名”:“ .exe”,“文件名”:“vcredist2017_x64.exe”,“isarchive”:true,“isdir”:false,“ishidden”:false,“islnk”:false,“isreadonly”:false,“isshared”:false,“lastaccesstime”: 1550942958.7939014,“lastwritetime”:1488965662,“所有者”:“BUILTIN \ Administrators”,“路径”:“E:\ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2017_x64.exe”,“大小”:15261400},{“属性”:“存档”,“校验和”:“ba1f7e7cace62f7c55ab948cd3b29acc4e8e2329”,“creationtime”:1550942958.8406758,“扩展名”:“ exe”,“文件名”:“vcredist2017_x86.exe”,“isarchive”:true,“isdir”:false,“ishidden”:false,“islnk”:false,“isreadonly”:false,“isshared”:false,“lastaccesstime”:1550942958.8406758,“lastwritetime”:1488965662,“所有者”:“BUILTIN \ Administrators”,“路径”:“E:\ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2017_x86.exe”,“大小”:14401656}],“匹配”:5}

任务 [调试] *************************************************************************************************************************************************************************************

致命:[SMN001]:失败! => {“msg”:“该任务包含一个未定义变量的选项。错误为:“myvar”未定义\n\n错误似乎出现在“/etc/ansible/playbooks/test_find_files.yaml”中:第 18 行,第 5 列,但可能\n出现在文件的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n - 名称:debug\n ^ here\n”}

如您所见,文件被正确找到,但是“myvar”变量不存在,尽管应该分配它。

根据此页面,此逻辑似乎在 Linux 主机上有效:http://www.mydailytutorials.com/using-ansible-find-module-search-filesfolder/(参考页面底部的“将文件名存储在寄存器中”)。

这可能是 win_find 模块本身的问题吗?有什么想法吗?

谢谢!

答案1

这只是一个打字错误,你的register:缩进太多了。

它应该显示为:

  - name: Find files in path
    win_find:
      paths: E:\Temp\Prognosis_11.2\Prerequisites
    register: myvar

相关内容