目标效果:

[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的约定的更多相关文章

  1. Zookeeper动态更新服务器列表

    -------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...

  2. diamond源码阅读-获取服务器列表

    serverAddressProcessor public synchronized void start() { if (isRun) { return; } isRun = true; initH ...

  3. Ansible 动态获取主机列表

    参考文献: http://www.linuxidc.com/Linux/2016-12/138111.htm 附加 这个 include_vars 变量,可以 动态分别环境或者其他条件- hosts: ...

  4. 【CMDB】获取服务器数据

    一.通过agent的方式 原理:服务器定制执行py文件通过subprocess模块采集数据发送给数据收集的机器 数据收集的机器:192.168.11.62 服务器:192.168.11.169 数据收 ...

  5. 通过zabbix的API接口获取服务器列表

    Zabbix API说明 1) 基于Web的API,作为Web前端的一部分提供,使用JSON-RPC 2.0协议 2) 身份认证Token:在访问Zabbix中的任何数据之前,需要登录并获取身份验证令 ...

  6. c# json转换成dynamic对象,然后在dynamic对象中动态获取指定字符串列表中的值

    using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.T ...

  7. dedecms Ajax异步获取文章列表

    dedecms如何通过ajax(异步)动态获取文章列表数据. 第一步添加:服务端(PHP)代码 打开plus目录下面的list.php文件,在12行代码下面添加以下代码: if(isset($_GET ...

  8. Ajax 学习之动态获取,返回服务器的值

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。

    我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...

随机推荐

  1. js实现禁止右键 禁止f12 查看源代码

    document.oncontextmenu = function () { return false; }; document.onkeydown = function () { if (windo ...

  2. CSS3和HTML5新增特性及使用(保留方便查看)

    CSS3 1.边框图片 border-image: url(test.png) 10/10px;  outline:10px solid #ff0;outline-offset:15px;边框的边框, ...

  3. dubbo 图片服务器(FastDFS) redis solr ActiveMQ等简单配置使用

    一.dubbo 项目基于soa的架构,表现层和服务层是不同的工程.所以要实现商品列表查询需要两个系统之间进行通信. 1.1如何实现远程通信? 1.Webservice:效率不高基于soap协议.项目中 ...

  4. Dynamics 365Online 使用adal.js注册和配置SimpleSPA应用程序

    本篇是基于dynamics 365online撰写,本文中使用的365online及azure均为试用版,因为online在国内还没落地,所以我申请的是新加坡版,online的申请方式可见我之前的博文 ...

  5. Tracing 在PeopleSoft 程序中怎么开启

    本文介绍一些常用的跟踪方法在Applications,Application Engine,PeopleSoft,Integration Broker,Cobol中. 1.Application En ...

  6. ActiveReports 报表应用教程 (16)---报表导出

    葡萄城ActiveReports报表支持多种格式的报表导出,包括PDF.Excel.Word.RTF.HTML.Text.TIFF以及其它图片格式,用户可以将它们应用到Windows Forms.We ...

  7. Nginx的性能优化

    1.优化worker进程个数: 在高并发.高访问量的WEB服务场景,需要事先启动更多的nginx进程,以保证快速响应并处理大量并发用户的请求,优化nginx进程个数的配置项就是,在nginx.conf ...

  8. 【前端】NodeJs包管理工具NPM

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS部署上的很多问题. 测试是否安装成功,出现版本提示表示安装成功. npm -v NPM常用命令 官方文档:https://www.npm ...

  9. WordCount系统分析与设计作业

    Gitee项目地址 https://gitee.com/gitdq/homework psp表 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 10 · ...

  10. leveldb源码分析--BloomFilter

    bloomfilter是leveldb中的一大性能利器,所以为了文章的表现完整性这里新启这么一篇文章.leveldb中的bloomfilter的实现在bloom.cc中,是一个较为简单的实现,所以就不 ...