Tanner Semerad
Tanner Semerad

Reputation: 12672

How to get the host name of the current machine as defined in the Ansible hosts file?

I'm setting up an Ansible playbook to set up a couple servers. There are a couple of tasks that I only want to run if the current host is my local dev host, named "local" in my hosts file. How can I do this? I can't find it anywhere in the documentation.

I've tried this when statement, but it fails because ansible_hostname resolves to the host name generated when the machine is created, not the one you define in your hosts file.

- name: Install this only for local dev machine
  pip: 
    name: pyramid
  when: ansible_hostname == "local"

Upvotes: 189

Views: 237053

Answers (3)

Tanner Semerad
Tanner Semerad

Reputation: 12672

The necessary variable is inventory_hostname.

- name: Install this only for local dev machine
  pip: 
    name: pyramid
  when: inventory_hostname == "local"

It is somewhat hidden in the documentation at the bottom of this section.

Upvotes: 309

bbaassssiiee
bbaassssiiee

Reputation: 6772

You can limit the scope of a playbook by changing the hosts header in its plays without relying on your special host label ‘local’ in your inventory. Localhost does not need a special line in inventories.

- name: run on all except local
  hosts: all:!local

Upvotes: 4

bbaassssiiee
bbaassssiiee

Reputation: 6772

This is an alternative:

- name: Install this only for local dev machine
  pip: name=pyramid
  delegate_to: localhost

Upvotes: 0

Related Questions