2014-02-14 4 views
3

Я очень новичок с незаменимым. Я пишу некоторые плейбуки и хорошо, это потрясающе. Однако я застрял в очень простой задаче администратора, которую каждый администратор должен научиться управлять. Сценарий очень распространен, много серверов: ubuntu, centos, серверы разных клиентов и т. Д.Ansible and crontabs

Мой вопрос в том, как я должен организовать свою управляемую структуру для управления crontabs разных серверов?

Я написал игровые автоматы, которые могут быть применены к большинству серверов с некоторыми задачами администратора: apt-get udpate, установить ntp-серверы и синхронизировать, но я не нахожу правильного способа сделать несущую структуру файлов (main.yml, host_vars, файлы, шаблоны, роли и т. д.) для управления каждым клином каждого сервера.

У вас есть примеры или советы?

Спасибо !!!

ответ

7

Я знаю, что я не эксперт, но если у какого-то непонятного новичка такая же проблема, как и я, возможно, это может помочь.

Как я уже писал несколько дней назад, вы изучаете возможность, у вас много серверов, вы даже можете установить nginx, php-fpm, mysql и т. Д. В очень новом окне ubuntu/centos через несколько минут. Что я говорю? Не один, а серверы одновременно, мечта. Но о, о, теперь вам нужно установить разные задачи cron на сервере 1-го уровня и на сервере lemp 2.

Затем вам нужно играть с переменными переменными. Когда вы новичок в мире с переменными, переменные могут быть немного сложными.

Я не говорю, что это лучший подход, но, по крайней мере, вам не нужно поддерживать отдельные файлы cron для каждого отдельного сервера.

Во-первых, я проверяю ansible_hostname из LEMP сервера 1

$ ansible lempserver1 -m setup|grep host 
"ansible_hostname": "ns227962", 

, как вы видите, имя хоста, возвращаемое анзибль является ns227962. Тогда у меня есть анзибль структуры, как:

- main.yml | _ роли | _cron | _tasks | _main.yml

в основном из хрон роли у меня есть

--- 
- name: add line to crontab's root - backup 
    cron: name="backup openvz vps" hour="5" minute="1" weekday="7" job="/root/scripts/openvz_backup_vps > /dev/null" 
    when: "ansible_hostname == 'ns227962'" 

Обратите внимание, что инструкция when и ansible_hostname будет делать трюк.

Тогда я применяю main.yml и все

TASK: [cron | add line to crontab's root - backup] *********** 
skipping: [lempserver2] 
changed: [lempserver1] 

Это сработало! :)

В других ситуациях, когда у вас есть одинаковый конфиг файла, но есть части, которые немного отличаются с использованием шаблонов, будет полезно.

Теперь для меня это нормально, теперь я могу централизовать управление серверами кронов только с одной ролью.

Благодаря

+0

Мне совсем не нравится этот подход, так как вам понадобится новая строка в списке задач для каждого нового сервера add, но также, если сервер изменяет свое имя хоста (например, вы его замените), вы можете закончиться без задания cron на этом сервере. Работы Cron не должны быть централизованы, и когда вы думаете об этом, это не так. привязаны к определенной серверной функции, что делает ее естественной для определения кронов в ролях или в играх, которые настраивают определенную серверную функцию. –

+0

Вы помещаете каждое задание cron в одно и то же место? Рассмотрим размер этой пьесы и путаницу может поддерживать его. –

2

Возможно, существует несколько способов кожи этой кошки. Первое, что приходит на ум, - вы можете назначить все серверы одной или нескольким ролям и иметь кроссы, связанные с вашими ролями.

+0

Привет, изначально я думал, что идея такая же, как у вас, но кажется, это не изящное решение :( – Rubendob

2

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

Chronos может быть более подходящим для решения этой задачи.

1

Одним из решений является сохранение заданий cron для приложения с кодом приложения в файле с именем «crontab.txt». Его опционально, но если он существует, Ansible автоматически копирует его в crontab.

- name: Check if cron file exists 
    stat: path=/path/to/config/cron.txt 
    register: cron_file 

- name: Copy crontab if exists 
    shell: crontab /path/to/config/cron.txt 
    when: cron_file.stat.exists is defined and cron_file.stat.exists 

Это создаст новый файл crontab.

ПОТЕНЦИАЛ ВОПРОС: Если у вас есть несколько экземпляров одного и то же приложение, а затем в зависимости от CRONTAB задач, которые могут быть взаимодействующей с центральной базой данных, вы рискуете дублирование задач (делать те же хроны умноженных количество экземпляров приложения, которое вы используете). Решения для этого могут заключаться в том, чтобы включить проверку имени хоста/ip, чтобы задача установки crontab выполнялась только на одном экземпляре.

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