Ansible Inventory 介绍
Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。这部分一般会结合 CMDB 资管系统、云计算平台等获取主机信息。由于主机资源一般会动态的进行增减,而这些系统一般会智能更新。我们可以通过这些工具提供的 API 或者接入库查询等方式返回主机列表。
脚本地址:https://github.com/AlbertCQY/scripts/tree/master/ansible
脚本用法:README.txt
1、脚本用法
bestpay用户 cd /tools/scripts/ansible
python3.6 invscript.py -h
1)、查询某个分组中包含哪些主机,oracle_nj_all为inventory_group.py中的组名
python3.6 invscript.py --group oracle_nj_all
2)、查询所有
python3.6 invscript.py --list
3)、查询某分组主机中主机名,脚本也可以在play-book中使用-i指定inventory
ansible -i invscript.py mysql_nj_all -m shell -a “hostname”
2、更新数据库主机列表,sql中最好对ip进行去除空格并排序,否则可能会有warning
inventory_group.py中格式:
mygrp2就是ansible使用的组名
‘ssh_user':‘root' root用户代表连到目标主机的用户。如果ansible server主机的test用户和目标的root用户有互信,那么ansible脚本在test用户下执行。
例子如下:
mygrp2 = {‘sql':""" select ‘1.1.3.8' as ips union all select ‘1.1.3.112' as ips union all select ‘1.1.3.113' as ips “”", ‘ssh_user':‘root'}
部分脚本内容:
#!/usr/bin/env python #-*- coding: UTF-8 -*- # ========================================================================= """ -- File Name : invscript.py -- Purpose : 从mysql数据中动态获取主机列表,动态inventory,不用维护主机列表 -- Date : 2020/01 -- Author:陈晴阳 Vervisons: -- 20200106 1.0,陈晴阳,实现了动态获取主机列表,按照默认互信方式获取主机信息。 -- 20200116 2.0,陈晴阳,增加--group参数,并统计各个分组主机个数;重构了group_all 所有主机按照各组设置的互信用户来抓信息;增加对IP地址排序功能。 """ # ========================================================================= import argparse import sys import json import settings import inventory_group as invgrp from connect_mysql import Mysql_Conn class DynamicInventory(object): def read_cli(self): parser = argparse.ArgumentParser() parser.add_argument('--host', nargs=1) parser.add_argument('--list', action='store_true') parser.add_argument('--group') self.options = parser.parse_args() def GetItemList(self): list_item = [] for item in dir(invgrp): if not item.startswith("__"): list_item.append(item) return list_item def GetGrpList(self): list_grpinfo = [] list_item = self.GetItemList() for item in list_item: itemcontent = getattr(invgrp, item) tmp_dic = {} tmp_dic[item] = itemcontent list_grpinfo.append(tmp_dic) return list_grpinfo def get_groups(self): hostgroups = self.GetGrpList() #allhost = [] for hostdic in hostgroups:#hostgroup为字典 for hostgroup in hostdic: #获取字典的key self.result[hostgroup] = {} v_sql = hostdic[hostgroup]['sql'] #获取sql v_ssh_user = hostdic[hostgroup]['ssh_user'] # 获取sql hosts = self.connection.execsql(v_sql) #print(hosts) # 构建每个分组 grp_host_list = [host[0] for host in hosts] grp_host_list = sorted(grp_host_list, key=lambda x: (int(x.split('.')[0]), int(x.split('.')[1]), int(x.split('.')[2]))) #排序 self.result[hostgroup]['hosts'] = grp_host_list self.result[hostgroup]['vars'] = {'ansible_ssh_user': v_ssh_user} #构建_meta,注意ip为元组,需要做个小转换ip[0] 需要字符串值 for ip in hosts: tmp_dic = {} tmp_dic['ansible_ssh_host'] = ip[0] self.result['_meta']['hostvars'][ip[0]] = tmp_dic # 构建group_all self.result[self.defaultgroup]['hosts']=[] self.result[self.defaultgroup]['children'] =self.GetItemList() return self.result def get_host(self,ipaddr): ip = '' for i in ipaddr: ip = i data = {'ansible_ssh_host': ip} return data def get_group_hosts(self,grpname): if grpname == 'group_all': allhosts = [] #查询出来所有的主机列表 hostgroups = self.GetGrpList() for hostdic in hostgroups: # hostgroup为字典 for hostgroup in hostdic: # 获取字典的key v_sql = hostdic[hostgroup]['sql'] # 获取sql hosts = self.connection.execsql(v_sql) allhosts.extend([host[0] for host in hosts]) allhosts = set(allhosts) # 去重 allhosts = sorted(allhosts, key=lambda x: (int(x.split('.')[0]), int(x.split('.')[1]), int(x.split('.')[2]))) #排序 cnt = 0 for i in allhosts: print(cnt + 1, i) cnt = cnt + 1 print('Group ' + grpname + ' Total hosts:', cnt) else: txt_grp ='invgrp.'+grpname+"""['sql']""" v_sql = eval(txt_grp) #这里偷懒用了邪恶函数eval hosts = self.connection.execsql(v_sql) cnt = 0 for i in hosts: print(cnt + 1,i[0]) cnt = cnt + 1 print('Group '+grpname+' Total hosts:',cnt) def __init__(self): try: self.connection = Mysql_Conn(settings.my_usr, settings.my_pass, settings.my_ip, settings.my_port, settings.my_db) except Exception as err: print("connect wrong", err) self.defaultgroup = 'group_all' self.options = None self.read_cli() self.result = {} self.result[self.defaultgroup] = {} self.result[self.defaultgroup]['hosts'] = [] self.result[self.defaultgroup]['vars'] = {'ansible_ssh_user': 'bestpay'} self.result['_meta'] = {} self.result['_meta']['hostvars'] = {} if self.options.host: data = self.get_host(self.options.host) print(json.dumps(data,indent=4)) elif self.options.list: data = self.get_groups() print(json.dumps(data,indent=4)) elif self.options.group: data = self.get_group_hosts(self.options.group) else: sys.exit("usage: --list or --host HOSTNAME or --group GROUPNAME") if __name__ == '__main__': DynamicInventory()
总结
以上所述是小编给大家介绍的python3连接mysql获取ansible动态inventory脚本,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]