0

我对如何使用 ansible 管理多个环境(产品/开发)感到非常困惑。我也在使用分子在本地进行测试。

所以这是我现在的项目布局。

|----inventories/   
|    |   
|    |--dev/
|    |  |
|    |  |--group_vars/...
|    |  |
|    |  |--host_vars/...
|    |  
|    |--prod/
|       |
|       |--group_vars/...
|       |
|       |--host_vars/
|            |
|            |--my_playbook_hostname_vars.yml
|     
|----roles/...     
|     
|----hosts.yml    
|
|----my_playbook.yml  
|  

这是根据文档的目录结构

现在我有我的分子文件,我可以像这样链接开发目录

# molecule.yml
provisioner:
  name: ansible
  inventory:
    links:
      group_vars: ../../../../inventories/dev/group_vars/
      host_vars: ../../../../inventories/dev/host_vars/

因此,Molecule 可以很好地使用 vagrant 驱动程序进行本地测试,例如,我还可以将其设置为使用 EC2 驱动程序在云中对其进行测试。到目前为止,一切都很好。

但是如何启动 my_playbook.yml?当我使用ansible-playbook my_playbook.ymlthen 它不知道在哪里寻找变量,因为有两个环境。如何告诉 Ansible 查看 inventory/prod/group_vars 和 inventory/prod/host_vars,然后通过主机和组名进一步解析,就像在 hosts.yml 中定义的那样,而不影响我的分子设置?

当我在根目录中设置 group_vars/ 和 host_vars/ 时,它可以工作

4

1 回答 1

5

根据文件

-i, --inventory
    specify inventory host path or comma separated host list.

一种选择是为每个环境创建一个单独的主机文件(与您提供的文档链接中的方式几乎相同)。像这样:

|-- inventories
|   |-- dev
|   |  |-- group_vars/
|   |  |-- host_vars/
|   |  |-- hosts
|   |-- prod
|      |-- group_vars/
|      |-- host_vars/
|      |-- hosts
|-- roles/
|-- my_playbook.yml 

...然后调用 ansible-playbook-i

ansible-playbook my_playbook.yml -i inventories/dev/hosts
# or 
ansible-playbook my_playbook.yml -i inventories/prod/hosts
于 2020-02-06T18:44:54.607 回答