Ansible-размещение фактов в SQLite с помощью обратного вызова
Работа с Ansible 2.0.2.0. Попытка поместить два факта в базу данных sqlite. Чтобы достичь этого, я работаю с плагином обратного вызова. Это скрипт python до сих пор;
import os
import time
import sqlite3
import json
from ansible.plugins.callback import CallbackBase
dbname = '/etc/ansible/test.db'
TIME_FORMAT='%Y-%m-%d %H:%M:%S'
try:
con = sqlite3.connect(test1)
cur = con.cursor()
except:
pass
def log(host, data):
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 test2 (now, host, serial) VALUES(?,?,?);",
(
now,
facts.get('ansible_hostname', None),
facts.get('ansible_product_serial', None)
))
con.commit()
except:
pass
class CallbackModule(CallbackBase):
def runner_on_ok(self, host, res):
log (res, host)
Этот плагин возвращает все анзибль факты в формате JSON. Но мне нужна только небольшая строка кода, чтобы ввести факты в базу данных sqlite.
Исходный источник, но работает только с ansible 1.x http://jpmens.net/2012/09/11/watching-ansible-at-work-callbacks/
Выход не дает никаких результатов. ошибка, но ничего не написано в тесте1.дБ.
1 ответ:
Рабочий код. Удалите
CREATE TABLE
, если это не требуется.from ansible.plugins.callback import CallbackBase import os import time import sqlite3 dbname = './test.db' TIME_FORMAT='%Y-%m-%d %H:%M:%S' try: con = sqlite3.connect(dbname) cur = con.cursor() cur.execute('CREATE TABLE `test` (`now` TEXT, `host` TEXT UNIQUE)') con.commit() except: pass def log(host, data): 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 test (now, host) VALUES(?,?);", ( now, facts.get('ansible_hostname', None) )) con.commit() except: pass class CallbackModule(CallbackBase): def runner_on_ok(self, host, res): log(host, res)