Попытка запустить скрипт с разными аргументами на разных серверах, используя ansible, пример:
server 192.168.0.1 -> fabric.sh generic1 status
server 192.168.0.2 -> fabric.sh generic2dr status
server 192.168.0.3 -> fabric.sh generic3 status
Как использовать переменные в playbook ниже?
Это работает, когда я создаю группу для каждого сервера, но это не эффективно
---
- hosts: esb
remote_user: root
tasks:
- name: Generic_1
become_user: esb
shell: "/home/fabric.sh generic1 status"
Хост-файл:
[esb]
192.168.0.1
192.168.0.2
192.168.0.3
2 ответа
Вы можете установить переменные для каждого хоста в вашем инвентаре. Например, измените свой инвентарь так, чтобы он выглядел так:
[esb]
192.168.0.1 fabric_args="generic1 status"
192.168.0.2 fabric_args="generic2dr status"
192.168.0.3 fabric_args="generic3 status"
А затем используйте переменную fabric_args
в вашей пьесе:
---
- hosts: esb
remote_user: root
tasks:
- name: Generic_1
become_user: esb
shell: "/home/fabric.sh {{ fabric_args }}"
Для получения дополнительной информации прочитайте Использование переменных и Работа с разделами инвентаризации документации Ansible.
Рядом с основным ресурсом есть yaml - использует определенный файл YAML в качестве источника инвентаризации.
Например (подберите переменные в соответствии с вашими потребностями):
$ cat hosts
all:
hosts:
10.1.0.51:
10.1.0.52:
10.1.0.53:
vars:
ansible_connection: ssh
ansible_user: admin
ansible_become: yes
ansible_become_user: root
ansible_become_method: sudo
ansible_python_interpreter: /usr/local/bin/python3.6
ansible_perl_interpreter: /usr/local/bin/perl
children:
esb:
hosts:
10.1.0.51:
run_string: "fabric.sh generic1 status"
10.1.0.52:
run_string: "fabric.sh generic2dr status"
10.1.0.53:
run_string: "fabric.sh generic3 status"
Игра ниже
- hosts: esb
tasks:
- debug:
var: run_string
Дает (сокращенно):
ok: [10.1.0.51] => {
"run_string": "generic1 status"
}
ok: [10.1.0.52] => {
"run_string": "generic2dr status"
}
ok: [10.1.0.53] => {
"run_string": "generic3 status"
}
Похожие вопросы
Новые вопросы
variables
Это амбициозно; ИСПОЛЬЗУЙТЕ СПЕЦИАЛЬНО-ЯЗЫКОВЫЕ ТЕГИ, КОГДА-ЛИБО ПРИМЕНИМЫ Переменная является именованным местом хранения данных в памяти. Используя переменные, компьютерная программа может хранить числа, текст, двоичные данные или комбинацию любого из этих типов данных. Они могут быть переданы в программе.