ansible定义主机组格式
# 单个主机ip 和这个主机的 ssh 密码
172.16.153.129 ansible_ssh_pass='ansible'
# 单个主机,指定 SSH 端口
badwolf.example.com:5309
# 也可以使用变量来指定,其中 jumper 是这个主机的别名,可以使用这个别名对其操作
jumper ansible_port=5555 ansible_host=192.0.2.50
# 主机名或者FQDN,主机名和 FQDN 必须要可以被控制主机解析
ansible
# 定义了一个 openstack 组,成员 ip 是 192.168.2.10,20,30 和 40
[openstack]
192.168.2.[10:40]
# 定义一个组,成员192.168.2.20,21,22
[computes]
192.168.2.[20:22]
# 定义一个组的变量
[openstack:vars]
ansible_ssh_pass='ansible'
# openstack组下面有个子组,子组名叫 computes,注意这个组必须在此文件中已被定义
[openstack:children]
computes
使用多个Inventory文件
注意:该Inventory文件的后缀名只能是:空、.yml、.ymal、.json
[ansible@ansible ~]$ cat /etc/ansible/Inventory/openstack
[web]
172.17.0.4
172.17.0.5
172.17.0.6
[ansible@ansible ~]$ cat /etc/ansible/Inventory/hosts.yml
[nginx]
172.20.0.5
ansible.cfg
[defaults]
# some basic default values...
inventory = /etc/ansible/Inventory
验证
bash-4.2# ansible nginx --list-hosts
hosts (1):
172.20.0.5
bash-4.2# ansible web --list-hosts
hosts (3):
172.17.0.4
172.17.0.5
172.17.0.6
动态Inventory
#动态获取主机组信息,主机组名及包含的IP
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
import argparse
def lists():
"""
indent 定义输出时的格式缩进的空格数
"""
dic = {}
host_list = [ '192.168.2.{}'.format(str(i) ) for i in range(20,23) ]
hosts_dict = {'hosts': host_list}
dic['openstack'] = hosts_dict
return json.dumps(dic,indent=4)
def hosts(name):
dic = {'ansibl_ssh_pass': '12345'}
return json.dumps(dic)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--list', help='host list', action='store_true')
parser.add_argument('-H', '--host', help='hosts vars')
args = vars(parser.parse_args())
if args['list']:
print( lists() )
elif args['host']:
print( hosts(args['host']) )
else:
parser.print_help()
pwd
/etc/ansible
chmod 655 host.py
ansible.cfg
[defaults]
# some basic default values...
inventory = /etc/ansible/host.py
验证
bash-4.2# ansible openstack --list-hosts
hosts (3):
192.168.2.20
192.168.2.21
192.168.2.22
使用动静结合的主机组
以.orig, .bak, .ini, .cfg, .retry, .pyc, .pyo为结尾的文件被忽略
ansible.cfg
[defaults]
# some basic default values...
inventory = /etc/ansible/Inventory
静态主机组为第一个实验所使用的,动态主机组为第二个实验用的,将所有Inventory文件移动到Inventory目录中,
验证
bash-4.2# ansible web --list-hosts
hosts (3):
172.17.0.4
172.17.0.5
172.17.0.6
bash-4.2# ansible openstack --list-hosts
hosts (3):
192.168.2.20
192.168.2.21
192.168.2.22
网友评论