Deployment 如何使用本地命令设置要在ansible任务中使用的多个变量

Deployment 如何使用本地命令设置要在ansible任务中使用的多个变量,deployment,ansible,ansible-facts,Deployment,Ansible,Ansible Facts,我有一个部署手册,我想看看正在部署的工件的一些信息。为此,我创建了以下任务 - name: Print application info debug: msg: "Version to be deployed is {{ app_version }} built on {{ app_build_date }}. Jar md5 is {{ app_md5 }}" verbosity: 1 定义所有这些变量值的最佳方法是什么?要部署的工件可以在控制节点中本地访问。我不想创建一

我有一个部署手册,我想看看正在部署的工件的一些信息。为此,我创建了以下任务

- name: Print application info
  debug:
    msg: "Version to be deployed is {{ app_version }} built on {{ app_build_date }}. Jar md5 is {{ app_md5 }}"
    verbosity: 1
定义所有这些变量值的最佳方法是什么?要部署的工件可以在控制节点中本地访问。我不想创建一个任务来通过
命令
模块设置(注册)每个变量。我还研究了本地事实,但IIUC,这意味着我需要创建另一个单独的剧本来收集事实,而且解决方案不是独立的,因为我需要在ansible控制之外的控制节点中管理
/etc/ansible/facts.d
中的本地文件

是否有一种由ansible独立/管理的方法

问:“定义所有这些变量值的最佳方法是什么?我不想创建一个任务来通过命令模块设置(注册)每个变量。”

答:创建一个任务来设置所有变量。使命令在单独的一行上返回所有变量['version'、'build_date'、'md5'],注册结果并创建字典。比如说

- set_fact:
    app: "{{ dict(['version', 'build_date', 'md5']|
                  zip(result.stdout_lines)) }}"
- debug:
    msg: "Version {{ app.version }} built {{ app.build_date }} md5 {{ app.md5 }}"
(未测试)


请参阅。

需要更多信息。运行什么命令将输出“注册”为变量?理想情况下,定义变量的正确方法是使用键:值格式。例如,对象“app”将有两个键:值对,版本:和生成日期:。您可以通过应用程序['version']和应用程序['build_date']访问它们。它仍然是一个变量“app”。这正是我的问题:注册所有这些变量的最佳方式是什么?我以前使用命令或shell模块对单个变量执行了
local_action
,但我的问题是如何在不创建任务的情况下对每个变量进行单独设置。对于实际获取每个值的方法,每个变量都需要自己的bash命令。所以我希望将它们组合成一个脚本,在一次调用中提取所有必需的值是的,现在我明白了,基本上,您需要以循环方式执行每个“bash命令”,并保存输出。例如,循环“{bash_commands}}”,然后注册:commands_output。您可以通过命令\u output.result[0]、命令\u output.result[1]等进行访问,或者第二个选项是编写脚本,执行命令,将输出解析为json对象。然后使用“script”模块执行脚本并注册scirpt的输出,因为您将输出解析为json,所以注册的输出将具有可访问的信息。