Можно ли передавать ссылки на ресурсы марионетки другим ресурсам? Мой вариант использования - построить конвейер сборки jenkins с марионеткой. Чтобы связать рабочие места Дженкинса в конвейер, мне нужно передать работу преемника. Подмножество определения:
jobs::build { "Build ${release_name}":
release => $release_name,
jenkins_jobs_path => $jenkins_jobs_path,
successors => 'Deploy',
}
jobs::deploy { "Deploy ${release_name}":
release => $release_name,
jenkins_jobs_path => $jenkins_jobs_path,
successors => 'Smoke Test',
}
В def вы видите, что я определяю преемников по имени, то есть «Развернуть», а в случае второго задания - «Дымовой тест». Я бы хотел передать ссылку на ресурс и извлечь из него имя:
jobs::build { "Build ${release_name}":
release => $release_name,
jenkins_jobs_path => $jenkins_jobs_path,
successors => Jobs::Deploy["Deploy ${release_name}"],
}
jobs::deploy { "Deploy ${release_name}":
release => $release_name,
jenkins_jobs_path => $jenkins_jobs_path,
successors => Jobs::Smoke_test["Smoke Test ${release_name}"],
}
А затем в определениях jobs :: deploy и jobs :: build я бы получил доступ к ресурсу по ссылке и запросил его тип и т. Д.
Можно ли добиться этого в марионетке?
Да вместо successors
, использовать before
мета параметр. Все ресурсы в Puppet позволяют использовать четыре параметра, которые устанавливают порядок. before
, require
, subscribe
, и notify
четыре мета-параметра отношения. Подписка и уведомление особенно полезны для сигнализации, если ресурс вызывает обновление другого ресурса.
Пожалуйста, посмотрите Руководство по языку кукол Чтобы получить больше информации. В частности, ключевые слова «упорядочивание» и «отношения» должны помочь вам найти информацию, необходимую для решения этой проблемы.
Если я правильно понял, successors
параметр не имеет ничего общего с Puppet's before
мета-параметр, но он должен определять рабочие отношения для Дженкинса.
При этом то, что вы просите, невозможно с Puppet. Вы не можете запрашивать значения из ссылки на ресурс, даже если вы можете передать их в определение в качестве параметра.
Думаю, ты справишься с:
jobs::build { "Build ${release_name}":
release => $release_name,
jenkins_jobs_path => $jenkins_jobs_path,
successors => "Deploy ${release_name}",
}
или с тегами и <| |>
операторы. Но это полностью зависит от содержимого jobs::build
определение и конфигурация, необходимая для Jenkins.
Это больше похоже на работу для Mcollective чем для Марионетки. В общем, с Puppet вы моделируете состояние, а с Mcollective вы моделируете активность. Написание агента MCollective, который управляет конвейером сборки, вероятно, лучший способ пойти, если я правильно понимаю ваши требования. Puppet здесь не особо поможет.