2017-06-07 8 views
0

私はユースケースのためにホストとグループをどのように構造化するべきかを理解するのに役立つ必要があります。可能なホスト/グループ構造

シーンを少し設定しましょう。次のように私の現在の設定は次のとおりです。

ホスト

[windows] 
client_1 ansible_host=172.0.0.1 
[linux] 
client_2 ansible_host=172.0.0.2 
client_3 ansible_host=172.0.0.3 

ちょうどWindowsのセットアップを見てみましょう。

group_vars /窓

jboss_service_name: JBOSSAS7SVC 
app_service_name: APPSRVC 
... 

host_vars/client_1

ansible_user: username 
ansible_password: pasword 
ansible_port: 5986 
ansible_connection: winrm 
ansible_winrm_server_cert_validation: ignore 

次のようにその後、私の脚本はなります

- hosts: '{{ target }}' 
    name: Stop JBoss and App Services. 
    remote_user: '{{ ansible_user }}' 
    tasks: 
    - name: Stopping JBoss Service. 
    win_service: 
     name: '{{ jboss_service_name }}' 
     start_mode: manual 
     state: stopped 

    - name: Stopping App Service. 
    win_service: 
     name: '{{ app_service_name }}' 
     start_mode: manual 
     state: stopped 

次のようにだから私は自分のプレーを実行することができます:

ansible-playbook my-playbook.yml --extra-var "target=client_1" 

またはすべてのWindowsマシン用:

ansible-playbook my-playbook.yml --extra-var "target=windows" 

これは正常に動作し、上記のように、私はこの作業を持っています。ただし、このソリューションは、クライアント用の単一のサーバー設定用です。意味jboss、app、web、およびdbサーバーはすべて同じ物理サーバー上にあります。この場合は172.0.0.1です。

ただし、必ずしもそうであるとは限りません。任意のクライアントに対して、共有または分散セットアップである可能性があります。つまり、jboss、app、web、dbサービスは単一のサーバー上にあるか、それぞれが独自のサーバー上にあることを意味します。

私はこの設定に適応しようとしていますが、特定のクライアントサーバーでshowdownサービスコマンドを実行しているように私のプレイをどのように実行するのか正確にはわかりません。私は、単一のクライアントまたはグループ(Windows)でプレイブックを実行できる必要があります。

これまで私が思いついたのはこれです。

ホストが

[windows] 
client_1 
[linux] 
client_2 
client_3 

group_vars /窓(ここでは変更なし)

jboss_service_name: JBOSSAS7SVC 
app_service_name: APPSRVC 
... 

host_vars/client_1((はansible_host = ...を削除します) 移動したIPアドレスクライアントhost_varレベル O)

ansible_user: username 
ansible_password: pasword 
ansible_port: 5986 
ansible_connection: winrm 
ansible_winrm_server_cert_validation: ignore 

app_server: 172.0.0.1 
jboss_server: app_server: 172.0.0.2 
web_server: app_server: 172.0.0.3 
... 

上記host_varファイルで、それは共有設定した場合、私はちょうど、すべて同じIPアドレスを使用する** _ *サーバー変数を設定します。

私は、デバッグがhost_varファイルとgroup_varファイルに変数を表示し、すべてのデータにアクセスできるテストプレイブックを作成しました。私は、代わりにクライアントホストのグループウィンドウに渡すことができ

ansible-playbook -i client_1 test-playbook.yml 

次のように

は、私はそれを実行します。

は、しかし、私は理解していないことだけで、サーバー上で実行する必要があり、そのクライアントのシャットダウンJBossへwin_serviceするために、これらの新しい変数の使用、例えば電話をかけるために私の古い脚本を編集する方法であるhost_vars/client_1.app_server同様に、私のアプリサービスをシャットダウンするのは、そのクライアントのサーバapp_serverで実行する必要があります。

私はこれが長いテキストであることを知っています。読んでいただきありがとうございます。

私の質問は、まったく間違っていますか?どのように私はWindowsとLinuxホストを区別することができるように私のホストを構築する必要があります、クライアントでこれを設定し、任意のクライアントの共有または分散サーバーのセットアップをサポートすることができますか?

多くのありがとうございます。

+0

何@jww疑問に思っているのは、有能なコードです。コードを「プログラミングや開発ではなく」扱うのはどうですか? – techraf

答えて

0

名前あなたのホストを別の何かが、同じIPアドレスを使用します。

[windows_app] 
wa01 ansible_host=111.111.111.1 

[windows_jboss] 
wj01 ansible_host=111.111.111.1 

[windows:children] 
windows_app 
windows_jboss 

group_vars/windows_appgroup_vars/windows_jbossservice_nameを定義します。

あなたのプレイブックは、特定の戯曲のためのホストを定義する必要があります。

- hosts: windows 
    name: Stop JBoss and App Services on Windows servers 
    remote_user: '{{ ansible_user }}' 
    tasks: 
    - name: Stopping Service. 
    win_service: 
     name: '{{ service_name }}' 
     start_mode: manual 
     state: stopped 

--extra-varsを使用しますが、-lまたは--limit=つのサービスを停止するためにではなく、他のしないでください。

ansible-playbook test-playbook.yml -l windows_app 
関連する問題