Ansible之Inventory定义
在Ansible中描述主机的默认方法是将它们列在一个文本文件中,这个文本文件叫作inventory文件。Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。这部分一般会
一、Inventory介绍
在Ansible中描述主机的默认方法是将它们列在一个文本文件中,这个文本文件叫作inventory文件。Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。这部分一般会结合 CMDB 资管系统、云计算平台等获取主机信息。此博文主要介绍静态Inventory的配置定义方法。默认的文件路径为 /etc/ansible/hosts。除默认文件外,你还可以同时使用多个 inventory 文件。如果需要使用非默认的Inventory文件,在执行Ansible命令时使用-i参数指定Inventory文件。
二、定义方法
1、基于密码管理
[root@test1 ansible]# vim /etc/ansible/hosts
[test]
test1 ansible_ssh_host=192.168.0.124 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=“123456”
test2 ansible_ssh_host=192.168.0.125 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=“123456”
test3 ansible_ssh_host=192.168.0.126 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=“123456”
2、基于密钥管理
1)、首先生成公钥
[root@test1 ansible]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:e4/VuQ4P5Ux2Ej55r/Mx7pJEueQsvGiHTV6lupobyjE root@test1
The key’s randomart image is:
±–[RSA 2048]----+
| |
| |
| o |
| = + |
| S . = % o|
| . + # *.|
| E…B X *o.|
| . +=oX *ooo|
| o.+=.o.B=.|
±—[SHA256]-----+
2)、将公钥上传到被管理主机
[root@test1 ansible]# ssh-copy-id 192.168.0.124
[root@test1 ansible]# ssh-copy-id 192.168.0.125
[root@test1 ansible]# ssh-copy-id 192.168.0.126
上传公钥到被管理机时需要输入被管理机的账户密码
3)、配置基于密钥管理的inventory文件
[root@test1 ansible]# vim host3
[test]
192.168.0.12[4:6]
#如上方式配置等同于
192.168.0.124
192.168.0.125
192.168.0.126
4)、验证
[root@test1 ansible]# ansible -i /etc/ansible/host3 test -m shell -a “df -hT”
192.168.0.126 | CHANGED | rc=0 >>
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 38G 4.2G 34G 11% /
devtmpfs devtmpfs 471M 0 471M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 51M 436M 11% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 297M 147M 151M 50% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
192.168.0.125 | CHANGED | rc=0 >>
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 38G 4.2G 34G 11% /
devtmpfs devtmpfs 471M 0 471M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 45M 442M 10% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 297M 147M 151M 50% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
192.168.0.124 | CHANGED | rc=0 >>
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 38G 4.4G 34G 12% /
devtmpfs devtmpfs 471M 0 471M 0% /dev
tmpfs tmpfs 487M 124K 487M 1% /dev/shm
tmpfs tmpfs 487M 8.1M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 297M 147M 151M 50% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
三、Inventory行为参数说明
参数 | 默认值 | 参数说明 |
---|---|---|
ansible_ssh_host | 主机名 | ssh目标主机名或者IP |
ansible_ssh_port ssh | 22 | ssh目标端口 |
ansible_ssh_user | root | ssh登录使用的用户名 |
ansible_ssh_pass | none | ssh认证使用的密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥) |
ansible_sudo_pass sudo | none | sudo密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass) |
ansible_sudo_exe | /usr/bin | sudo 命令路径(适用于1.8及以上版本) |
ansible_connection | smart | 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 ‘smart’,‘smart’ 方式会根据是否支持 ControlPersist, 来判断’ssh’ 方式是否可行. |
ansible_ssh_private_key_file | none | ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况. |
ansible_shell_type | sh | 目标系统的shell类型.默认情况下,命令的执行使用 ‘sh’ 语法,可设置为 ‘csh’ 或 ‘fish’. |
ansible_python_interpreter | /usr/bin | 目标主机的 python 路径。适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python。我们不使用 “/usr/bin/env” 机制,因为这要求远程用户的路径设置正确,且要求 “python” 可执行程序名不可为 python以外的名字(实际有可能名为python26)。 |
ansible_*_interpreter | none | 类似ansible_python_interpreter配置的其他语言版 |
四、配置技巧
1、分组配置
方括号[]中是组名,用于对系统进行分类,便于对不同系统进行个别的管理。下面则属于其组的主机,可以是IP或主机名(需要能被DNS解析成IP)。
2、组嵌套
可以把一个组作为另一个组的子成员,以及分配变量给整个组使用。这些变量可以给 /usr/bin/ansible-playbook 使用,但不能给 /usr/bin/ansible 使用。
3、主机和端口连写
如果有主机的SSH端口不是默认的22端口,可以在主机名后面用冒号分隔,指定一个端口。
[DBs]
192.168.0.127:2222
4、设置别名
假设你有一些静态IP地址,希望设置一些别名,但不是在系统的 host 文件中设置,又或者你是通过隧道在连接,那么可以设置如下:
[dbs]
test2 ansible_ssh_host=192.168.0.125 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=“123456”
5、IP连写
当主机为连续地址时支持IP或者字符连写,前提是其他参数一致或者使用密钥登录。
[apps]
192.168.0.12[4:6] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=“123456”
更多推荐
所有评论(0)