pha*_*naz 4 ansible ansible-facts
是否有可能在 Ansible 中取消设置事实(变量)?
以检查失败的方式取消设置is defined。
对于执行决策,我定期使用 来检查条件is defined。但是,可能需要在执行前取消设置这些设置,例如,如果通过 多次使用角色include_role或通过 多次使用任务include_tasks。
是否有特殊的语法,例如使用set_fact模块?
如果我理解正确的话,meta: clear_facts我会负责澄清所有事实,而不能仅限于个别事实。
警告:vars:在被include_*认为include params
看:
\n\n例如,vars:以下内容不是task vars(优先级 17.)。是include params(优先级 21.)。因此,set_facts角色内部的潜在(优先级。19)不会覆盖变量 test_var
- include_role:\n name: test_role\n vars:\n test_var: first run\nRun Code Online (Sandbox Code Playgroud)\napply如果您想为某个角色提供task vars(优先级 17.),请使用
- include_role:\n name: test_role\n apply:\n vars:\n test_var: first run\nRun Code Online (Sandbox Code Playgroud)\n这尚未被记录。
\n问:“是否有可能在 Ansible 中取消设置事实(变量)?”
\n答:不可以。无法在 Ansible 中取消设置变量。相反,可以在不同的范围内定义变量。此类变量不会在特定范围之上定义。请参阅Playbook 关键字。您可以在此范围层次结构中定义变量
\n关于如何解决用例有多种场景:"It may be necessary to unset variables before execution, e.g. if a role is used multiple times via include_role or tasks are used multiple times via include_tasks."
例如创建一个角色
\nshell> tree roles/\nroles/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_role\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tasks\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\nRun Code Online (Sandbox Code Playgroud)\n与单一任务
\nshell> cat roles/test_role/tasks/main.yml \n- debug:\n var: test_var\nRun Code Online (Sandbox Code Playgroud)\n用例 1. 通过 include_role 多次使用一个角色
\n例如,剧本
\n- hosts: localhost\n\n tasks:\n\n - include_role:\n name: test_role\n vars:\n test_var: first run\n\n - include_role:\n name: test_role\n\n - include_role:\n name: test_role\n vars:\n test_var: third run\nRun Code Online (Sandbox Code Playgroud)\n给出(删节)
\n test_var: first run\n test_var: VARIABLE IS NOT DEFINED!\n test_var: third run\nRun Code Online (Sandbox Code Playgroud)\n用例 2. 通过 include_tasks 多次使用任务
\n同样的,下面的剧本给出了相同的结果
\n- hosts: localhost\n\n tasks:\n\n - include_tasks: roles/test_role/tasks/main.yml\n vars:\n test_var: first run\n\n - include_tasks: roles/test_role/tasks/main.yml\n\n - include_tasks: roles/test_role/tasks/main.yml\n vars:\n test_var: third run\nRun Code Online (Sandbox Code Playgroud)\n用例 3. 使用角色
\n下面的剧本也给出了相同的结果
\n- hosts: localhost\n\n roles:\n\n - role: test_role\n test_var: first run\n\n - role: test_role\n\n - role: test_role\n test_var: third run\nRun Code Online (Sandbox Code Playgroud)\n笔记
\n请参阅变量范围
\n最好了解声明空变量时会发生什么。例如,剧本
\n- hosts: localhost\n vars:\n test_var: default_value\n tasks:\n - debug:\n var: test_var\n - set_fact:\n test_var:\n - debug:\n msg: "test_var is defined: {{ test_var is defined }}"\n - debug:\n var: test_var\nRun Code Online (Sandbox Code Playgroud)\n显示(删节)空变量是defined和null。当您将变量显式设置为 null 时,您将收到相同的结果test_var: !!null
TASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var: default_value\n\nTASK [set_fact] *******************************************************************************************\nok: [localhost]\n\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n msg: \'test_var is defined: True\'\n\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var: null\nRun Code Online (Sandbox Code Playgroud)\n - debug:\n var: test_var\n - debug:\n var: test_var|default(\'default when undef\')\nRun Code Online (Sandbox Code Playgroud)\n显示过滤器默认默认情况下不关心该值为空并且不设置该值,因为该变量已定义
\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var: null\n\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var|default(\'default when undef\'): \'\'\nRun Code Online (Sandbox Code Playgroud)\nTrue。例如, - debug:\n var: test_var\n - debug:\n var: test_var|default(\'default when undef or null\', true)\nRun Code Online (Sandbox Code Playgroud)\n给出
\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var: null\n\nTASK [debug] **********************************************************************************************\nok: [localhost] => \n test_var|default(\'default when undef or null\', true): default when undef or null\nRun Code Online (Sandbox Code Playgroud)\n \n
| 归档时间: |
|
| 查看次数: |
5102 次 |
| 最近记录: |