我正在使用剧本来运行我的模块。我怀疑,由于以下原因,我是否可以将公共(public)变量放在剧本之外
- 安全原因,例如用户名和密码
- 通过将全局变量放在 playbook 的公共(public)位置和位置来减少重复代码。
现在我的剧本如下所示:
- hosts: localhost
tasks:
- name: Get all Storage Service Levels
StorageServiceLevelModule: host=<ip> port=<port> user=admin password=<password>
action=get name='my_ssl'
register: jsonResultforSSLs
- name: print the SSL key
debug: msg="{{ jsonResultforSSLs.meta.result.records[0].key}}"
- name: Get all Storage VMs
StorageVMModule: host=<ip> port=<port> user=admin password=<password>
action=get name=my_svm
register: jsonResultforSVMs
我想放
host=<ip> port=<port> user=admin password=<password>
在剧本之外并在我的剧本的所有任务中使用它。我该如何做到这一点?
如果需要任何说明,请告诉我。
最佳答案
您可以为 Inventory 文件或与其相关的子目录中的所有或某些主机指定自己的变量(例如 ./group_vars
)。 Go to this webpage 。您可以在其中看到该目录中的文件示例,该文件必须具有组名称并以 yaml 编写)。 ./group_vars
目录必须与主机文件位于同一目录中。例如,如果您的主机文件位于 ./inventory/hosts
,那么带有变量的文件应该是./inventory/group_vars/<group_name>
。请记住,这些文件中定义的变量仅适用于该组的成员。该目录中文件内容的示例:
---
ip=1.1.1.1
port=420
password='password1' # should be encrypted with Ansible Vault
...
然后你就可以像平常一样使用它们:
- name: Get all Storage VMs
StorageVMModule: host='{{ip}}' port='{{port}}' user=admin action=get name=my_svm
register: jsonResultforSVMs
关于variables - 我可以在 ansible 中将公共(public)变量放在 playbook 之外的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50408097/