2015-10-21 3 views
1

TLDR:Кукол - не в состоянии выполнить только один раз заказал цепь команд Exec после уведомления

Я не могу настроить упорядоченную цепочку кукол «Exec» команды для запуска только один раз.

Детали:

Я хочу использовать бродячие и кукольных модули для установки виртуальной машины с установленной Redmine и некоторых выборочных данных, загруженных в него. Я использую https://forge.puppetlabs.com/johanek/redmine, и он отлично работает - Redmine установлен и работает.

Моя цель:
Теперь я хочу, чтобы загрузить данные примера в Redmine с использованием REST API:

  1. Создать 1 тестовый проект
  2. Импорт 2 выпуска в этот проект

I хотите запустить 2 простых «Exec», один за другим и ТОЛЬКО ОДИН РАЗ, но я не могу этого достичь, следовательно, вопрос.

Моя текущая работа:
Я попытался подписаться на один из последних шагов в установке Redmine

подписаться => [Exec [ 'rails_migrations']]

и затем импортировать данные, но первый шаг «create-project1» всегда уведомляет второй шаг «import-issues», поэтому он создает дублированные данные. И если вы выполняете брокерское предоставление несколько раз, «импорт-проблемы» создают дубликаты этих проблем. Вот мой код:

exec {'create-project1': 
    subscribe => [Exec['rails_migrations']], 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    creates => "$redmine_install_dir/.data_loaded", 
    command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded", 
    notify => [Exec['import-issues']], 
} -> 
exec {'import-issues': 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    command => "curl WHICH_IMPORTS_ISSUES", 
    refreshonly => true, 
} 

Вопрос:
Как настроить те Exec команды для работы в сети и только один раз?

Im также думает о расширении этой цепи до 5 команд в ближайшем будущем, поэтому имейте это в виду.

ответ

0

вы были почти там с «ТОЛЬКО ОДИН РАЗ» - у кукол есть onlyif свойства, которые вы можете включить в свой блок exec, чтобы проверить, существует ли файл уже существует или нет.

вы могли бы сделать что-то вроде

exec {'create-project1': 
    subscribe => [Exec['rails_migrations']], 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    onlyif => "test ! -f $redmine_install_dir/.data_loaded" 
    command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded", 
    notify => [Exec['import-issues']], 

, которые проверяют на существование $redmine_install_dir/.data_loaded - вы должны быть в состоянии играть немного с тем, чтобы достичь того, чего вы хотите

+0

Я проверил это решение - он предотвращает выполнение «команды», но «уведомление» по-прежнему вызывает обновление до следующего события. Реальный вопрос: может ли это «оповещать» быть остановленным/незапланированным для уведомления следующего «exec»? В будущем, когда я буду, например, 10 execs в цепочке, мне, вероятно, нужно будет добавить «onlyif» для всех из них? – ljader