如何将字典查找与 When 条件和 with_items 相结合
How to combine dictionary lookup with When condition and with_items
我需要以下 Pre-reboot task for node servers
任务的正确语法方面的帮助。
我有多个 EC2 实例 tag:Name 等于 webapp1、webapp2、webapp3 和 intranet1、intranet2。
我正在尝试创建一个通用任务来停止每台服务器上的节点服务,然后再修补并重新启动每台服务器。
在下面的任务中,我基本上是在尝试实现字典查找,以便在 app_name
和每个服务器的 app_folder
(并将其传递给 stop-node-services.yml
)时 tag:Name of EC2 instance 与 nodeapps
key 名称相匹配,例如webapp
或 intranet
(来自变量)。
注:下面when
条件中的变量name_tag
包含ec2_instance_facts
模块的Instance的tag:Name在剧本中更进一步:
name_tag: "{{ ec2_facts.instances[0].tags.Name }}"
nodeapps:
webapp:
app_name: webapp55
app_folder: applications/webapp123
intranet:
app_name: intranet66
app_folder: applications/intranet234
# Pre-reboot task for node servers
- include: stop-node-services.yml
with_items:
- { name : "{{ item.value.app_name }}", folder : "{{ item.value.app_folder }}" }
loop: "{{ lookup('dict', nodeapps) }}"
when:
- name_tag is regex("{{ item.key }}\d")
### This is whats in the stop-node-services.yml ###
- name: restart service
become: true
become_user: ubuntu
shell: sudo sv stop .
args:
chdir: /var/hubdoc/{{ item.folder }}
- debug:
msg: "The '{{ item.name }}' on {{ inventory_hostname }} - service stopped"```
以下语法对我有用。在这里发布答案以供其他人受益:
- include: stop-node-services.yml name={{ item.value.app_name }} folder={{ item.value.app_folder }}
when: tags is regex("{{ item.key }}\d")
loop: "{{ lookup('dict', nodeapps) }}"
### This is whats in the stop-node-services.yml ###
- name: stop service
become: true
become_user: ubuntu
shell: sudo sv stop .
args:
chdir: /var/hubdoc/{{ folder }}
- debug:
msg: "The '{{ name }}' on {{ inventory_hostname }} - service stopped"
我需要以下 Pre-reboot task for node servers
任务的正确语法方面的帮助。
我有多个 EC2 实例 tag:Name 等于 webapp1、webapp2、webapp3 和 intranet1、intranet2。 我正在尝试创建一个通用任务来停止每台服务器上的节点服务,然后再修补并重新启动每台服务器。
在下面的任务中,我基本上是在尝试实现字典查找,以便在 app_name
和每个服务器的 app_folder
(并将其传递给 stop-node-services.yml
)时 tag:Name of EC2 instance 与 nodeapps
key 名称相匹配,例如webapp
或 intranet
(来自变量)。
注:下面when
条件中的变量name_tag
包含ec2_instance_facts
模块的Instance的tag:Name在剧本中更进一步:
name_tag: "{{ ec2_facts.instances[0].tags.Name }}"
nodeapps:
webapp:
app_name: webapp55
app_folder: applications/webapp123
intranet:
app_name: intranet66
app_folder: applications/intranet234
# Pre-reboot task for node servers
- include: stop-node-services.yml
with_items:
- { name : "{{ item.value.app_name }}", folder : "{{ item.value.app_folder }}" }
loop: "{{ lookup('dict', nodeapps) }}"
when:
- name_tag is regex("{{ item.key }}\d")
### This is whats in the stop-node-services.yml ###
- name: restart service
become: true
become_user: ubuntu
shell: sudo sv stop .
args:
chdir: /var/hubdoc/{{ item.folder }}
- debug:
msg: "The '{{ item.name }}' on {{ inventory_hostname }} - service stopped"```
以下语法对我有用。在这里发布答案以供其他人受益:
- include: stop-node-services.yml name={{ item.value.app_name }} folder={{ item.value.app_folder }}
when: tags is regex("{{ item.key }}\d")
loop: "{{ lookup('dict', nodeapps) }}"
### This is whats in the stop-node-services.yml ###
- name: stop service
become: true
become_user: ubuntu
shell: sudo sv stop .
args:
chdir: /var/hubdoc/{{ folder }}
- debug:
msg: "The '{{ name }}' on {{ inventory_hostname }} - service stopped"