Ansible — Inventory 清单文件
Posted 范桂飓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible — Inventory 清单文件相关的知识,希望对你有一定的参考价值。
目录
文章目录
Groups 与 Hosts 对象
Inventory 清单文件中主要有两个概念:
- [Group]:在系统级别进行分类,便于对不同的系统进行区别管理。
- Host:实际的一台托管节点,用 hostname 或 IP address 来表示。
Inventory 清单文件描述了这些 Groups 和 Hosts 之间的关系,并且 Groups 和 Hosts 之前是完全解耦的关系。例如:
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
嵌套 Groups
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children]
atlanta
raleigh
Hostname 通配符
生产场景中,通常大量 Hosts 的 hostname 仅仅是 index 不同,此时可以考虑使用 Hostname 通配符。
db-[1:100]-node.example.com
# or
db-[a:f].example.com
Inventory 清单文件的参数说明
- ansible_ssh_host:指示托管节点的 SSH Hostname。
- ansible_ssh_port:指示托管节点的 SSH Port。
- ansible_ssh_user:指示托管节点的 SSH Username。
- ansible_ssh_pass:指示托管节点的 SSH Password(明文密码不安全,推荐使用 Public Key 认证)。
- ansible_sudo_pass:指示托管节点的 SSH Sudo User 的 Password(明文密码不安全,推荐使用 Public Key 认证)。
- ansible_sudo_exe:指示托管节点的 sudo CLI Path(new in version 1.8)。
- ansible_connection:远程连接类型,枚举:local、ssh、paramiko。
- ansible_ssh_private_key_file:指示管理节点 SSH 免密登陆托管节点的私钥文件路径。
- ansible_shell_type:指示托管节点的 Shell 类型,枚举:sh、csh、fish。
- ansible_python_interpreter:指示托管节点的 Python 解析器的路径(e.g. /usr/bin/python),适用于系统中存在多个 Python 版本的情况。
Groups 与 Hosts 变量
Ansible 提供了变量机制,用于完成自动化的配置工作。变量的内容体现为 key=value,这些键值对会在 /usr/bin/ansible-playbook 中被使用,但不能给 /usr/bin/ansible 使用。
变量的类型大致有两种:
- Group Vars
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
- Host Vars
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
值得注意的是,若在 Inventory 清单文件中保存所有的变量并不明智,一个更好的方式是将变量保存在外部的若干个文件中,然后再 “关联” 到 Inventory。在 Ansible 1.4 及以上版本,支持了通过 group_vars 和 host_vars 变量文件来组织变量。
group_vars 和 host_vars 变量文件
NOTE:Inventory 清单文件采用了 .ini 格式,而这些外部的变量文件采用 YAML 格式。
假设:一个 Host,hostname 为 foosball,同时属于 raleigh 和 webservers Group。那么,我们可以这么组织 foosball 的变量文件:
/etc/ansible/group_vars/raleigh
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball
再假设:希望 raleigh Group 中的所有 Hosts 都使用同一个 NTP Server、DB Server。那么,我们可以这么编写 raleigh Group Vars:
---
ntp_server: acme.example.org
database_server: storage.example.org
更加一步的,我们可以为一个 Group 或一个 Host 创建同名的 Dir,再该 Dir 下再细分为不同的 files,以此更细粒度的组织 Vars:
/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings
可见,Inventory 清单文件 与 group_vars、host_vars 变量文件/目录之间的 “关联” 是通过 “名称匹配” 来完成的。
以上是关于Ansible — Inventory 清单文件的主要内容,如果未能解决你的问题,请参考以下文章
Ansible---Inventory(主机清单)与YAML文件
Ansible之YAML,Inventory(主机清单)介绍