我在解决如何最好地将主机/角色应用于Ansible中的不同操作系统时遇到问题。

我目前正在使用Ansible生成Windows / Mac / Linux VM,每个VM都有

我已经阅读了最佳实践并尝试遵循它们,尤其是使用分组方法,但是我仍然不确定,因为它们大多提到了Web服务器和数据库服务器。


site.yml

- name: Apply common configuration to all nodes
  hosts: all
  roles:
    - common

- name: Configure and deploy test node 1
  hosts: build-test-node
  roles:
    - build-machine-test-1

- name: Configure and deploy test node 2
  hosts: build-test-node-2
  roles:
    - build-machine-test-2



环境/测试/组

[win_build_nodes]
win_build_machine_1
win_build_machine_2

[mac_build_nodes]
mac_build_machine_1



环境/测试/主机

win_build_machine_1   ansible_host=......
win_build_machine_2   ansible_host=......
mac_build_machine_1   ansible_host=......



环境/测试/元

[mac_build_nodes]
[win_build_nodes]

[win:children]
win_build_nodes

[mac:children]
mac_build_nodes

[linux:children]

[build_nodes:children]
win_build_nodes
mac_build_nodes


我相信environment/test/meta文件需要用build_nodes:children进行更改,但我不确定该怎么做。以前,我只是让VM具有以下功能:

旧site.yml

- name: Apply everything
  hosts: build_nodes
  roles:
    - common
    - build-machine-test-1
    - build-machine-test-2


,但后来意识到了我不希望所有东西都在同一台机器上构建。请注意,build-machine-test-12都有各自的Windows / Mac / Linux构建,因为它们可以根据操作系统检测要包含的内容。

有人可以提出一种更好的基于操作系统分离VM的方法吗? br />

#1 楼

因此,我设法大致保持了相同的结构,并设法分离了机器的生成方式,但是仍然有些模糊,可能可以进行改进以提高效率!


站点。 yml

- name: Apply common configuration to all nodes
  hosts: all
  roles:
    - common

- name: Configure and deploy test node 1
  hosts: build-test-node
  roles:
    - build-machine-test-1

- name: Configure and deploy test node 2
  hosts: build-test-node-2
  roles:
    - build-machine-test-2



环境/测试/组

[win_test_1_nodes]
win_build_machine_1

[mac_test_1_nodes]
mac_build_machine_1

[win_test_2_nodes]
win_build_machine_2

[mac_test_2_nodes]
mac_build_machine_2



环境/测试/主机

win_build_machine_1   ansible_host=......
win_build_machine_2   ansible_host=......
mac_build_machine_1   ansible_host=......
mac_build_machine_2   ansible_host=......



环境/测试/元

[win_test_1_nodes]
[mac_test_1_nodes]
[win_test_2_nodes]
[mac_test_2_nodes]

[win:children]
win_test_1_nodes
win_test_2_nodes

[mac:children]
mac_test_1_nodes
mac_test_2_nodes

[build-machine-test-1:children]
win_test_1_nodes
mac_test_1_nodes

[build-machine-test-2:children]
win_test_2_nodes
mac_test_2_nodes



该解决方案允许生成更多的测试节点,并在其中添加单独的角色,并且可以将其添加到要配置的计算机的正确组中。

#2 楼

https://github.com/030/ansible-certbot

main.yml

- include: Debian.yml
when: ansible_os_family == 'Debian'


像apt这样放置debian所需的一切

总而言之,如果将特定于OS的东西放在单独的文件中,则可以让所有OS类型使用相同的角色。

这是一个更全面的示例https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml

评论


我已经在较低级别完成了此操作,因为每个build-machine-test-1角色都有基于os_family的独立构建。我的问题是在更高层次上,在应用角色之前需要分离出构建机器本身。

– Rekovni
17年9月15日在14:25