每个目录而不是每个主机使用Ansible

时间:2018-02-06 19:48:30

标签: ansible ansible-inventory

我知道这听起来有点奇怪,但我想知道是否有办法在每个目录而不是每个主机上使用Ansible。

我们目前的用例如下:同一个应用程序(此处为WordPress)被部署到同一主机上的多个文件夹中(可能是托管服务提供商处非常常见的情况)。

我们希望以“智能”方式管理所有实例的配置(因此使用Ansible的想法)。例如,应将同一文件(插件)复制到实例的相同子文件夹中。

如果所有实例都托管在不同的主机上,这可以很容易地实现,但我可以找到在同一主机上的不同文件夹中实现此目的的方法。

这完全是愚蠢的吗?有没有更好的工具呢?任何见解将不胜感激。

2 个答案:

答案 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_user1host_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