web-dev-qa-db-ja.com

Ansibleはブール変数をどの程度正確に解析しますか?

Ansibleには、変数を定義できる場所がいくつかあります:インベントリ、プレイブック、変数ファイルなど。だれかが行った次の観察について説明できますか?

  1. インベントリでブール変数を定義するときは、大文字にする必要があります(つまり、True/False)。
  2. YAML形式のファイル(プレイブック、ロールなど)では、True/Falseとtrue/falseの両方がブール値として解釈されます。

たとえば、インベントリに2つの変数を定義しました。

abc=false
xyz=False

そして、ロール内のこれらの変数のタイプをデバッグするとき...

- debug:
    msg: "abc={{ abc | type_debug }}  xyz={{ xyz | type_debug }}"

... abcunicodeになりますが、xyzboolとして解釈されます。

ok: [localhost] => {
    "msg": "abc=unicode  xyz=bool"
}

ただし、次のように、プレイブックで同じ変数を定義する場合:

  vars:
    abc: false
    xyz: False

...その後、両方の変数がboolとして認識されます。

実稼働環境でプレイブックを実行した後、インベントリで「False」ではなく「false」に設定されているために実行すべきではないものを実行した後、これを困難な方法で実現する必要がありました。したがって、Ansibleがブール値をどのように理解し、変数がどこで/どのように定義されているかに依存する方法について、明確な答えを見つけたいと思います。安全のために、常に大文字のTrue/Falseを常に使用する必要がありますか? YAMLファイル(形式key: value)のブール値は大文字と小文字を区別しないのに対し、プロパティファイル(形式key=value)のブール値は大文字と小文字を区別すると言いますか?より深い洞察があれば大歓迎です。

15
dokaspar

YAMLファイルで定義されている変数(プレイブック、vars_files、YAML形式のインベントリ)


YAMLの原則

Playbook、vars_files、および YAMLで記述されたインベントリファイル は、最初にYAMLパーサーによって処理されます。 Booleanタイプとして保存される値のいくつかのエイリアスを許可します:yes/notrue/falseon/off、いくつかのケースで定義:true/True/TRUE(したがって、大文字と小文字を完全に区別しません)。

YAML定義 可能な値を次のように指定します:

y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

Ansible docsが確認

ブール値(true/false)をいくつかの形式で指定することもできます。

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false


INI形式のインベントリファイルで定義されている変数


Pythonの原則

AnsibleがINI形式のインベントリを読み込むと、変数を処理します Python組み込み型 :を使用して

key=value構文を使用して渡された値は、Pythonリテラル構造(文字列、数字、タプル、リスト、辞書、ブール値、なし)、または文字列として解釈されます。たとえば、var=FALSEは、FALSEと等しい文字列を作成します。

指定された値が文字列TrueまたはFalse(大文字で始まる)に一致する場合、タイプはブールに設定されます。それ以外の場合、文字列として扱われます(別のタイプに一致しない場合)。



--extra_vars CLIパラメーターで定義された変数


すべての文字列

CLIでextra-varsとして渡されるすべての変数は、文字列型です。

28
techraf