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 使用。

变量的类型大致有两种:

  1. Group Vars
[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
  1. 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 — Inventory 清单文件

Ansible 文档译文主机清单文件

Ansible之YAML,Inventory(主机清单)介绍

如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo

如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo