ansible - Ansible-VMware 如何循环任务并为键提供值?
问题描述
许多用于 Ansible 的 VMware 模块的结构与普通的 Ansible 模块略有不同。我遇到的是需要为模块提供主机名或集群名称。这不能很好地扩展,我正在寻找一种方法来循环一组主机,甚至是来自 vars 文件的集群(VMware 模块不使用普通的 /etc/hosts 文件)并提供该主机或集群名称到模块。在下面的代码中,我将为“esxi_hostname”提供一个主机名。
正如您从注释代码中看到的那样,我尝试了 with_items 选项,该选项不起作用,因为它对模块不可用。我曾像这样尝试过 jinja:'esxi_hostname: '{% for host in hosts %} {{ host }} {% endfor %} 以及 "loop: '{{ hosts }}'
---
- hosts: localhost
vars_files:
- credentials.yml
- vars.yml
- se1_hosts.yml
tasks:
- name: Manage Log level setting for an ESXi host
vmware_host_config_manager:
hostname: 'vcsa.host.se1.somewhere.com'
username: '{{ vc_username }}'
password: '{{ vc_pass }}'
esxi_hostname: 'hostname'
# with_items:
# - 'c05n06.esx.se1.csnzoo.com'
# loop: '{{ hosts }}'
validate_certs: False
options:
'Config.HostAgent.log.level': 'info'
delegate_to: localhost
我希望我可以为 esxi_hostname 提供一个 var 以供使用,并且正在寻找一种通过循环来做到这一点的方法,因此它针对 host1、host2、host3 等运行。
提前致谢!
解决方案
循环可以应用于模块(在本例中为模块 vmware_host_config_manager),因此循环关键字应具有相同的缩进级别:
- name: Manage Log level setting for an ESXi host
vmware_host_config_manager:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
esxi_hostname: '{{ item }}'
options:
'Config.HostAgent.log.level': 'info'
loop: "{{ groups['esxi'] }}"
delegate_to: localhost
推荐阅读
- python - Python - 强制窗口在其他所有内容下方呈现
- javascript - 输入类型号,只接受可被 5 整除。如果不是,则产生警报错误
- laravel - Laravel 文档的 Swagger 动态 url
- database - redis LUA脚本delete -call delete VS scan unlink
- arrays - 数组数据读取失败
- spring - 是否可以监视应用程序上下文中的每个 bean?
- google-sheets - 逐行转置表格
- python - Django 表单请求方法始终是 GET,甚至在 HTML 模板中提到了 method=“POST”
- list - 扑; 小部件的排序列表
- git - Git Revert 导致合并冲突虽然没有?