# How to set vars with python in ansible inventory?

**URL:** <https://forum.ansible.com/t/how-to-set-vars-with-python-in-ansible-inventory/17677>\
**Category:** Ansible Project\
**Created:** [March 5, 2015, 3:02pm UTC](https://forum.ansible.com/t/how-to-set-vars-with-python-in-ansible-inventory/17677 "2015-03-05T15:02:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Valeriy\_Solovyov](https://avatars.discourse-cdn.com/v4/letter/v/8e8cbc/32.png) [@Valeriy\_Solovyov](https://forum.ansible.com/u/Valeriy_Solovyov)\
**Post date:** [March 5, 2015, 3:02pm UTC](https://forum.ansible.com/t/how-to-set-vars-with-python-in-ansible-inventory/17677/1 "2015-03-05T15:02:03Z")

</div>

Hello,

In playbook I’m using variable {{excluded\_service}}. I want to run ansible playbook from python and provide this variable.

I can’t use external inventory script to provide this variable. (There is one workaround: generate json/Pickle and restore it inside dynamic inventory script).

I am creating an inventory:

```auto
hosts = ["127.0.0.1"]
inventory=ansible.inventory.Inventory(hosts)

```

but I don’t understand where I can add value of variable?

I am noob to python. I tried to read code and found answer but I failed. For me [Inventory class](https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/ __init__.py) hasn’t ability to add variable.

My code, that works with external inventory script. Please help me increase my programming level. If there are some issues, or…please write me. (Sorry for my English)

```auto
import sys
import os
import stat
import json

import ansible.playbook
import ansible.constants as C
import ansible.utils.template
from ansible import errors
from ansible import callbacks
from ansible import utils
from ansible.color import ANSIBLE_COLOR, stringc
from ansible.callbacks import display

playbook="/opt/RDE/3p/ansible/loop/testloop.yml"
inventory="/opt/RDE/3p/ansible/loop/lxc.py"
connection="local"
timeout=10
subset=None

options={'subset': None, 'ask_pass': False, 'sudo': False, 'private_key_file': None, 'syntax': None, 'skip_tags': None, 'diff': False, 'check': False, 'remote_user': 'root', 'listtasks': None, 'inventory': '/opt/RDE/3p/ansible/loop/lxc.py', 'forks': 5, 'listhosts': None, 'start_at': None, 'tags': 'all', 'step': None, 'sudo_user': None, 'ask_sudo_pass': False, 'extra_vars': [], 'connection': 'smart', 'timeout': 10, 'module_path': None}
sshpass = None
sudopass = None
extra_vars = {}

def colorize(lead, num, color):
    """ Print 'lead' = 'num' in 'color' """
    if num != 0 and ANSIBLE_COLOR and color is not None:
        return "%s%s%-15s" % (stringc(lead, color), stringc("=", color), stringc(str(num), color))
    else:
        return "%s=%-4s" % (lead, str(num))

def hostcolor(host, stats, color=True):
    if ANSIBLE_COLOR and color:
        if stats['failures'] != 0 or stats['unreachable'] != 0:
            return "%-37s" % stringc(host, 'red')
        elif stats['changed'] != 0:
            return "%-37s" % stringc(host, 'yellow')
        else:
            return "%-37s" % stringc(host, 'green')
    return "%-26s" % host   

inventory = ansible.inventory.Inventory(options['inventory'])

hosts = ["127.0.0.1"]

#inventory=ansible.inventory.Inventory(hosts)

inventory.subset(options['subset'])
if len(inventory.list_hosts()) == 0:
    raise errors.AnsibleError("provided hosts list is empty")

inventory.set_playbook_basedir(os.path.dirname(playbook))
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
if options['step']:
    playbook_cb.step = options['step']
if options['start_at']:
    playbook_cb.start_at = options['start_at']

runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
pb = ansible.playbook.PlayBook(
            playbook=playbook,
            module_path=None,
            inventory=inventory,
            forks=options['forks'],
            remote_user=options['remote_user'],
            remote_pass=sshpass,
            callbacks=playbook_cb,
            runner_callbacks=runner_cb,
            stats=stats,
            timeout=options['timeout'],
            transport=options['connection'],
            sudo=options['sudo'],
            sudo_user=options['sudo_user'],
            extra_vars=extra_vars,

            private_key_file=options['private_key_file'],

            check=options['check'],
            diff=options['diff']        
        )

playnum = 0

failed_hosts = []
unreachable_hosts = []
try:
    print pb.run()

    hosts = sorted(pb.stats.processed.keys())
    print hosts
    display(callbacks.banner("PLAY RECAP"))
    playbook_cb.on_stats(pb.stats)

    for h in hosts:
        t = pb.stats.summarize(h)
        if t['failures'] > 0:
            failed_hosts.append(h)
        if t['unreachable'] > 0:
            unreachable_hosts.append(h)

    retries = failed_hosts + unreachable_hosts

    if len(retries) > 0:
        filename = pb.generate_retry_inventory(retries)
        if filename:
            display(" to retry, use: --limit @%s\n" % filename)

    for h in hosts:
        t = pb.stats.summarize(h)

        display("%s : %s %s %s %s" % (
            hostcolor(h, t),
            colorize('ok', t['ok'], 'green'),
            colorize('changed', t['changed'], 'yellow'),
            colorize('unreachable', t['unreachable'], 'red'),
            colorize('failed', t['failures'], 'red')),
            screen_only=True
        )

        display("%s : %s %s %s %s" % (
            hostcolor(h, t, False),
            colorize('ok', t['ok'], None),
            colorize('changed', t['changed'], None),
            colorize('unreachable', t['unreachable'], None),
            colorize('failed', t['failures'], None)),
            log_only=True
        )

except Exception as e:
        print ("!!!!!!!ERROR: %s" % e)

```

---

<div class="post-metadata">

**Author:** ![sivel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/sivel/32/1198_2.png) [@sivel](https://forum.ansible.com/u/sivel)\
**Post date:** [March 5, 2015, 3:22pm UTC](https://forum.ansible.com/t/how-to-set-vars-with-python-in-ansible-inventory/17677/2 "2015-03-05T15:22:35Z")

</div>

You probably want to create an ansible.inventory.host.Host instance, and do an inventory.add\_host using the Host instance.

A Host instance can have vars associated with it.

---

<div class="post-metadata">

**Author:** ![sivel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/sivel/32/1198_2.png) [@sivel](https://forum.ansible.com/u/sivel)\
**Post date:** [March 5, 2015, 3:22pm UTC](https://forum.ansible.com/t/how-to-set-vars-with-python-in-ansible-inventory/17677/3 "2015-03-05T15:22:58Z")

</div>

BTW, for future reference, this is also a better topic for ansible-devel, instead of ansible-project.
