为什么大家
我必须在几台服务器上部署配置,但是每台服务器上的配置都不同。我想知道使用 ansible 是否可以进行循环,或者我是否将参数传递给服务器名称。并在匹配时将配置部署在服务器上?
答案 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 / {文件,模板,任务} /(取决于任务)中的文件,而不必相对或绝对地对它们进行路径。