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 定义变量的方式非常多,官方文档提供了优先级列表,越往后有优先级越高(后面定义的变量覆盖前面的),当然项目中一般不会用到这么多种方式。
- inventory file or script group vars
- inventory group_vars/all
- playbook group_vars/all
- inventory group_vars/*
- playbook group_vars/*
- inventory file or script host vars
- inventory host_vars/*
- playbook host_vars/*
- host facts / cached set_facts
- play vars
- play vars_prompt
- play vars_files
- role vars (defined in role/vars/main.yml)
- block vars (only for tasks in block)
- task vars (only for the task)
- include_vars
- set_facts / registered vars
- role (and include_role) params
- include params
- extra vars (for example,
-e "user=my_user"
)(always win precedence)