Ansible playbook с переменной

Попытка запустить скрипт с разными аргументами на разных серверах с помощью 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

Как использовать переменные в плейбуке ниже?

Это работает, когда я создаю группу для каждого сервера, но это неэффективно

---
- 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
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Рядом с Базовый инвентарь находится 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"
}
Ответ принят как подходящий

Вы можете установить переменные для хоста в своем инвентаре. Например, измените свой инвентарь, чтобы он выглядел так:

[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.

Спасибо за помощь, это то, что мне было нужно

truegunner 28.05.2019 13:32

Другие вопросы по теме