2015-05-30 3 views
1

Я переношу Makefile в серию задач Ansible. Файл Марка имеет следующие две строки кода, которые беспокоят меня, когда дело доходит до анзибль:Выполнение команд bash в Ansible task

SERVERS := shell mysql "select hostname from servers" 
EASY_INSTALL := wget https://bootstrap.pypa.io/ez_setup.py -O - | python 

Во-первых, что соответствующий способ анзибль использовать динамический vars для значения СЕРВЕРОВ? Значение серверов будет зависеть от среды, то есть стадии, производства и т. Д.

Во-вторых, я не хочу устанавливать пакет python-setuptools из aptitude, потому что в прошлом у меня не было ничего, кроме проблем с ним. Итак, как мне запустить команду оболочки wget с помощью Ansible?

ответ

3

Похоже, вы хотите загрузить скрипт, а затем запустить его как команду против нескольких серверов.

Концепция «хостов» в книге «Ansible playbook» охватывает концепцию «серверов» - вам нужно будет заполнить инвентарь, который Ansible может прочитать для хостов, или даже, возможно, передать хосты в виде переменной при запуске playbook (позволяет вызывать эту переменную «серверы»).

wget и запуск различных команд - все стандартные модули Ansible (get_url - это обобщенное имя для wget).

Итак, пример сборник пьес:

- hosts: "{{ servers }}" 
    tasks: 
    - name: get a file 
     get_url: 
     url: "https://bootstrap.pypa.io/ez_setup.py" 
     dest: "/usr/ez_setup.py" 

    - name: run a command 
     command: "python /usr/ez_setup.py" 

Вы бы затем вызвать над сборником пьес (назовем его shipit.yaml), как это:

ansible-playbook /usr/shipit.yaml --extra-vars "servers=10.0.0.1" 

Можно также использовать модуль add_hosts и пользовательский имя группы, чтобы динамически считывать серверы из вашей базы данных, а затем заполнять настраиваемую группу, а затем запускать следующий набор команд с этой настраиваемой группой как элемент hosts.

Вы можете изменять размеры в зависимости от того, требуется ли поддержка sudo (sudo: yes) или нет, и может быть лучший способ запуска вашего сценария python, чем использование команды (команда будет запускаться каждый раз, независимо от того, был запущен - не идемпотент, другими словами).

Надеюсь, вышесказанное даст вам хорошую отправную точку.

+0

Это хорошее начало. Я думаю, что модуль add_hosts - лучший выбор. Сначала нужно проверить его, а затем принять ответ –

+0

В get_url есть синтаксическая ошибка. Это должно быть get_url: url = URL dest = PATH –

+0

Итак, вы просто запускаете код из Интернета на своем компьютере! – jpic

Смежные вопросы