Ansible 学习笔记(四)

如果设备少,可以把所有设备写在一个文件,像前面的 host.ini。但是如果设备很多,并且分散在多个节点,那么最好拆分成多个目录文件来管理。

假设我有开发环境和生产环境,生产环境在北京/厦门各有一个节点,那么 inventory 可以使用下面的目录结构分开,

inventories
├── dev
│   └── host.ini
└── prod
    ├── bj
    │   └── host.ini
    └── xm
        └── host.ini

同时 ansible.cfg 配置下 inventroy 最上层目录,

inventory = ./inventories/

这样,如果我要对厦门的设备操作,可以指定厦门的 host.ini

$ ansible-playbook playbook-xxx.yml -i prod/xm/host.ini

inventory 文件也可以跟 playbook 一样,使用 YAML 格式

---
web:
  hosts:
    192.168.0.100: { app_id: 1 }
    192.168.0.101: { app_id: 2 }

db:
  hosts:
    192.168.0.110: 
    192.168.0.111:
    192.168.0.112:

Inventory variables

在上一篇讲到 role 时提到,可以在 role 的目录下创建一个 defaults 目录,在该目录下设置 role 专属的变量,比如软件版本。

同样,可以在 inventory 的目录中创建 group_vars 目录来设置 inventory 专属的变量,比如时区,不同节点可能用不同时区。

inventories
├── dev
│   └── inventory.yml
└── prod
    ├── bj
    │   └── inventory.yml
    └── xm
        ├── group_vars
        │   ├── db.yml
        │   └── web.yml
        └── inventory.yml

Ansible 定义变量的方式非常多,官方文档提供了优先级列表,越往后有优先级越高(后面定义的变量覆盖前面的),当然项目中一般不会用到这么多种方式。

  1. inventory file or script group vars
  2. inventory group_vars/all
  3. playbook group_vars/all
  4. inventory group_vars/*
  5. playbook group_vars/*
  6. inventory file or script host vars
  7. inventory host_vars/*
  8. playbook host_vars/*
  9. host facts / cached set_facts
  10. play vars
  11. play vars_prompt
  12. play vars_files
  13. role vars (defined in role/vars/main.yml)
  14. block vars (only for tasks in block)
  15. task vars (only for the task)
  16. include_vars
  17. set_facts / registered vars
  18. role (and include_role) params
  19. include params
  20. extra vars (for example, -e "user=my_user")(always win precedence)
© 2017 - 2023 · 记事本 · Theme Simpleness Powered by Hugo ·