Назад | Перейти на главную страницу

ansible playbook, передать инвентарь в качестве переменной?

Я хотел бы переопределить переменную target_host из башни в playbook. Легко переопределить любую другую переменную playbook, но я не могу заставить значение hosts работать; всегда жалуется, что не указан хост.

---
- hosts: "{{ target_host }}"
  gather_facts: no
  vars:
    target_host: "10.80.100.163,"
  remote_user: root

  tasks:
  - name: Add users | create users, shell, home dirs
    user:
      name: bubba
      shell: /bin/bash
      createhome: yes
      password: $6$pGO4DKLQ$Eu97vmle/Zvb53gVCXGecfZzvYVd4twj8/EOMwmbYgCUkRAxsWQVXtFrxdZGal6hSLnY..5b/4x1MweH5ierz.
      comment: "Created with Ansible"

Надеясь, что вам не придется (научиться) создавать динамический инвентарь для одного IP, есть ли способ сделать это?

Спасибо!

Вы можете использовать доступный модуль: add_host https://docs.ansible.com/ansible/latest/modules/add_host_module.html

---
- hosts: "localhost"
  gather_facts: no
  tasks:
  - name: Add host
    add_host:
      hostname: "{{ your_new_hostname }}"
      groups: "group_for_new_hostname"
      ansible_user: "{{ ssh_user }}"
      ansible_ssh_pass: "{{ ssh_pass }}"

- hosts: "group_for_new_hostname"
  tasks:
  - name: Add users | create users, shell, home dirs
    user:
      name: bubba
      shell: /bin/bash
      createhome: yes
      password: $6$pGO4DKLQ$Eu97vmle/Zvb53gVCXGecfZzvYVd4twj8/EOMwmbYgCUkRAxsWQVXtFrxdZGal6hSLnY..5b/4x1MweH5ierz.
      comment: "Created with Ansible"

Предполагая, что ваш файл playbook - pb.yaml, и он выглядит так:

---
- name: A playbook name
  #  by default all belonging to tomcat childs go affected
  #  use -e varmcat=someinvhost to override target host explicitly
  hosts: "{{ vartomcat | default('tomcat') }}"
  roles:
    - role: role1
    - role: role2

  tasks:
    - name: task
      ....... 

Пример файла инвентаризации inv.yaml для следующего вида:

---
all:
  hosts:
    hostA: &hostA
      ansible_host: serverA.domain.com
    hostX1: &hostX1
      ansible_host: serverX1.domain.com
    hostX2: &hostX2
      ansible_host: serverX2.domain.com
    hostB: &hostB
      ansible_host: serverB.domain.com
    hostY1: &hostY1
      ansible_host: serverY1.domain.com
    hostY2: &hostY2
      ansible_host: serverY2.domain.com

  children:
    tomcat:
      hosts:
        hostA:
        hifsB:
    groupX:
      hosts:
        hostX1:
        hifsX2:
    groupY:
      hosts:
        hostY1:
        hifsY2:

И поэтому вы можете переопределить вартомат либо конкретному хозяину, либо другой группе

ansible-playbook -i inv.yaml pb.yaml -e vartomcat=hostA

ansible-playbook -i inv.yaml pb.yaml -e vartomcat=hostX1

ansible-playbook -i inv.yaml pb.yaml -e vartomcat=groupY

если вы не отменяете:

ansible-playbook -i inv.yaml pb.yaml 

в Кот группа используется по умолчанию