ansible - Ansible 子元素查找需要字典
问题描述
我有一个变量/字典文件如下:
cafu_analyze_bidprice:
artifacts_name:
- "forecast-measures-read-deploy"
- "forecast-measures-finalizer-deploy"
group_id: "com.lufthansa.cobra.cafu"
cafu_measurement:
artifacts_name:
- "forecast-exporter-read-deploy"
group_id: "com.lufthansa.cobra.cafu"
和剧本如下:
- name: Get deployable artifact from artifactory and copy
maven_artifact:
validate_certs: false
group_id: "{{ item.0.group_id }}"
artifact_id: "{{ item.1 }}"
version: "{{ version }}"
repository_url: http://10.127.130.82:8081/artifactory/cafu
dest: "/opt/cafu/target-test"
classifier: "exec"
with_subelements:
- "{{ module_name }}"
- artifacts_name
我将模块名称作为变量传递:
ansible-playbook -C cafu-deploy.yml -i hosts -e module_name=cafu_analyze_bidprice -e version=1.1.17-SNAPSHOT
出现以下错误:
失败的!=> {"msg": "子元素查找需要字典,得到 'cafu_analyze_bidprice'"}
如果我做错了什么,请帮忙,任务是从命令行获取模块名称,而不是将它们用作字典变量。
解决方案
两个错误:
您传递的是字符串 (
cafu_analyze_bidprice
) 而不是对名为 的变量的引用cafu_analyze_bidprice
,使用
subelements
查找不适合此用例,因为您没有字典列表。
你应该做什么:
使用
vars
查找来引用名称存储在另一个变量中的变量(您使用module_name
),遍历
artifacts_name
上述查找结果的键中定义的列表。
由于您还使用group_id
键,您可以使用辅助变量(my_var
在下面的示例中调用)来避免调用查找两次:
- name: Get deployable artifact from artifactory and copy
maven_artifact:
validate_certs: false
group_id: "{{ my_var.group_id }}"
artifact_id: "{{ item }}"
version: "{{ version }}"
repository_url: http://10.127.130.82:8081/artifactory/cafu
dest: "/opt/cafu/target-test"
classifier: "exec"
loop: "{{ my_var.artifacts_name }}"
vars:
my_var: "{{ lookup('vars', module_name) }}"
推荐阅读
- angular - 出现错误- GET http://localhost:8080/hello/variable/user net::ERR_FAILED 运行 Angular+Spring Boot 应用程序
- rust - 更高等级的特征界限和函数参数
- python - 缩放 QMainwindow
- html - 如何阻止div背景重叠
- python - 如何将替换 \" 替换为 '
- r - 使用一些约束循环所有可能的列组合
- javascript - $(document).on 等价于 Vanilla Javascript
- email - 经典 ASP:替换电子邮件字符串中的所有字符 - 减去 @ 和“。”
- matlab - Matlab Pso 算法
- sql-server - 如何避免在此 T-SQL 示例中使用游标