Ansible 分离主机、group_vars 和 host_vars

标签 ansible yaml ansible-inventory

我需要将一些 YAML 格式的文件从一个“大”yml 更改为几个较小的文件。不幸的是,我不知道哪一部分属于哪里。例如,我有以下 .yml:

all:
  hosts:
    station01:
      dns_name: localhost
      ansible_host: localhost
    work01:
      dns_name: X.X.X.X
      ansible_host: Y.Y.Y.Y
  vars:
    yum_proxy: false
    zabbix_proxy_ip: A.A.A.A
    yum_proxy_ip:
    dns_servers:
      - B.B.B.B
      - C.C.C.C
    timezone: XXX
    ntp_servers:
      - D.D.D.D
    disable_firewall_tasks: true

  children:
    deploy:
      hosts:
        station01:
    linux:
      hosts:
        work01:
    work_users:
      hosts:
        work01:
      vars:
        users:
          - john: user
          - mike: user

我相信主机文件应该如下所示:

all:
  hosts:
    station01
    work01

  children:
    deploy:
      hosts:
        station01:
    linux:
      hosts:
        work01:
    work_users:
      hosts:
        work01:

我猜group_vars“all.yml”看起来像这样:

---
all:
  yum_proxy: false
  zabbix_proxy_ip: A.A.A.A
  yum_proxy_ip:
  dns_servers:
    - B.B.B.B
    - C.C.C.C
  timezone: XXX
  ntp_servers:
    - D.D.D.D
  disable_firewall_tasks: true

这就是问题开始的地方。我不知道将“用户:”放在哪里。是否应该在分配给一台主机的 host_vars“work01.yml”中,如下所示:

---
work01:
  dns_name: X.X.X.X
  ansible_host: Y.Y.Y.Y
  users:
    - john: user
    - mike: user

或者它应该包含在名为“work_users.yml”的group_vars 文件中吗?

---
users:
  - john: user
  - mike: user

文件 host_vars 和 group_vars 应该是什么样子?任何形式的帮助将不胜感激。

最佳答案

问:host_vars 和 group_vars 文件应该是什么样子?

答:如何命名和组织目录和文件有更多选项。请参阅Organizing host and group variables .

以相应组和主机名命名的文件

下面是将变量放入以相应组和主机名命名的文件中的示例

shell> cat group_vars/all.yml
---
yum_proxy: false
zabbix_proxy_ip: A.A.A.A
yum_proxy_ip:
dns_servers:
  - B.B.B.B
  - C.C.C.C
timezone: XXX
ntp_servers:
  - D.D.D.D
disable_firewall_tasks: true
shell> cat group_vars/work_users.yml
---
users:
  - john: user
  - mike: user
shell> cat host_vars/work01.yml
---
dns_name: X.X.X.X
ansible_host: Y.Y.Y.Y
shell> cat host_vars/station01.yml
---
dns_name: localhost
ansible_host: localhost

目录内的文件以相应的组和主机名命名

下一个选项是将变量放入以相应组和主机名命名的目录中的文件中

shell> cat group_vars/all/network.yml
---
yum_proxy: false
zabbix_proxy_ip: A.A.A.A
yum_proxy_ip:
dns_servers:
  - B.B.B.B
  - C.C.C.C
timezone: XXX
ntp_servers:
  - D.D.D.D
disable_firewall_tasks: true
shell> cat group_vars/work_users/users.yml
---
users:
  - john: user
  - mike: user
shell> cat host_vars/work01/network.yml
---
dns_name: X.X.X.X
ansible_host: Y.Y.Y.Y
shell> cat host_vars/station01/network.yml
---
dns_name: localhost
ansible_host: localhost

关于Ansible 分离主机、group_vars 和 host_vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64466429/

相关文章:

ansible - 无法将属性与数字进行比较。错误 : "not supported between instances of ' AnsibleUnsafeText' and 'int' "

grails - 如何在 grails yml config 中访问环境变量?

amazon-web-services - 创建 CloudFormation 模板以创建多个 Glue 连接

ansible - 如何根据条件打破 with_items 循环

ansible - (Ansible) 如何在模板/Jinja2 中获取一组主机的所有库存变量作为列表?

amazon-web-services - 如何在 Ansible 中定义具有一系列端口的监听器的 AWS ELB

Ansible 检查特定目录是否存在,如果不存在则创建它

Ansible with_subelements 默认值

yaml科学计数法语法

ansible - 结合理解 ansible 变量和带有子操作的 Vault