Hello,

I am trying to write my own callback function which logs information which 
I want to database, especially informations from local facts.
We have localfacts in json mode and I can easly get access to them from 
Ansbile it self, however everything what I've tried in terms access them 
from callback function failed.

Details:
- My callback function script skeleton is based on this callback script: 
http://jpmens.net/2012/09/11/watching-ansible-at-work-callbacks/
- I've search ansible group and found something similar - however didn't 
help solve my problem 
(https://groups.google.com/forum/#!topic/ansible-project/3GvdIIWCdSI)
- Looking in source (ansible / plugins / callbacks /) is not so helpfull 
for me as well.

So question, how I can get access to fact stored in local facts in callback 
functions:

1. These is a file on remote host:
/etc/ansible/facts.d/apache.fact

2. Return from this file (json format):
{
    "name": "apache",
    "status": "Installed",
    "version": "1.0.8"
}

3. Return this fact in ansible-playbook 
"msg": "work - variable: {u'apache': {u'status': u'Installed', u'version': 
u'1.0.8', u'name': u'apache'}}" 

4. Access to it from my callback function (Based on this callback which I 
mentioned above).
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 inventory (now, host, arch, dist, 
distvers, sys,kernel) VALUES(?,?,?,?,?,?,?);",
        (
            now,
            facts.get('ansible_hostname', None),
            ..... # !!!! Works well
        ))
        con.commit()

        cur.execute("REPLACE INTO modules (host, name, status, version) 
VALUES(?,?,?,?);",
        (
           * # !!!!!! - Not working !!!!!*
            facts.get('ansible_hostname', None),
            facts.get('ansible_local.apache.name', None),
            facts.get('ansible_local.apache.status', None),
            facts.get('ansible_local.apache.version', None),
        ))
        con.commit()

*Summary:*
Any reference to nasible_local.apache.name (etc) returns NULL in nasible 
callback function. 


Please advice what I have to do, as I understand ansible_local is DICT in 
python, do I have to run some special functions to get access for facts in 
format: Main-fact-name.some-subname.some.... ??? 

Best regards,
Marcin Praczko


-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/07d3d1bb-8855-4a9d-8952-187e45e016b7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to