1. ホーム
  2. ansible

[解決済み] Ansibleのロールのdefaultsとvarsの違いは何ですか?

2022-04-20 03:56:42

質問

新しいAnsibleのロールを作成するとき、テンプレートでは varsdefaults ディレクトリに、空の main.yml ファイルを作成します。ロールを定義するときに、これらのどちらかに変数定義を置くことができ、それらは私のタスクで利用可能になります。

に定義するのと何が違うのでしょうか? defaultsvars ? には何を入れるべきでしょうか? defaults を、そして何を vars ? 同じデータに対して両方を使うのは意味があるのでしょうか?

両者の優先順位/プライオリティに違いがあることは承知していますが、何がどこに行くべきかを理解したいです。

例えば、私のロールがターゲットシステム上にディレクトリのリストを作成するとします。作成されるデフォルトのディレクトリのリストを提供したいのですが、ロールを使用する際にユーザーがそれらを上書きできるようにしたいと思います。

このような感じでしょうか。

---
- directories:
  - foo
  - bar
  - baz

これを defaults/main.yml または vars/main.yml しかし、どこに入れるべきでしょうか?

どのように解決するのか?

のAnsibleドキュメントを参照してください。 変数の優先順位 がうまくまとめてくれています。

同じ名前の変数が別の場所に複数定義されている場合、一定の順序で勝つ、というものです。

  • 余分な変数 (コマンドラインの -e) は常に勝ちます。
  • インベントリで定義された接続変数 (ansible_ssh_user など) を使用します。
  • それから、他のほとんどのもの"(コマンドラインスイッチ、プレイ中のバー、含まれるバー、役割のバーなど)が来る。
  • そして、インベントリで定義された残りの変数が来る。
  • 次に、システムに関して発見された事実
  • そして、quot;role defaults"は、最もquot;defaulty"で、全てに対して優先順位で負けるものです。

例えば、多くのウェブホストに Tomcat をインストールするために使用する "tomcat" ロールがあるとして、いくつかのホストで異なるバージョンの tomcat が必要で、別のケースでは異なるユーザーとして実行する必要がある場合などです。 このような場合 defaults/main.yml ファイルは、次のようなものです。

tomcat_version: 7.0.56
tomcat_user: tomcat

これらは単なるデフォルト値なので、これらの変数が問題のホストの他のどこにも定義されていない場合に使用されることを意味します。これらの変数に異なる値を指定するために extra-vars やインベントリファイルの facts などで上書きすることができます。

編集:上記のリストはAnsible 1.xのものです。Ansible 2.xではリストが拡張されました。 これまで通り Ansible ドキュメント 2.xの変数の優先順位の詳細については、こちらをご覧ください。