2016-09-16 5 views
1

RHEL 6サーバーでのみ実行したいプレイブックがあります。私は全体の脚本内のすべての単一のタスクに一部の変数と一致するホストのみの実行可能なプレイプレーン

when: ansible_distribution == "RedHat" and ansible_distribution_major_version == 6 

を置くことができます知っているが、それは私にはかなり非効率です。

プレイリスト全体をこれらのマシンに限定する方法はないので、この行をすべてのタスクに入れる必要はありませんか?

サーバがRedHat 6であるかどうかを毎回確認する必要がないので、はるかに高速に実行することもできます。

また、私は、ほとんどの場合、RHEL 6サーバーのリストを保存しておき、このプレイフォントを実行することが最も効率的であると仮定します。Anipalは実際にこの情報をキャッシュしていないため、すべてのサーバーに接続して、RHELとバージョン6のどちらであるかを把握してください。

+0

下記の回答が良いですが、インベントリのOSをグループとして追跡するのが最善の方法です。 – smiller171

答えて

2

使用include

- include: "{{ include_path }}" 
    with_first_found: 
    - "{{ ansible_distribution }}.yml" 
    - "{{ ansible_os_family }}.yml" 
    - "default.yml" 
    loop_control: 
    loop_var: include_path 

アップデートを:あなたはディストリビューションは、あなたがこのような何かを行うことがサポートされていない場合に失敗するあなたの脚本にしたい場合は

は防ぐためにloop_varを追加しました可能なのはitemです。

+1

@techraf良い点、ありがとう!答えを更新しました。 –

0

この問題に対処するための一つの戦略は、メインタスクファイルにこのようなディストリビューションバージョンの特定のタスクとタスクファイルを含めることです。

- include: "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml" 

ファイルtasks/RedHat-6.ymlは、よりために、特定のすべてのタスクが含まれますRHEL6。 with_first_found

- include: RedHat6.yml 
    when: ansible_distribution == "RedHat" and ansible_distribution_major_version == 6 

- fail: 
    msg: "Distribution not supported" 
    when: ansible_distribution != "RedHat" or whatever conditions you want 
+0

これはきちんとしています。「未知のディストリビューション」をキャッチしてランタイムエラーが見つからず、すべて失敗するようなファイルを生成しないようにする方法はありますか? – Petr

+0

多分このようなものです: '--include:unknown_distribution.yml when:{{ansible_distribution}}が定義されていません。 'しかし、私はAnipalが配布を決定しなかったときに何が返ってくるのか分かりません。 –

関連する問題