Ansible
Ansible:如果滿足某個條件,則有條件地在 vars 文件中定義變數
根據定義到 group_vars 中的變數的值(True/False),我試圖在 vars 文件中定義一些變數。它們的值取決於組 var 的值。
我目前的 var 文件如下所示:
{% if my_group_var %} test: var1: value var2: value ... varn: value {% else %} test: var1: other_value var2: other_value ... varn: other_value {% endif %}
對於我的每個角色,我都在使用一個定義在這個文件中的變數。
我的測試劇本如下所示:
- name: blabla hosts: blabla vars_files: - <path>/test_vars.yml roles: blabla
執行劇本後我收到的錯誤是:
{% if my_group_var %} ^ here exception type: <class 'yaml.scanner.ScannerError'> exception: while scanning for the next token found character that cannot start any token in "<unicode string>"
我在這裡做一些愚蠢的事情還是甚至不支持?我試圖找到另一種定義這些變數的方法(我有很多),但我沒有設法在這裡獲得一些功能。有什麼建議麼?
Ansible 允許以下形式之一有條件地定義變數:
test: var1: "{% if my_group_var %}value{% else %}other_value{% endif %}" var2: "{{'value' if (my_group_var) else 'other_value'}}"
將上述語法與 vars 查找相結合,我們可以載入複雜的 vars(在本例中為 map):
test_value_when_my_group_var_is_true: var1: value var2: value test_value_when_my_group_var_is_false: var1: other_value var2: other_value test: "{{ lookup('vars','test_value_when_my_group_var_is_true') if (my_group_var) else lookup('vars','test_value_when_my_group_var_is_false')}}"
還有另一種使用 vars 查找進行條件樹載入的方法。當您需要實現案例邏輯時,這種方式很方便(即條件變數有兩個以上的可能值):
test_value_when_my_group_var_is_foo: var1: value var2: value test_value_when_my_group_var_is_bar: var1: other_value var2: other_value test_value_when_my_group_var_is_baz: var1: yet_another_value var2: yet_another_value test: "{{ lookup('vars','test_value_when_my_group_var_is_' + my_group_var) }}"
我不認為你可以,我通常創建單獨的文件來保存條件變數集合併使用
when
子句將它們包含在特定條件下:- include_vars: test_environment_vars.yml when: global_platform == "test" - include_vars: staging_environment_vars.yml when: global_platform == "staging" - include_vars: prod_environment_vars.yml when: - global_platform != "test" - global_platform != "staging"