天天看點

ansible調用callbacks插件 儲存執行結果

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>&lt;module&gt;</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,如需轉載請自行聯系原作者