Ansibleには、変数を定義できる場所がいくつかあります:インベントリ、プレイブック、変数ファイルなど。だれかが行った次の観察について説明できますか?
たとえば、インベントリに2つの変数を定義しました。
abc=false
xyz=False
そして、ロール内のこれらの変数のタイプをデバッグするとき...
- debug:
msg: "abc={{ abc | type_debug }} xyz={{ xyz | type_debug }}"
... abc
はunicode
になりますが、xyz
はbool
として解釈されます。
ok: [localhost] => {
"msg": "abc=unicode xyz=bool"
}
ただし、次のように、プレイブックで同じ変数を定義する場合:
vars:
abc: false
xyz: False
...その後、両方の変数がbool
として認識されます。
実稼働環境でプレイブックを実行した後、インベントリで「False」ではなく「false」に設定されているために実行すべきではないものを実行した後、これを困難な方法で実現する必要がありました。したがって、Ansibleがブール値をどのように理解し、変数がどこで/どのように定義されているかに依存する方法について、明確な答えを見つけたいと思います。安全のために、常に大文字のTrue/Falseを常に使用する必要がありますか? YAMLファイル(形式key: value
)のブール値は大文字と小文字を区別しないのに対し、プロパティファイル(形式key=value
)のブール値は大文字と小文字を区別すると言いますか?より深い洞察があれば大歓迎です。
Playbook、vars_files、および YAMLで記述されたインベントリファイル は、最初にYAMLパーサーによって処理されます。 Boolean
タイプとして保存される値のいくつかのエイリアスを許可します:yes
/no
、true
/false
、on
/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
ブール値(true/false)をいくつかの形式で指定することもできます。
create_key: yes needs_agent: no knows_oop: True likes_emacs: TRUE uses_cvs: false
AnsibleがINI形式のインベントリを読み込むと、変数を処理します Python組み込み型 :を使用して
key=value
構文を使用して渡された値は、Pythonリテラル構造(文字列、数字、タプル、リスト、辞書、ブール値、なし)、または文字列として解釈されます。たとえば、var=FALSE
は、FALSE
と等しい文字列を作成します。
指定された値が文字列True
またはFalse
(大文字で始まる)に一致する場合、タイプはブールに設定されます。それ以外の場合、文字列として扱われます(別のタイプに一致しない場合)。
--extra_vars
CLIパラメーターで定義された変数CLIでextra-varsとして渡されるすべての変数は、文字列型です。