Mit Ansible 2.0.2.0 arbeiten. Versuche, zwei Fakten in eine SQLite-Datenbank zu bringen. Um dies zu erreichen, arbeite ich mit einem Callback-Plugin. Dies ist das Python-Skript bisher;Ansible - Fakten in SQLite per Callback setzen
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)
Dieses Plugin gibt alle möglichen Fakten im JSON-Format zurück. Aber ich brauche nur eine kleine Codezeile, um die Fakten in eine SQLite-Datenbank einzugeben.
Die ursprüngliche Quelle, funktioniert aber nur mit ansible 1.x http://jpmens.net/2012/09/11/watching-ansible-at-work-callbacks/
Der Ausgang gibt keinen Fehler, ist aber nichts im test1.db geschrieben.
Original-Code von bereitgestellten Link verwenden 'log' Funktion anstelle von Ihrem 'print' innerhalb' Runner_on_ok' Methode. 'log' Funktion schreibt Daten tatsächlich in sqlite. –
Bearbeitete den ursprünglichen Post, Protokoll (res, Host) Fügt Daten in der Datenbank nicht hinzu. – Kevin