根据服务器类型选择具有ansible的正确文件



我正在使用ansible将我的配置部署到不同的服务器。配置由不同的文件和一个密钥库组成,该密钥库保存用于通信的证书。

我希望能够将完全相同的配置部署到不同的服务器,但dev、staging和prod服务器具有不同的证书。

我目前的想法是使用hosts文件来定义服务器类型,类似于以下内容:

all:
hosts:
prod_server_1:
ansible_user: apps
ansible_ssh_host: 192.168.0.1
type: prod

staging_server_1:
ansible_user: apps
ansible_ssh_host: 192.168.0.2
type: staging

然后将所有三个密钥库添加到配置中(prod.ks、staging.ks和dev.ks(,但只复制与我部署的服务器类型匹配的密钥库

- copy:
src: /conf/keystores/{{type}}.ks
dest: /conf/keystore.ks 

是否建议了这种解决方案,或者是否有更标准的方法来解决这种情况?

实际回答您的问题

对我来说,这似乎是一种合理的方式来完成这类任务。由于密钥库是二进制文件,您无法在文件本身中做太多操作,因此需要存储3个不同的文件。但是,我建议对库存文件进行一次更改。当您有少量主机时,就像您的示例中一样,很容易为每个主机设置type变量。现在,假设你有100位主持人。跟踪每个主机并为每个主机设置变量是非常困难的。因此,最好为每种不同类型的主机设置主机组,并为每组分配一个组变量。通过这种方式,您可以在不必跟踪type变量的情况下从组中添加和删除机器。看看下面的例子,看看这个新库存会是什么样子。

附加信息:如果该文件是一个文本配置文件,每个主机都有特定的配置,您可以在文件中写入一个jinja模板,然后使用ansible的template模块来评估该模板并将其复制到服务器。这种情况的优点是只有一个任务(如您现在所拥有的(,并且只有一个模板文件来管理更改。而不是为每种不同类型的主机都有一个单独的文件。

示例:

库存文件test-inv.yml:

---
prod_servers:
hosts:
prod_server_1:
ansible_user: root
ansible_ssh_host: some-prod-host-1
prod_server_2:
ansible_user: root
ansible_ssh_host: some-prod-host-2
vars:
type: prod
staging_servers:
hosts:
stage_server_1:
ansible_user: root
ansible_ssh_host: some-stage-host-3
stage_server_2:
ansible_user: root
ansible_ssh_host: some-stage-host-4
vars:
type: staging
...

然后我写了这个小剧本test.yml:

---
- name: test variables...
hosts: all
gather_facts: no
tasks:
- debug: msg="type={{type}}"

这就是输出:

$ ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i test-inv.yml test.yml
PLAY [test variables...] *********************************************************************************************************************************************************************
TASK [debug] *********************************************************************************************************************************************************************************
ok: [prod_server_2] => 
msg: type=prod
ok: [prod_server_1] => 
msg: type=prod
ok: [stage_server_1] => 
msg: type=staging
ok: [stage_server_2] => 
msg: type=staging
PLAY RECAP ***********************************************************************************************************************************************************************************
prod_server_1              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
prod_server_2              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
stage_server_1             : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
stage_server_2             : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

相关内容

  • 没有找到相关文章

最新更新