我需要在多个主机上设置环境。我需要从文件中读取变量,并且希望它们在特定主机或一组主机上执行。我无法确定如何使用单个任务来实现这一目标?
假设我有一个文件,其中包含以下格式的变量:
container_name: java1
container_hostname: java-mc1
script_location: /tmp
execute_on_hosts: host1,host2,host3
container_name: java2
container_hostname: java-mc2
script_location: /tmp
execute_on_hosts: host1
我希望我的任务从此文件中读取并仅通过匹配主机部分中的主机名(在剧本中提供)在指定的主机上执行任务。
答案 0 :(得分:0)
您应该阅读Ansible Variables文档。虽然您可能可以使某些工作正常进行,但是您并没有真正按照预期的方式使用Ansible。
Ansible从根本上围绕“游戏”的概念而建立。每个游戏代表一个或多个任务,应针对一个主机或一组主机。然后将这些剧本打包成“剧本”。 Ansible提供了在“广告资源”中组织变量的方法。一种常见的方法是执行以下操作:
/ some / ansible / dir / hosts
[mc1_hosts]
host1
host2
host3
[mc2_hosts]
host1
/ some / ansible / dir / group_vars / mc1_hosts
---
mc1_container_data:
container_name: java1
container_hostname: java-mc1
script_location: /tmp
/ some / ansible / dir / group_vars / mc2_hosts
---
mc2_container_data:
container_name: java2
container_hostname: java-mc2
script_location: /tmp
/some/ansible/dir/playbook.yml
---
- hosts: mc1_hosts
tasks:
- name: Display variables
debug:
msg: "{{ mc1_container_data }}"
- name: Display container_name
msg: "{{ mc1_container_data.container_name }}"
- hosts: mc2_hosts
tasks:
- name: Display variables
debug:
msg: "{{ mc2_container_data }}"
- name: Display container_name
msg: "{{ mc2_container_data.container_name }}"
最后ansible-playbook playbook.yml
运行这些任务。