# :-: Inventory
[TOC]
## Inventory文件
Inventory 是用来记录被纳管主机的文件,它的默认路径一般为`/etc/ansible/hosts`
</br>
</br>
</br>
## 主机与组
编辑`/etc/ansible/hosts`文件
```
host-1
192.168.1.2
[group-1] //组名
192.168.1.[10:20]
web-[01:50]-server
db-[a:f]-server
// 可以使用这种方式简写可以定义范围内的主机
[group-2]
test-host ansible_ssh_host=192.168.1.50
// 通过这种方式可以定义一个别名( 这个别名可以不在/etc/hosts 文件中)
[group-3]
// 指定远程连接的端口、用户名、密码、sudo时的密码
192.168.1.3 ansible_ssh_port=22 ansible_ssh_user=zwh ansible_ssh_pass='zwh' ansible_sudo_pass='zwh'
[group-4]
// 设置连接方式
192.168.1.4 ansible_connection=ssh ansible_ssh_user=zwh
192.168.15 ansible_connection=local ansible_ssh_user=zwh
```
## 设置变量
#### 给主机设置变量
```
[test]
host1 http_port=80 var1=88 var2=888
host2 http_port=8080 va1=99 var2=999
```
#### 给组设置变量
```
[test]
host1
host2
[test:vars]
http_port=80
var1=88
var2=888
```
## 把一个组设置为另一个组的子成员
> 子成员的变成可以通过命令`/usr/bin/ansible-playbook` 使用
> 但是不能给 `/usr/bin/ansible` 使用
```
[group-1]
host-1
host-2
[group-2]
host-3
host-4
[group-3:children] //group-3设置包含 group-1组 和 group-2组
group-1
group-2
[group-3:vars]
var1=a
var2=b
[group-4:children]
group-3
host-5
host-6
```
## 分文件定义 Host 和 Group 变量
当有很多个变量的时候,可以将这些变量分开不同的文件来存放,但是这些文件的格式应该是
</n>
假设 Inventory 文件还是在 `/etc/ansible/hosts` 文件中,其中有一个叫做`host-1`主机
这个`host-1` 主机分别属于`group-1`、`group-2`、`group-3` 三个组,则可以用下列的方式为这三个组分别设置组变量
```
/etc/ansible/group_vars/group-1
/etc/ansible/group_vars/group-2
/etc/ansible/group_vars/group-3
```
其中`/etc/ansible/group_vars/group-1`的文件类似下面这样的 yaml 文件
```
---
var_1: value-1
var_2: value-2
```
> 可以为一个主机,或一个组,创建一个目录,目录名就是主机名或组名
> 目录中的可以创建多个文件,文件中的变量都会被读取为主机或组的变量
比如一个 `web-server` 组分为 `apache` 和 `database` 两类变量(方便分类管理变量):
```
/etc/ansible/group_vars/group-1/web
/etc/ansible/group_vars/group-1/database
```
在 `web-server` 组里的主机都能访问所有的变量
## Inventory 文件参数说明
```
ansible_ssh_host
将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
ssh端口号.如果不是默认的端口号,通过此变量设置.
ansibl_ssh_user
默认的 ssh 用户名
ansible_ssh_pass
ssh 密码(这种方式并不安全,强烈建议使用--ask-pass或 SSH 密钥)
ansible_sudo_pass
sudo 密码(这种方式并不安全,我们强烈建议使用--ask-sudo-pass)
ansible_sudo_exe
sudo 命令路径(适用于1.8及以上版本)
ansible_connection
与主机的连接类型.比如:local, ssh 或者 paramiko.Ansible1.2以前默认使用 paramiko.1.2以后默认使用'smart','smart'方式会根据是否支持ControlPersist,来判断'ssh'方式是否可行.
ansible_ssh_private_key_file
ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
目标系统的shell类型.默认情况下,命令的执行使用'sh'语法,可设置为'csh'或'fish'.
ansible_python_interpreter
目标主机的 python 路径.适用于的情况:系统中有多个Python,或者命令路径不是"/usr/bin/python",比如 *BSD,或者/usr/bin/python
```
