MMA*_*MMA 15 ansible ansible-playbook
有没有办法销毁 Ansible 中的变量?
实际上,我在各个包的所有角色中都使用了一个 {{version}} 变量。当我运行多个角色时,一个角色的版本值会传递给另一个角色 - 这是因为对于某些角色,我没有提供版本值,以便它可以安装可用于相应 m/c 的该软件包的默认版本,例如 ubuntu/红帽等
这是我的角色模板。来自 mysql 的 {{version}} 值被传递给 rabbitmq。
roles:
- { role: mysql }
- { role: rabbitmq}
Run Code Online (Sandbox Code Playgroud)
如果我可以在每个角色中销毁/删除版本的值,我相信它应该可以解决问题。
Hen*_*gel 15
正如已经指出的那样,在 Ansible 中无法取消设置变量。
通过为变量名称添加前缀来避免这种情况,例如rabbitmq_version
等等。恕我直言,这是一个最佳实践。
除了避免您遇到的情况外,这还将使您的host_vars
和group_vars
.
不,无法在 Ansible 中取消设置变量(顶层)。
您唯一可以做的就是创建一个字典并将变量作为键存储在该字典中。清除“父”字典本质上将使dictionary.key is defined
条件表达式起作用。
小智 7
要取消设置变量,请尝试运行 set_fact 任务将变量设置为 null,例如:
- name: Unset variables
set_fact:
version:
other_var:
Run Code Online (Sandbox Code Playgroud)
如果您有一个完整的字典,可以用 覆盖 dict null
,例如:
- name: Set dict
set_fact:
dict:
rabbitmq_version: 1
other_version: 2
- name: override dict to null
set_fact:
dict:
Run Code Online (Sandbox Code Playgroud)
就像other_var:
是"other_var": null
在 JSON 中一样。这就是您如何在 Ansible 中取消设置变量的方法。祝你今天过得愉快。
小智 6
您应该使用每个角色的变量来代替:
roles:
- role: mysql
version: mysql_version
- role: rabbitmq
version: rabbitmq_version
Run Code Online (Sandbox Code Playgroud)
或者
roles:
- { role: mysql, version: mysql_version }
- { role: rabbitmq, version: rabbitmq_version }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26057 次 |
最近记录: |