ansible inventory 主机清单配置

文章目录

    • 环境介绍
      • ansible ssh配置
        • 操作
        • 测试
      • /etc/hosts 配置
    • Inventory文件
      • 主机与组
      • 主机变量、组变量
      • 把一个组变成另一个组的子成员
      • 变量太多了,不好管理怎么办?来,分文件定义主机变量和组变量
        • 操作

 

环境介绍

为了练习方便,本次使用一台虚拟机,多个主机名模拟多台虚拟机操作1,省事省力,方便学习。

  • 操作系统 centos7
  • 虚拟机数量 1台
  • 使用root账户进行操作

ansible ssh配置

操作

# 若已经配置,则无须再次执行此处命令
[root@master ~]# ssh-keygen
[root@master ~]# cd .ssh/
[root@master .ssh]# cat id_rsa.pub >> authorized_keys

测试

ssh localhost
  •  

/etc/hosts 配置

[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.176.200 master test1 test2 test3

Inventory文件

Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts。简单理解/etc/ansible/hosts就是Inventory文件。目的就是存储主机与组之间的关系。

有点懵?主机我可能知道,但什么是组,靠什么定义组

主机与组

主机: /etc/hosts 配置的主机名,通过DNS获取的域名,都可称为主机
组:一类主机的组合

[root@master ansible]# cat /etc/ansible/hosts
master #主机,此处和/etc/hosts内容对应
test1

[test] # 主机组,包含一系列主机,可以附加端口号的
test1:22
test2

[test_other] # test2 机属于 test组也属于test_other组
test2
test3

方括号[]中是组名,用于对系统进行分类,便于对不同系统进行个别的管理。一个主机可以属于多个组哦

如果有主机的SSH端口不是标准的22端口,可在主机名之后加上端口号,用冒号分隔。

端口号不是默认设置时,可明确的表示为:

master:5309

假设你有一些静态IP地址,希望设置一些别名,但不是在系统的 host 文件中设置,又或者你是通过隧道在连接,那么可以设置如下:

testhost ansible_ssh_host=192.168.0.200 ansible_ssh_port=22

主机变量、组变量

变量:变量可分为系统变量2和自定义变量3
系统变量说明

ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
      默认的 ssh 用户名

ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)

ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.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
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

主机变量:就是一个主机可携带其他参数,而这些参数可以给playbooks使用
组变量:一个组下的变量可供给这个组的全部成员使用,目的就是减少重复配置

[root@master ansible]# cat  hosts
master
test1
test_local ansible_ssh_host=192.168.0.200

[test]
test1
test2

[test_other]
test2
test3


[test:vars] # 组变量标识:vars,要设置组变量这个标志是必须的
http_port=2222 # test组内的所有主机都可以拿到此变量
max_proc=20# test组内的所有主机都可以拿到此变量

把一个组变成另一个组的子成员

[root@master ansible]# cat  hosts
master
test1
test_local ansible_ssh_host=192.168.0.200

[test]
test1
test2

[test_other]
test2
test3


[test:vars]
http_port=2222
max_proc=20

# 在这里 test_all = test + test_other 是等于关系哦
[test_all:children] # test_all组包含 test组及test_other组的所有成员
test
test_other

变量太多了,不好管理怎么办?来,分文件定义主机变量和组变量

不同于 inventory 文件/etc/ansible/hosts(INI 格式),这些独立(子)文件的格式为 YAML

操作

  1. 创建自定义变量文件目录
# 创建默认目录
[root@master ansible]# mkdir -p /etc/ansible/group_vars
[root@master ansible]# mkdir -p /etc/ansible/host_vars
  1. 为主机和组各创建一个yaml格式文件
# 主机变量,对应test1
[root@master host_vars]# cat /etc/ansible/host_vars/test1
---
ntp_server: 192.168.202.111

# 组变量,对应[test]组
[root@master group_vars]# cat /etc/ansible/group_vars/test
---
http_port: 22
database: localhost

还有更进一步的运用,你可以为一个主机,或一个,创建一个目录,目录名就是主机名或组名.目录中的可以创建多个文件, 文件中的变量都会被读取为主机或组的变量,支持版本
Ansible1.4+

# 主机变量,对应test1
[root@master host_vars]# cat /etc/ansible/host_vars/test1/config
---
ntp_server: 192.168.202.111

# 组变量,对应[test]组
[root@master group_vars]# cat /etc/ansible/group_vars/test/config
---
http_port: 22
database: localhost

Tip: Ansible 1.2 及以上的版本中,group_vars/ 和 host_vars/ 目录可放在 inventory 目录下,或是 playbook 目录下. 如果两个目录下都存在,那么 playbook 目录下的配置会覆盖 inventory 目录的配置.


  1. 即一台虚拟机的一个ip地址对应多个hostname ↩︎

  2. 系统变量像前面的ansible_ssh_host等ansible已经占有的变量 ↩︎

  3. 自定义变量就是自己定义的变量,并没有其他要求 ↩︎

你可能感兴趣的:(ansible inventory 主机清单配置)