2016-06-09 7 views
2

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.

+1

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. –

+1

Bearbeitete den ursprünglichen Post, Protokoll (res, Host) Fügt Daten in der Datenbank nicht hinzu. – Kevin

Antwort

2

Arbeitscode. Entfernen Sie CREATE TABLE, wenn nicht benötigt.

+0

Ja, funktioniert total! Super genial. – Kevin

+0

Bitte beachten Sie, dass der Trick 'result.get ('ansible_facts', None)' nicht mehr auf Ansible 2.2 funktioniert. –

Verwandte Themen