每个目录而不是每个主机使用 Ansible
Using Ansible per directory instead of per host
我知道这听起来有点奇怪,但我想知道是否有一种方法可以按目录而不是按主机使用 Ansible。
我们当前的用例如下:同一个应用程序(此处为 WordPress)部署到同一主机上的多个文件夹中(可能是托管服务提供商中非常常见的场景)。
我们想以 'smart' 的方式管理所有实例的配置(因此有了使用 Ansible 的想法)。例如,应将相同的文件(插件)复制到实例的相同子文件夹中。
如果所有实例都托管在不同的主机上,这很容易实现,但我可以找到一种方法在同一主机上的不同文件夹中实现这一点。
这完全是愚蠢的吗?有没有更好的工具来做到这一点?任何见解将不胜感激。
您可以为您想要部署应用程序的所有文件夹定义一个列表变量,并使用 {{ 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
您可以像这样为同一个物理主机(或 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
这样你会有三个"hosts",但是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
)。
我知道这听起来有点奇怪,但我想知道是否有一种方法可以按目录而不是按主机使用 Ansible。
我们当前的用例如下:同一个应用程序(此处为 WordPress)部署到同一主机上的多个文件夹中(可能是托管服务提供商中非常常见的场景)。
我们想以 'smart' 的方式管理所有实例的配置(因此有了使用 Ansible 的想法)。例如,应将相同的文件(插件)复制到实例的相同子文件夹中。
如果所有实例都托管在不同的主机上,这很容易实现,但我可以找到一种方法在同一主机上的不同文件夹中实现这一点。
这完全是愚蠢的吗?有没有更好的工具来做到这一点?任何见解将不胜感激。
您可以为您想要部署应用程序的所有文件夹定义一个列表变量,并使用 {{ 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
您可以像这样为同一个物理主机(或 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
这样你会有三个"hosts",但是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
)。