2017-02-22 10 views
3

を実行したときのは、私たちは私たちのインベントリファイルに二つのマシンを定義したとしましょうホストの順序を制御する方法:Ansible - 脚本は

[db-server-preprod] 172.16.0.1 172.16.0.2

私が実行されます。このグループに対して脚本を実行した場合シリアルが0であるか、1であり、順序がグループ内でIPが定義されていると思われる場合は、両方のマシンで同じ時刻になります。

しかし、定義されたマシンでプレイブックの実行順序を制御することはできますか?

同じ役割は、他のすべてのマシンとは異なり、いずれかのマシン(マスター)でわずかに異なるように動作しますが、マスターにしたいマシンがプレイブックが実行される最初のマシンになることが重要です。

私のアイデア、これまで:

  • は、IPアドレスの順序を逆にし、ニーズに基づいている別のグループ名を作成

    は、一つのホスト上で実行したり、不利益が、別のは、私は私が複製する必要があると思うということですgroup_varsのように、それぞれdb-server-preprod*バリアント+​​他のすべての環境に1つあります。
  • インストールをマスターとスタンバイの2つの異なる役割で分けて、ニーズに応じて、私が望むマシンで実行したいものを実行します。

答えて

5

あなたが、その後、その後、一度にすべてのサーバに共通する役割を適用し、別のグループにあなたのマスターホストを配置除くパターンを使用して、マスターを除くすべてのサーバーにのみマスタサーバ、スレーブ・ロールにマスターの役割を適用することができます。

在庫:

[all-servers] 
host1 
host2 
host3 
host4 

[master-server] 
host2 

脚本:

--- 
- hosts: all-servers 
    gather_facts: no 
    tasks: 
    - debug: msg=role-common 

- hosts: master-server 
    gather_facts: no 
    tasks: 
    - debug: msg=role-master 

- hosts: all-servers:!master-server 
    gather_facts: no 
    tasks: 
    - debug: msg=role-slave 
+0

答えに感謝します。これは私の質問に答えるだけでなく、似たようなものだと思ったので、実際にプレイブックが実際にはプレイリストになっています。あなたがリストとしてそれらの多くを置くことができることを知らない単一の演劇を含んでいた。 –

0

あなたは脚本に使用することができますmain.yml「シリアル= 1」を、それを1つずつ実行し、あなたは脚本がマスターノード上で実行なり、その後、それは他人のノード上で実行することを確実にすることができるようにします。

- hosts: allnodes 
    remote_user: "{{user}}" 
    become: True 
    serial: 1 
    roles: 
    - role: your_role 
+0

あなたの答えのおかげで、これはまさに私の現在の状況だった - 私はシリアル使用:1と私は順序があるという事実に頼っています現在のグループのインベントリファイルで定義されています。そして、問題は、私がマスターをインストールしたいマシン(たとえインベントリの最初のものではなくても)が最初のものであることを制御する方法でしたが、私はコンスタンチンからの答えに行くかもしれないと思います。 –

関連する問題