从CMDB动态获取服务器列表,按照Ansible的约定
目标效果:
[root@ansible ~]# python query.py --list
{
"test": [
"10.1.2.1",
"10.1.2.2"
],
"www": [
"1.2.3.4",
"5.6.7.8"
]
}
[root@ansible ~]# python query.py --host 5.6.7.8
{
"ansible_group": "www",
"ansible_host": "5.6.7.8"
}
代码:
[root@ansible ~]# cat query.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
#author: xiaoweige
import json
import pymysql
import argparse
from contextlib import contextmanager
from collections import defaultdict
#todo: parse the given --list without arg but --host '10.1.2.2'
def parse_args():
parser = argparse.ArgumentParser(description='--list or --host 10.1.2.2')
parser.add_argument('--list',action='store_true',help='--list without args')
parser.add_argument('--host',help='--host 10.1.2.2')
args = parser.parse_args()
return args
#todo: to dump the dict into json
def to_json(indict):
return json.dumps(indict,indent=3)
#todo: create a connection to the mysql
@contextmanager
def get_conn(**kwargs):
conn = pymysql.connect(**kwargs)
try:
yield conn
finally:
conn.close()
#todo: list all the host
def get_all_list(conn):
hosts = defaultdict(list)
with conn as cur:
cur.execute('select * from yunwei.hosts ' )
rows = cur.fetchall()
for no,host,group,user,port in rows:
hosts[group].append(host)
return hosts
#todo: query all details of a given hosts
def get_all_detail(conn,host):
details = {}
with conn as cur:
cur.execute("select * from yunwei.hosts where host='{0}'".format(host))
rows = cur.fetchall()
for row in rows:
no,host,group,user,port = row
details.update(ansible_host=host,ansible_group=group)
return details
#todo: define main function
def main():
parser = parse_args()
with get_conn(host='10.1.1.36',user='root',password='za5121101112az',port=3306) as conn:
if parser.list:
hosts = get_all_list(conn)
print to_json(hosts)
else:
details = get_all_detail(conn,parser.host)
print to_json(details)
if __name__ == '__main__':
main()
从CMDB动态获取服务器列表,按照Ansible的约定的更多相关文章
- Zookeeper动态更新服务器列表
-------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...
- diamond源码阅读-获取服务器列表
serverAddressProcessor public synchronized void start() { if (isRun) { return; } isRun = true; initH ...
- Ansible 动态获取主机列表
参考文献: http://www.linuxidc.com/Linux/2016-12/138111.htm 附加 这个 include_vars 变量,可以 动态分别环境或者其他条件- hosts: ...
- 【CMDB】获取服务器数据
一.通过agent的方式 原理:服务器定制执行py文件通过subprocess模块采集数据发送给数据收集的机器 数据收集的机器:192.168.11.62 服务器:192.168.11.169 数据收 ...
- 通过zabbix的API接口获取服务器列表
Zabbix API说明 1) 基于Web的API,作为Web前端的一部分提供,使用JSON-RPC 2.0协议 2) 身份认证Token:在访问Zabbix中的任何数据之前,需要登录并获取身份验证令 ...
- c# json转换成dynamic对象,然后在dynamic对象中动态获取指定字符串列表中的值
using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.T ...
- dedecms Ajax异步获取文章列表
dedecms如何通过ajax(异步)动态获取文章列表数据. 第一步添加:服务端(PHP)代码 打开plus目录下面的list.php文件,在12行代码下面添加以下代码: if(isset($_GET ...
- Ajax 学习之动态获取,返回服务器的值
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。
我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...
随机推荐
- wagon-maven-plugin实现自动打包部署到服务器
1.在maven中添加依赖 <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/wagon-maven-plugin --> ...
- 使用ECharts画K线图
需引入echarts.js插件,开发环境建议选择源代码版本,该版本包含了常见的警告和错误提示.下载地址 http://echarts.baidu.com/download.html 下面是代码,注释很 ...
- js之面向对象
本文的面向对象分为ES6和ES6之前的,重点学习ES6的===============================一.面向对象 1.什么是面向对象 a)什么是对象:万物都可以抽象成对象 时间对象 ...
- js 四种调用模式和this的关系总结
更新: 这篇又简单又明了啊喂 首先看这一篇, 很简单很清楚了,http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascri ...
- 网络基础 HTTP协议之http url简介
HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ...
- Android中的设计模式之观察者模式
参考 <设计模式:可复用面向对象软件的基础 >5.7 Observer 观察者 对象行为型模式 <设计模式解析> 18.4 Observer模式 <Android源码设计 ...
- SQLSERVER中的资源调控器
SQLSERVER中的资源调控器 转载自: http://wenku.baidu.com/view/0d92380cf78a6529647d5375.html http://www.cnblogs.c ...
- Oracle EBS OPM 车间发料事务处理
--车间发料事物处理 --created by jenrry DECLARE l_iface_rec inv.mtl_transactions_interface%ROWTYPE; l_iface_l ...
- systemd 之 journalctl
Systemd 日志系统 一.前言 昨天写了一篇文章,内容为:Systemd 常规操作与彩蛋,参考了 ArchLinux 官方文档并结合培训中的思路进行了部分修改补充.如果你懂得了基础的管理,那必然还 ...
- CIDR概述及其地址块计算
CIDR概述 英文:Classless Inter-Domain Routing,中文是:无分类域间路由选择.一般叫做无分类编址. 设计目的:解决路由表项目过多过大的问题. 表示法:{<网络前缀 ...