운영 체제 기반 Ansible에서 역할 및 호스트를 사용하여 VM 배포


9

Ansible의 다른 운영 체제에 호스트 / 역할을 가장 잘 적용하는 방법을 해결하는 데 문제가 있습니다.

현재 Ansible을 사용하여 Windows / Mac / Linux VM을 생성하고 있으며 각 VM마다 다른 역할이 적용되어야합니다.

모범 사례를 읽었으며 특히 그룹화 방법을 사용하기 위해 모범 사례를 따르려고했지만 여전히 웹 서버와 dbserver에 대해 언급하고 있기 때문에 확실하지 않습니다.


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에 다음과 같이 모든 역할이 내장되어있었습니다.

이전 사이트 .yml

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

그러나 모든 것을 동일한 머신에 구축하고 싶지 않다는 것을 깨달았습니다. 주, build-machine-test-1그리고 2둘은 운영 체제에 따라 포함하는 것을 감지로 별도의 윈도우 / 맥 / 리눅스 빌드합니다.

누구나 운영 체제를 기반으로 VM을 분리하는 더 좋은 방법을 제안 할 수 있습니까?

답변:


6

그래서 나는 같은 구조를 대략 유지하고 기계가 생성되는 방법을 분리 할 수 ​​있었지만 여전히 약간 모호하고 더 효율적으로 향상 될 수 있습니다!


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_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

이 솔루션을 사용하면 별도의 역할을 추가하여 더 많은 테스트 노드를 생성 할 수 있으며 시스템을 프로비저닝 할 올바른 그룹에 추가 할 수 있습니다.


1

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

main.yml

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

Debian.yml의 apt와 Centos.yml의 yum과 같이 debian에 필요한 모든 것을 넣습니다.

요약하면, OS 관련 사항이 별도의 파일에있는 경우 모든 OS 유형이 동일한 역할을 사용하도록 할 수 있습니다.

이것은보다 포괄적 인 예입니다 https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml


build-machine-test-1역할 마다 별도의 빌드를 기반 으로하므로 이미 하위 수준 에서이 작업을 수행 했습니다 os_family. 내 질문은 역할을 적용하기 전에 빌드 머신 자체를 분리해야하는 상위 레벨에 대한 것입니다.
Rekovni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.