您的位置:首页 > 其它

ansible调用callbacks插件 保存执行结果

2017-07-27 16:43 253 查看
cd /usr/share/ansible/plugins/callback
ansible1.7.2

ansible2 脚本完全不同,这个要注意
import os
import time
#import sqlite3
#import redis
import json

dbname = '/tmp/setup.db'
TIME_FORMAT='%Y-%m-%d %H:%M:%S'

try:
con = sqlite3.connect(dbname)
cur = con.cursor()
except:
pass

def log(host, data):
pass
#    if type(data) == dict:
#        invocation = data.pop('invocation', None)
#        if invocation.get('module_name', None) != 'setup':
#            return
#
#    facts = data.get('ansible_facts', None)
#
#    now = time.strftime(TIME_FORMAT, time.localtime())
#
#    try:
#        # `host` is a unique index
#        cur.execute("REPLACE INTO inventory (now, host, arch, dist, distvers, sys,kernel) VALUES(?,?,?,?,?,?,?);",
#        (
#            now,
#            facts.get('ansible_hostname', None),
#            facts.get('ansible_architecture', None),
#            facts.get('ansible_distribution', None),
#            facts.get('ansible_distribution_version', None),
#            facts.get('ansible_system', None),
#            facts.get('ansible_kernel', None)
#        ))
#        con.commit()
#    except:
#        pass
#
class CallbackModule(object):
def runner_on_ok(self, host, res):
#host=host=res._host.get_name()
#r = redis.Redis(host='127.0.0.1', port=6379, db=0)
#r.set(host,str(res))

f = open('/tmp/11','a')
f.write(str(host))
f.write(str(res))
f.close()
log(host, res)
def runner_on_failed(self, host, res, ignore_errors=False):
log(host, res)


或者换种方式 放入mongodb
http://ju.outofmemory.cn/entry/95213
mongodb 创建用户

http://www.cnblogs.com/valor-xh/p/6369432.html http://www.blogjava.net/liufuxi/archive/2016/12/20/432147.html

感觉就是一个库,一个用户。然后如果你是root,那么什么都可以看,不是,就只能看这个库。合理。
mongodb-linux-x86_64-3.2.10.tgz  setuptools-33.1.1.zip
然后ansible就出故障了
File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in <module>
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

找到他,注释掉
mongo客户端 robomongo-0.9.0-windows-x86_64-0786489
import os
import time
import json
import datetime
from pymongo import MongoClient

mongoinfo = {"host":"127.0.0.1","port":"27408","user":"root","password":"root","dbname":"ansible_log"}

dbname = '/tmp/setup.db'
TIME_FORMAT='%Y-%m-%d %H:%M:%S'

try:
con = sqlite3.connect(dbname)
cur = con.cursor()
except:
pass

def InsertDB(values):
global mongoinfo
dbhost = mongoinfo['host']
dbport = mongoinfo['port']
dbuser = mongoinfo['user']
dbpwd  = mongoinfo['password']
dbname = mongoinfo['dbname']
uri = 'mongodb://%s:%s@%s/%s'%(dbuser,dbpwd,dbhost,dbname)
client = MongoClient(uri)
db = client.ansible_log
db.callback.insert(values)

def log(host, data):
pass
class CallbackModule(object):
def runner_on_ok(self, host, res):

now = datetime.datetime.now()
result = res
result['time'] = now.strftime(TIME_FORMAT)
result['status'] = 'ok'
InsertDB(result)
def runner_on_failed(self, host, res, ignore_errors=False):
f = open('/tmp/12','a')
f.write(str(host))
f.write(str(res))
f.close()
log(host, res)
有两个问题
你指定 "port":"27408",没用

File "/usr/lib64/python2.6/site-packages/pymongo-3.5.0-py2.6-linux-x86_64.egg/pymongo/topology.py", line 189, in select_servers
self._error_message(selector))
ServerSelectionTimeoutError: 127.0.0.1:27017: [Errno 111] Connection refused
2.
/usr/share/ansible/plugins/callback/log_plays.py:33: DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
db.callback.insert(values)
时间太久了,好多东西都变了

3.截个图


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ansible1.7.2