cd /usr/share/ansible/plugins/callback
ansible1.7.2
ansible2 脚本完全不同,这个要注意
<code>import</code> <code>os</code>
<code>import</code> <code>time</code>
<code>#import sqlite3</code>
<code>#import redis</code>
<code>import</code> <code>json</code>
<code> </code>
<code>dbname </code><code>=</code> <code>'/tmp/setup.db'</code>
<code>TIME_FORMAT</code><code>=</code><code>'%Y-%m-%d %H:%M:%S'</code>
<code>try</code><code>:</code>
<code> </code><code>con </code><code>=</code> <code>sqlite3.connect(dbname)</code>
<code> </code><code>cur </code><code>=</code> <code>con.cursor()</code>
<code>except</code><code>:</code>
<code> </code><code>pass</code>
<code>def</code> <code>log(host, data):</code>
<code># if type(data) == dict:</code>
<code># invocation = data.pop('invocation', None)</code>
<code># if invocation.get('module_name', None) != 'setup':</code>
<code># return</code>
<code>#</code>
<code># facts = data.get('ansible_facts', None)</code>
<code># now = time.strftime(TIME_FORMAT, time.localtime())</code>
<code># try:</code>
<code># # `host` is a unique index</code>
<code># cur.execute("REPLACE INTO inventory (now, host, arch, dist, distvers, sys,kernel) VALUES(?,?,?,?,?,?,?);",</code>
<code># (</code>
<code># now,</code>
<code># facts.get('ansible_hostname', None),</code>
<code># facts.get('ansible_architecture', None),</code>
<code># facts.get('ansible_distribution', None),</code>
<code># facts.get('ansible_distribution_version', None),</code>
<code># facts.get('ansible_system', None),</code>
<code># facts.get('ansible_kernel', None)</code>
<code># ))</code>
<code># con.commit()</code>
<code># except:</code>
<code># pass</code>
<code>class</code> <code>CallbackModule(</code><code>object</code><code>):</code>
<code> </code><code>def</code> <code>runner_on_ok(</code><code>self</code><code>, host, res):</code>
<code> </code><code>#host=host=res._host.get_name()</code>
<code> </code><code>#r = redis.Redis(host='127.0.0.1', port=6379, db=0) </code>
<code> </code><code>#r.set(host,str(res))</code>
<code> </code><code>f </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/11'</code><code>,</code><code>'a'</code><code>)</code>
<code> </code><code>f.write(</code><code>str</code><code>(host))</code>
<code> </code><code>f.write(</code><code>str</code><code>(res))</code>
<code> </code><code>f.close()</code>
<code> </code><code>log(host, res)</code>
<code> </code><code>def</code> <code>runner_on_failed(</code><code>self</code><code>, host, res, ignore_errors</code><code>=</code><code>False</code><code>):</code>
或者换种方式 放入mongodb
<a href="http://ju.outofmemory.cn/entry/95213" target="_blank">http://ju.outofmemory.cn/entry/95213</a>
<code>mongodb 创建用户</code>
http://www.cnblogs.com/valor-xh/p/6369432.html
http://www.blogjava.net/liufuxi/archive/2016/12/20/432147.html
<code>感觉就是一个库,一个用户。然后如果你是root,那么什么都可以看,不是,就只能看这个库。合理。</code>
<code>mongodb</code><code>-</code><code>linux</code><code>-</code><code>x86_64</code><code>-</code><code>3.2</code><code>.</code><code>10.tgz</code> <code>setuptools</code><code>-</code><code>33.1</code><code>.</code><code>1.zip</code>
然后ansible就出故障了
<code>File</code> <code>"/usr/lib64/python2.6/site-packages/Crypto/Util/number.py"</code><code>, line </code><code>56</code><code>, </code><code>in</code> <code><module></code>
<code> </code><code>if</code> <code>_fastmath </code><code>is</code> <code>not</code> <code>None</code> <code>and</code> <code>not</code> <code>_fastmath.HAVE_DECL_MPZ_POWM_SEC:</code>
<code>AttributeError: </code><code>'module'</code> <code>object</code> <code>has no attribute </code><code>'HAVE_DECL_MPZ_POWM_SEC'</code>
<code>找到他,注释掉</code>
<code>mongo客户端 robomongo</code><code>-</code><code>0.9</code><code>.</code><code>0</code><code>-</code><code>windows</code><code>-</code><code>x86_64</code><code>-</code><code>0786489</code>
<code>import</code> <code>datetime</code>
<code>from</code> <code>pymongo </code><code>import</code> <code>MongoClient</code>
<code>mongoinfo </code><code>=</code> <code>{</code><code>"host"</code><code>:</code><code>"127.0.0.1"</code><code>,</code><code>"port"</code><code>:</code><code>"27408"</code><code>,</code><code>"user"</code><code>:</code><code>"root"</code><code>,</code><code>"password"</code><code>:</code><code>"root"</code><code>,</code><code>"dbname"</code><code>:</code><code>"ansible_log"</code><code>} </code>
<code>def</code> <code>InsertDB(values):</code>
<code> </code><code>global</code> <code>mongoinfo</code>
<code> </code><code>dbhost </code><code>=</code> <code>mongoinfo[</code><code>'host'</code><code>]</code>
<code> </code><code>dbport </code><code>=</code> <code>mongoinfo[</code><code>'port'</code><code>]</code>
<code> </code><code>dbuser </code><code>=</code> <code>mongoinfo[</code><code>'user'</code><code>]</code>
<code> </code><code>dbpwd </code><code>=</code> <code>mongoinfo[</code><code>'password'</code><code>]</code>
<code> </code><code>dbname </code><code>=</code> <code>mongoinfo[</code><code>'dbname'</code><code>]</code>
<code> </code><code>uri </code><code>=</code> <code>'mongodb://%s:%s@%s/%s'</code><code>%</code><code>(dbuser,dbpwd,dbhost,dbname)</code>
<code> </code><code>client </code><code>=</code> <code>MongoClient(uri)</code>
<code> </code><code>db </code><code>=</code> <code>client.ansible_log</code>
<code> </code><code>db.callback.insert(values)</code>
<code> </code><code>now </code><code>=</code> <code>datetime.datetime.now()</code>
<code> </code><code>result </code><code>=</code> <code>res</code>
<code> </code><code>result[</code><code>'time'</code><code>] </code><code>=</code> <code>now.strftime(TIME_FORMAT)</code>
<code> </code><code>result[</code><code>'status'</code><code>] </code><code>=</code> <code>'ok'</code>
<code> </code><code>InsertDB(result)</code>
<code> </code><code>f </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/12'</code><code>,</code><code>'a'</code><code>)</code>
有两个问题
你指定 "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.截个图
<a href="https://s4.51cto.com/wyfs02/M02/9F/4C/wKioL1mbqUyBWKqNAAE659-HtR4202.png" target="_blank"></a>
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1951481,如需转载请自行联系原作者