variables - 我可以在 ansible 中将公共(public)变量放在 playbook 之外的地方

标签 variables ansible

我正在使用剧本来运行我的模块。我怀疑,由于以下原因,我是否可以将公共(public)变量放在剧本之外

  1. 安全原因,例如用户名和密码
  2. 通过将全局变量放在 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/

相关文章:

python - 将变量更新为多处理 python

javascript - 在 Javascript 中使用带有 "apply"的局部变量

python字典更新方法

jenkins - 如何使用 Ansible 重新启动 Jenkins 并等待它回来?

node.js - Ansible 无法运行全局 npm 包

json - 以正确的 JSON 格式将 ansible 任务的输出写入文件

php - 在javascript函数中传递的两个php动态变量语法

excel - 在 VBA (Excel) 中访问全局变量

docker - Ansible 任务超时最大长度

amazon-ec2 - 如何使用 Ansible ec2_vpc_route_table 将路由添加到 VPC 的默认/主路由表?