# Specify Host (inventory) in Python Script

**URL:** <https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411>\
**Category:** Ansible Project\
**Created:** [September 3, 2013, 3:06pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411 "2013-09-03T15:06:09Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Seumas\_Mackinnon](https://avatars.discourse-cdn.com/v4/letter/s/e9bcb4/32.png) [@Seumas\_Mackinnon](https://forum.ansible.com/u/Seumas_Mackinnon)\
**Post date:** [September 3, 2013, 3:06pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/1 "2013-09-03T15:06:09Z")

</div>

Hi,

I’m trying to create a python script where I can specify the hosts within the script.

Something like:

webuptime = ansible.runner.Runner(  
pattern=‘all’, forks=10,  
module\_name=‘command’, module\_args=‘uptime’,  
inventory = “webserver1,webserver2”  
).run()

…or with a variable for the webserver bit. I can’t seem to figure it out though. Is there a simple way to do this without writing the names out to a file and reading them back in again? I can use an IP address instead if necessary.

Many thanks, Seumas

---

<div class="post-metadata">

**Author:** ![James\_Cammarata1](https://avatars.discourse-cdn.com/v4/letter/j/d26b3c/32.png) [@James\_Cammarata1](https://forum.ansible.com/u/James_Cammarata1)\
**Post date:** [September 3, 2013, 3:37pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/2 "2013-09-03T15:37:13Z")

</div>

Why not use an executable inventory script? We include several examples of these in the ansible git repository (for example, the ec2.py script).

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@Michael\_DeHaan](https://forum.ansible.com/u/Michael_DeHaan)\
**Post date:** [September 3, 2013, 3:37pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/3 "2013-09-03T15:37:52Z")

</div>

If you are doing inventory via the API you should use the Inventory class.

–Michael

---

<div class="post-metadata">

**Author:** ![Seumas\_Mackinnon](https://avatars.discourse-cdn.com/v4/letter/s/e9bcb4/32.png) [@Seumas\_Mackinnon](https://forum.ansible.com/u/Seumas_Mackinnon)\
**Post date:** [September 3, 2013, 4:07pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/4 "2013-09-03T16:07:56Z")

</div>

Hi Michael,

Is there any documentation or examples of _how_ to use that to do what I want?

Thanks, Seumas

---

<div class="post-metadata">

**Author:** ![Seumas\_Mackinnon](https://avatars.discourse-cdn.com/v4/letter/s/e9bcb4/32.png) [@Seumas\_Mackinnon](https://forum.ansible.com/u/Seumas_Mackinnon)\
**Post date:** [September 3, 2013, 4:08pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/5 "2013-09-03T16:08:42Z")

</div>

Hi James,

I guess I could. I thought there must be an easy way of doing it directly though?

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan2](https://avatars.discourse-cdn.com/v4/letter/m/da6949/32.png) [@Michael\_DeHaan2](https://forum.ansible.com/u/Michael_DeHaan2)\
**Post date:** [September 3, 2013, 8:47pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/6 "2013-09-03T20:47:40Z")

</div>

/usr/bin/ansible and /usr/bin/ansible-playbook both construct Inventory() objects.

---

<div class="post-metadata">

**Author:** ![Seumas\_Mackinnon](https://avatars.discourse-cdn.com/v4/letter/s/e9bcb4/32.png) [@Seumas\_Mackinnon](https://forum.ansible.com/u/Seumas_Mackinnon)\
**Post date:** [September 4, 2013, 9:33am UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/7 "2013-09-04T09:33:28Z")

</div>

Ok, it seems it’s not too complicated. You can do something like:

hosts = [“webserver1”,“webserver2”]

webInventory = ansible.inventory.Inventory(hosts)

webuptime = ansible.runner.Runner(  
pattern=‘webserver\*’, forks=10,  
module\_name=‘command’, module\_args=‘uptime’,  
inventory = webInventory  
).run()

Hope this helps anyone looking for the same.

Cheers, Seumas

---

<div class="post-metadata">

**Author:** ![Bryon\_Fryer](https://avatars.discourse-cdn.com/v4/letter/b/e8c25b/32.png) [@Bryon\_Fryer](https://forum.ansible.com/u/Bryon_Fryer)\
**Post date:** [October 31, 2013, 7:59pm UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/8 "2013-10-31T19:59:28Z")

</div>

This is useful, but where do the host specific ansible\_ssh\_\* values get passed? I’m not seeing how to do it in the dynamic inventory json style either.

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan2](https://avatars.discourse-cdn.com/v4/letter/m/da6949/32.png) [@Michael\_DeHaan2](https://forum.ansible.com/u/Michael_DeHaan2)\
**Post date:** [November 1, 2013, 12:15am UTC](https://forum.ansible.com/t/specify-host-inventory-in-python-script/13411/9 "2013-11-01T00:15:47Z")

</div>

They get passed as standard inventory variables

[webservers]  
foo ansible\_ssh\_port=4000

or just

[webservers]  
foo:4000

etc

In external inventory those variables are just like any other variable.
