我知道这听起来有点奇怪,但我想知道是否有办法在每个目录而不是每个主机上使用Ansible。
我们目前的用例如下:同一个应用程序(此处为WordPress)被部署到同一主机上的多个文件夹中(可能是托管服务提供商处非常常见的情况)。
我们希望以“智能”方式管理所有实例的配置(因此使用Ansible的想法)。例如,应将同一文件(插件)复制到实例的相同子文件夹中。
如果所有实例都托管在不同的主机上,这可以很容易地实现,但我可以找到在同一主机上的不同文件夹中实现此目的的方法。
这完全是愚蠢的吗?有没有更好的工具呢?任何见解将不胜感激。
答案 0 :(得分:1)
您可以为同一物理主机(或VM)定义不同的主机别名,如下所示:
主机:
host_user1 ansible_host=host1.example.com app_root_path=/apps/user_john
host_user2 ansible_host=host1.example.com app_root_path=/apps/user_peter
host_user3 ansible_host=host2.example.com app_root_path=/apps/user_smith
这样您将拥有三个“主机”,但host_user1
和host_user2
是同一个物理主机host1.example.com
,而host_user3
实际上是host2.example.com
。变量app_root_path
特定于每个主机。所以你可以在你的剧本中做这样的事情:
- hosts: all
tasks:
- unarchive:
src: myapp_dist.tgz
dest: "{{ app_root_path }}/myapp/"
这会将myapp_dist.tgz
提取到三个不同的目录。
但要注意,使用这种方法,您可能会遇到需要每个主机独占锁定的模块的问题(如apt
)。
答案 1 :(得分:0)
您可以为您要部署应用程序的所有文件夹定义列表变量,并使用{{ item }}
占位符作为路径,例如,如果您想管理所有wp-config.php
文件这些网站,
- name: Manage wp-config based on a template
template:
src: "wp-config.php.j2"
dest: "/sites/{{ item }}/wp-config.php"
with_items:
- www.xyz.com
- foo.bar