オペレーティングシステムに基づくAnsibleでの役割とホストを使用したVMのデプロイ


9

Ansibleでホスト/ロールをさまざまなオペレーティングシステムに最適に適用する方法を考え出すのに問題があります。

現在、Ansibleを使用してWindows / Mac / Linux VMを生成しています。各VMには、適用する必要のある異なる役割があります。

私はベストプラクティスを読み、特にグループ化の方法を使用するために、それらに従うことを試みましたが、彼らが主にWebサーバーとDBサーバーに言及しているため、まだわかりません。


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を分離するより良い方法を誰かが提案できますか?

回答:


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.