user2236794
user2236794

Reputation: 561

how to set hostname using inventory file

I have my hosts in an inventory file as below:

cnamgw01b ansible_ssh_host=172.17.0.26 
cnamgw01a ansible_ssh_host=172.17.1.26
cnamgw02b ansible_ssh_host=172.17.0.23
cnamgw02a ansible_ssh_host=172.17.1.23 
cnamgw03a ansible_ssh_host=172.17.1.13
cnamgw03b ansible_ssh_host=172.17.0.13 

These are new builds and I would like to set the hostname based on the inventory file. I already have a script in place that updated the inventory file as new VM's are turned up and assigns a random hostname. I would like to take this hostname assigned and set it as the hosts hostname. How can I accomplish this? Also note that I also use folders to subdivide the hosts by region

Upvotes: 3

Views: 13874

Answers (2)

Smily
Smily

Reputation: 2578

You can use the ansible module hostname to set hostname. https://docs.ansible.com/ansible/latest/modules/hostname_module.html

- hosts: all
  tasks:
  - name: Set hostname
    hostname:
     name: {{ inventory_hostname }}

Upvotes: 17

larsks
larsks

Reputation: 312430

You could run something like this to set the system hostname to the inventory hostname:

- hosts: all
  tasks:
    - name: set system hostname
      command: hostnamectl set-hostname {{ inventory_hostname }}

That is, the variable inventory_hostname holds the name of the current host as it was named in your inventory.

This task assumes you have the hostnamectl command available. You could instead write the value of inventory_hostname to /etc/hostname and call the hostname command separately.

Upvotes: 0

Related Questions