ansible цикл по ip-адресам в переменном файле вместо инвентаризации



У меня есть проблема, когда PlayBook выполняются несколько раз.У меня есть ip-адрес серверов, установленный в инвентаре, а также в переменном файле.



---
- hosts: servers
gather_facts: no
vars_files:
- input.yml
tasks:

- name: Powering On Servers
local_action: ipmitool -I lanplus -H {{item.consoleofserver}} -U {{item.consoleuser}} -P {{item.consolepassword}} power on
with_items:
- "{{ computeserver }}"


- name: Waiting for Servers to be up
local_action:
wait_for
host={{ item.ipaddress }}
port=22
delay=10
timeout=3600
sudo: false
with_items:
- "{{ computeserver }}"

- name: Configuring ip address on application
lineinfile:
state=present
create=yes
dest=/etc/app/app.conf
regexp='^my_ip =.*'
line='my_ip = {{item.ipaddress}}'
with_items:
- "{{ computeserver }}"
when: ansible_nodename == item.name


Переменный файл-вход.yml



---

computeserver:
- name: compute4
ipaddress: 192.168.211.251
console: 192.168.211.10
consoleuser: administrator
consolepassword: 1


- name: compute5
ipaddress: 192.168.211.253
console: 192.168.211.11
consoleuser: administrator
consolepassword: 1

- name: compute6
ipaddress: 192.168.211.252
console: 192.168.211.12
consoleuser: administrator
consolepassword: 1


Инвентарный файл:



[servers]
192.168.211.251
192.168.211.253
192.168.211.252


Результат:



Ansible-playbook addserver.yml



TASK: [Powering ON Servers]   ***************************************************
changed: [192.168.211.251 -> 127.0.0.1] => (item={'console': '192.168.211.10', 'consolepassword': 1, 'ipaddress': '192.168.211.251', 'name': 'compute4', 'consoleuser': 'administrator'})
changed: [192.168.211.253 -> 127.0.0.1] => (item={'console': '192.168.211.10', 'consolepassword': 1, 'ipaddress': '192.168.211.251', 'name': 'compute4', 'consoleuser': 'administrator'})
changed: [192.168.211.252 -> 127.0.0.1] => (item={'console': '192.168.211.10', 'consolepassword': 1, 'ipaddress': '192.168.211.251', 'name': 'compute4', 'consoleuser': 'administrator'})
changed: [192.168.211.251 -> 127.0.0.1] => (item={'console': '192.168.211.11', 'consolepassword': 1, 'ipaddress': '192.168.211.253', 'name': 'compute5', 'consoleuser': 'administrator'})
changed: [192.168.211.253 -> 127.0.0.1] => (item={'console': '192.168.211.11', 'consolepassword': 1, 'ipaddress': '192.168.211.253', 'name': 'compute5', 'consoleuser': 'administrator'})
changed: [192.168.211.252 -> 127.0.0.1] => (item={'console': '192.168.211.11', 'consolepassword': 1, 'ipaddress': '192.168.211.253', 'name': 'compute5', 'consoleuser': 'administrator'})
changed: [192.168.211.251 -> 127.0.0.1] => (item={'console': '192.168.211.12', 'consolepassword': 1, 'ipaddress': '192.168.211.252', 'name': 'compute6', 'consoleuser': 'administrator'})
changed: [192.168.211.253 -> 127.0.0.1] => (item={'console': '192.168.211.12', 'consolepassword': 1, 'ipaddress': '192.168.211.252', 'name': 'compute6', 'consoleuser': 'administrator'})
changed: [192.168.211.252 -> 127.0.0.1] => (item={'console': '192.168.211.12', 'consolepassword': 1, 'ipaddress': '192.168.211.252', 'name': 'compute6', 'consoleuser': 'administrator'})


Таким образом,вместо добавления серверов в файл инвентаризации я могу сказать ansible использовать ip-адрес, определенный в переменном файле, для использования в качестве целевых серверов, это может исправить цикличность на том же сервере снова и снова.

575   2  

2 ответов:

Вы можете ограничить задачу, которая будет выполнена только один раз, с помощью run_once СВОЙСТВО .

- name: Powering On Servers
  local_action: ipmitool -I lanplus -H {{item.consoleofserver}} -U {{item.consoleuser}} -P {{item.consolepassword}} power on
  run_once: true
  with_items: computeserver

Существует add_host модуль .

Вы должны быть в состоянии сделать что-то вроде этого:

- hosts:
  - localhost
  gather_facts: no
  vars_files:
  - input.yml
  tasks:
  - add_host: hostname={{ item.ipaddress }} groups=generated_group
    with_items: computeserver

- hosts: generated_group
  tasks:
  ... your other tasks

Comments

    Ничего не найдено.