Roberto Jobet
Roberto Jobet

Reputation: 323

Ansible assign hostname using inventory items

I'm trying to assign hostname to a few hosts, gathering it from inventory.

My inventory is:

[masters]
master.domain.tld

[workers]
worker1.domain.tld
worker2.domain.tld

[all:vars]
ansible_user=root
ansible_ssh_private_key_file=~/.ssh/id_rsa

The code I'm using is:

- name: Set hostname
  shell: hostnamectl set-hostname {{ item }}
  with_items: "{{ groups['all'] }}"

Unfortunately, code iterate all items (both IPs and hostnames) and assigns to all 3 hosts the last item...

Any help would be much appreciated.

Upvotes: 2

Views: 1098

Answers (1)

Zeitounator
Zeitounator

Reputation: 44799

Don't loop: this is going through all your hosts on each target. Use only the natural inventory loop and the inventory_hostname special var.

Moreover, don't use shell when there is a dedicated module

- name: Assign hostname
  hosts: all
  gather_facts: false

  tasks:
    - name: Set hostname for target
      hostname:
        name: "{{ inventory_hostname }}"

Upvotes: 3

Related Questions