ansible动态inventory
来源:互联网 发布:js定义map 编辑:程序博客网 时间:2024/06/06 04:49
ansible动态investment,主机列表从ansible获取,只从数据库取两个字段,tag和外网ip
表结构:
+—————-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+—————-+————–+——+—–+———+——-+
| instance_id | varchar(40) | NO | PRI | NULL | |
| region_name | varchar(30) | NO | | NULL | |
| placement | varchar(30) | NO | | NULL | |
| image_type | varchar(20) | NO | | NULL | |
| tag_name | varchar(50) | NO | | NULL | |
| group_id | varchar(30) | NO | | NULL | |
| root_volume_id | varchar(40) | NO | | NULL | |
| data_volume_id | varchar(40) | YES | | NULL | |
| public_addr | varchar(25) | NO | | NULL | |
| private_addr | varchar(25) | NO | | NULL | |
| instance_type | varchar(15) | YES | | NULL | |
| description | varchar(100) | YES | | NULL | |
+—————-+————–+——+—–+———+——-+
获取动态inventory:
#!/usr/bin/python#-*- coding:utf-8 -*-import sysimport MySQLdbimport json#db hostdbhost = 'XXX'dbport = 3306dbname = 'automatic'dbuser = 'root'password = 'XXX'def hostinfo(conn): cur = conn.cursor() #cur.execute("select `tag_name`,`tag_name` from aws_instance where `tag_name`=%s", (name)) cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_SG_T' order by `tag_name`") testHost = [] for row in cur.fetchall(): testHost.append(row[0]) cur.close()#SG host---分组,按我这里的实际情况需要将主机分为TEST,SG,FK,OR这几组 cur = conn.cursor() cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_SG_' order by `tag_name`") sgHost = [] for row in cur.fetchall(): sgHost.append(row[0]) cur.close()#FK host cur = conn.cursor() cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_FK_' order by `tag_name`") fkHost = [] for row in cur.fetchall(): fkHost.append(row[0]) cur.close()#OR host cur = conn.cursor() cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_OR_' order by `tag_name`") orHost = [] for row in cur.fetchall(): orHost.append(row[0]) cur.close()#SP host cur = conn.cursor() cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_SP_' order by `tag_name`") spHost = [] for row in cur.fetchall(): spHost.append(row[0]) cur.close()#SL host cur = conn.cursor() cur.execute("select `tag_name` from aws_instance where tag_name REGEXP '_SL_' order by `tag_name`") slHost = [] for row in cur.fetchall(): slHost.append(row[0]) cur.close()#vars-ssh_host,除了分组,还需要指定每个tag的ansible_ssh_host cur = conn.cursor() cur.execute("select `tag_name`,`public_addr` from aws_instance order by `tag_name`") varInfo = {} for row in cur.fetchall(): varInfo[row[0]] = {'ansible_ssh_host':row[1]} cur.close() varHost = {'_meta':{'hostvars':varInfo}}#分组,我这里还定义了变量region,我自己需要用到 TESTGroup = {'hosts':testHost,'vars':{'region':'t'}} SGGroup = {'hosts':sgHost,'vars':{'region':'sg'}} FKGroup = {'hosts':fkHost,'vars':{'region':'fk'}} ORGroup = {'hosts':orHost,'vars':{'region':'or'}} SLGroup = {'hosts':slHost} SPGroup = {'hosts':spHost} ALL = {'children':['TEST','SG','FK','OR','SP','SL']} hostdata = {'TEST':TESTGroup,SG:SGGroup,FK:FKGroup,OR:ORGroup,SP:SPGroup,SL:{'hosts':slHost},'_meta':{'hostvars':varInfo},'all':ALL} print json.dumps(hostdata, indent=4)if __name__ == '__main__': con = MySQLdb.connect(host=dbhost, port=dbport, user=dbuser, passwd=password, db=dbname) hostinfo(con)
效果如下:
以上json转化为ansible的主机列表yaml就类似这样:
[all:children]
TEST
SG
FK
OR
SP
[FK:vars]
region=fk
[SG:vars]
region=sg
[OR:vars]
region=or
[TEST:vars]
region=t
[TEST]
host1 ansible_ssh_host=ip1
host2 ansible_ssh_host=ip2
host3 ansible_ssh_host=ip3
…
[SG]
host1 ansible_ssh_host=ip1
host2 ansible_ssh_host=ip2
host3 ansible_ssh_host=ip3
…
直接调用动态inventory的py脚本,通过ansible-playbook -i指定py文件即可。
ansible-playbook -i getinsfromdb.py test.yaml --list-hosts
- ansible 动态生成Inventory
- ansible动态inventory
- ansible动态inventory获取主机列表
- [ansible] Ansible Inventory Manager
- ansible之inventory文件
- ansible inventory.py 脚本
- ansible inventory文件 定义host
- ansible的inventory文件含义
- ansible——inventory文件
- ansible小结(三)Inventory与Patterns
- ansible小结(五)Dynamic Inventory
- Ansible之 Inventory 资源清单介绍
- Ansible之 Inventory 资源清单介绍
- Ansible之 Inventory 资源清单介绍
- Ansible之 Inventory 资源清单介绍
- Ansible之 Inventory 资源清单介绍
- Ansible之 Inventory 资源清单介绍
- Ansible 系列之 Inventory 资源清单介绍
- 1046. 划拳(15)--Python
- 实验三 linux文件管理
- CodeForces 895B XK Segments
- project Eulert 学习笔记 之 problem 29
- lua实现跨域请求(Nginx)
- ansible动态inventory
- HttpClient4.5 简单入门实例(一)
- 网络服务
- 生成任意内容任意类型的文件
- C语言学习之%*d的应用
- 关于模版重载函数函数命名冲突的解决方案
- Android的supportV7中默认按钮和选中框的颜色设置
- python用的比较多的字符串处理函数
- 最大子矩阵和