我有一个主机,我想多次安装相同的服务,但具有不同的路径,服务名称等(可以通过变量配置的东西).
我通常不会为此使用相同的主机,但这是一个特殊的用例场景,我无法更改架构.
使用Ansible(我已经在使用2.0)的最佳方法是什么?
鉴于您有安装应用程序的角色,您可以使用滚动参数来配置所有移动的部分.
- role: cool-app
location: /some/path/A
config:
some: stuff
- role: cool-app
location: /some/path/B
config:
some: other stuff
Run Code Online (Sandbox Code Playgroud)
然后你的角色里面,你可以直接访问{{ location }}和{{ config.some }}等.
更具动态性但也更复杂的创建 - 特别是如果您已经具有此工作角色并且现在需要更改它 - 是将所有任务循环到一组实例上.
您可以再次将其作为角色参数传递:
- role: cool-app
instances:
- location: /some/path/A
config:
some: stuff
- location: /some/path/B
config:
some: other stuff
Run Code Online (Sandbox Code Playgroud)
或者更好地在主机或组中定义它.
然后,每个对于实例唯一的任务都需要遍历instances变量.因此,例如解压缩:
- unarchive:
src: cool-app.tgz
dest: "{{ item.location }}"
with_items: instances
Run Code Online (Sandbox Code Playgroud)
小智 5
除了udondan 的回应之外,还有第三种解决方案。让我们考虑以下目录结构:
host_vars/myapp01.yml
host_vars/myapp02.yml
roles/touch/tasks/main.yml
inventory.yml
play.yml
Run Code Online (Sandbox Code Playgroud)
以及以下文件内容:
# host_vars/myapp01.yml
myvar: myval01
# host_vars/myapp02.yml
myvar: myval02
# roles/touch/tasks/main.yml
- name: touch
command: touch {{ myvar }}
# inventory.yml
myapp01 ansible_host=192.168.0.1
myapp02 ansible_host=192.168.0.1
# play.yml
- hosts: all
roles:
- touch
Run Code Online (Sandbox Code Playgroud)
主意
这个想法是使用应用程序实例名称为主机添加别名(每个应用程序实例一个别名)。在示例中,两个别名(myapp01和myapp02)针对同一主机:192.168.0.1。现在,这两个应用程序实例被 ansible 完全视为两个单独的主机,并且:
ansible-playbook play.yml -i inventory.ini
Run Code Online (Sandbox Code Playgroud)
将在主机192.168.0.1上安装应用程序的两个实例(触摸文件myval01和myval02)。
优点
例如,该解决方案允许仅在应用程序的一个实例上执行播放:
ansible-playbook play.yml -i inventory.ini --limit myapp01
Run Code Online (Sandbox Code Playgroud)
笔记
两个 DNS 或 IP 地址也可以针对同一台计算机。
| 归档时间: |
|
| 查看次数: |
2298 次 |
| 最近记录: |