如何在不同的服务器上部署不同的conf,而无需每次重复执行任务

时间:2019-03-01 10:20:10

标签: ansible ansible-inventory

为什么大家

我必须在几台服务器上部署配置,但是每台服务器上的配置都不同。我想知道使用 ansible 是否可以进行循环,或者我是否将参数传递给服务器名称。并在匹配时将配置部署在服务器上?

3 个答案:

答案 0 :(得分:0)

您可以采用多种方法来实现此目标,具体取决于您的环境:

  • 如果每个主机都有单独的文件,则可以将其命名为“ hostname.application.conf”。然后,您可以使用简单的副本来部署配置:

    - copy:
        src: "/path/to/configs/{{ansible_hostname}}.application.conf
        dest: path/to/application/folder/application.conf
    

    ansible自动生成变量“ ansible_hostname”,其中包含当前目标主机的主机名。如果您有多个应用程序,则可以通过以下方式遍历它们:

    - copy
        src: "/path/to/configs/{{ansible_hostname}}.{{item.name}}.conf
        dest: "{{item.path}}{{item.name}}.conf
      ...
      loop: 
        - { name: 'appl1', path: '/path/to/application/folder/' }
        - ...
    
  • 如果您有一个配置需要修改并复制到其他主机,则可以查看模板:https://docs.ansible.com/ansible/latest/modules/template_module.html

答案 1 :(得分:0)

我强烈建议使用Jinja2模板作为配置文件,以便Ansible可以按照组或主机文件中的说明设置vars。

https://docs.ansible.com/ansible/latest/modules/template_module.html

答案 2 :(得分:0)

基于角色的Ansible Playbook

对于每个角色“ x”,它将基于以下行为工作:

如果存在role / x / tasks / main.yml,则其中列出的任务将被添加到剧本中。

如果存在role / x / handlers / main.yml,则其中列出的处理程序将添加到播放中。

如果Roles / x / vars / main.yml存在,其中列出的变量将被添加到剧本中。

如果存在role / x / defaults / main.yml,其中列出的变量将被添加到播放中。

如果存在role / x / meta / main.yml,则其中列出的所有角色依赖项都将添加到角色列表中

(角色中的)任何副本,脚本,模板或包含任务都可以引用role / x / {文件,模板,任务} /(取决于任务)中的文件,而不必相对或绝对地对它们进行路径。