我需要以下Pre-reboot task for node servers
任务的正确语法的帮助。
我有多个EC2实例,它们的 tag:Name 等于 webapp1,webapp2,webapp3和intranet1,intranet2。 我试图创建一个通用任务,以便在修补和重新启动每个服务器之前停止每个服务器上的节点服务。
在下面的任务中,我基本上想实现字典的查找,以在时为每个服务器获取app_name
和app_folder
(并将其传递给stop-node-services.yml
)。 EC2实例的tag:Name 与nodeapps
键名称匹配,例如webapp
或intranet
(来自vars)。
注意::以下name_tag
条件中的变量when
包含实例的标签:名称,该名称来自剧本中的ec2_instance_facts
模块:
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"```
答案 0 :(得分:0)
以下语法对我有用。在此处发布答案以使他人受益:
- 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"