将项目分配给ansible中的var with_items
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将项目分配给ansible中的var with_items相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个剧本,以找出正在运行的openstack服务器vm。我在vars中创建了一个openstack服务器列表,并使用delegate_to和with_items迭代直到找到vm。我在命令结束时使用wc -l,1将成功。目的是,一旦找到os-server,将servername存储到var中,这样就可以用于playbook中的其余任务。我无法从列表中获取var中的os服务器名称。我不是安赛的专家。有人可以帮助实现这一目标吗?谢谢
- hosts: localhost
vars:
openstack:
- reg1
- reg2
- reg3
- reg4
tasks:
- name: Command to find os server where vm exists
shell: somecommand-to-check-if-vm-exist | wc -l
delegate_to: "{{ item }}"
with_items: "{{ openstack }}"
register: found_server
retries: 1
delay: 1
until: found_server.stdout != "1"
- debug: var=found_server
- name: set fact
set_fact: os-server = "{{ item.item }}"
when: item.stdout == "1"
with_items: "{{ found_server.results }}"
register: var2
- name: debug var
debug: var=var2
- debug: var=os-server
答案
这里不需要retry/until
,也不需要第二个循环。
试试这个:
- hosts: localhost
vars:
openstack: [reg1, reg2, reg3, reg4]
tasks:
- name: Command to find os server where vm exists
shell: somecommand-to-check-if-vm-exist | wc -l
delegate_to: "{{ item }}"
with_items: "{{ openstack }}"
register: vm_check
- name: set fact
set_fact:
os_server: "{{ (vm_check.results | selectattr('stdout','equalto','1') | list | first).item }}"
- name: debug var
debug:
msg: "{{ os_server }}"
这会将每个服务器的结果注册到vm_check.results
,然后只选择stdout
设置为1
的元素,取它的第一个元素吧(我想你总是有一个带VM的服务器),并得到这个元素的.item
,其中包含原始循环(在我们的例子中,它是服务器的名称)。
以上是关于将项目分配给ansible中的var with_items的主要内容,如果未能解决你的问题,请参考以下文章
在ansible中动态地将哈希类型分配给password_hash()
有没有办法使用ansible将活动目录中的用户分配给多个组?
Ansible'with_items'不会传递给Ansible角色