据我了解,每个剧本都需要一个主机条目。我想知道,如果我创建一个包含其他剧本的容器剧本,我是否可以为每个剧本包含参数化主机。所以像
---
- include playbook_1.yml
hosts: tag_postgres
- include: playbook_2.yml
hosts: tag_rabbitmq
Run Code Online (Sandbox Code Playgroud)
我能够将所有不同的剧本放在一个脚本中并调用,但是这样我就无法将一个剧本中的某些 set_fact 重用到另一个剧本中,因此有很多任务重复。
问题的另一个推论是,我可以在亚马逊上启动 ec2s 吗?
hosts: localhost
Run Code Online (Sandbox Code Playgroud)
和已启动的 ec2s 的配置,它基本上将从 配置清单-i ec2.py
,并将主机指定为
hosts: tag_<some_tag>
Run Code Online (Sandbox Code Playgroud)
通过相同的剧本或一组包含的剧本(不同的角色)发生?
小智 6
实际上,您可以拥有多个主机:每个剧本的部分。看来,一个主持人:开始新的戏剧。例如,参见http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/。
像这样的东西对我有用(ansible 2.2):
---
- hosts: localhost
connection: local
roles:
- { role: ec2,
tag: 'master',
instance_type: t2.2xlarge,
count: 1
}
tasks:
- shell: hostname # reports localhost
- hosts: tag_master
tasks:
- shell: hostname # reports instance(s) with tag 'master'
Run Code Online (Sandbox Code Playgroud)
因此,将 hosts: 放在每个包含的 .yml 的顶部,而不是放在 include: 之后。
http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts
...变量还可以来自其他地方,但这些是一种被发现的变量,而不是由用户设置的。
事实是从与远程系统对话中获得的信息......
事实来自您的远程主机。因此,这就是为什么当您的*.yml文件有多个playbook时,通常您可以在不同主机之间共享事实的原因。
现在,如果您在剧本的另一部分中执行以下操作,则可以从其他主机访问事实:
{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,您需要记住,在使用它之前您需要了解事实。然后,您可以在剧本中设置第一部分,获取所有主机的所有事实或为此使用事实缓存(请参阅:http ://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )
现在,如果您想在剧本中共享选项,也许可以更好地重新考虑要放入变量的信息,这样您就可以使用相同的指令“共享”变量include
,看看这个:
归档时间: |
|
查看次数: |
49206 次 |
最近记录: |