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

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

Error: Could not apply complete catalog: Found 1 dependency cycle:
(Anchor[apt::ppa::ppa:saltstack/salt] => Apt::Ppa[ppa:saltstack/salt] => class[Pp_package_manager] => Class[User_manager] => User_manager::User[coder] => User[coder] => File[/etc/default/perfectpitch] => Class[Pp_package_manager])

Я пытаюсь понять, о чем мне говорит эта ошибка, но знаки => сбивают меня с толку. Я также пытался открыть файл .dot, используя флаг --graph, но это меня тоже смущает. Мне бы хотелось получить руководство https://gist.github.com/supereman16/1ff46d6fbb1c7ac9b709.

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


person Ethan Brouwer    schedule 06.07.2015    source источник


Ответы (1)


Прочтите эту статью об отношениях и упорядочении в puppet.

В итоге. Puppet — это декларативный язык, на котором вы описываете желаемое состояние вашей системы (а не то, как его достичь). Поэтому, когда он компилирует код манифеста в каталог, он пытается установить порядок, в котором ресурсы должны быть реализованы для достижения желаемого состояния (он создает граф зависимостей).

Например, вы не можете запустить сервер mysql, если не установите пакет mysql.

Как правило, puppet правильно решает отношения между ресурсами. Но иногда ему нужна помощь. Для каждого ресурса вы можете вручную определить отношения между другими ресурсами, используя before, require, notify, subscribe метапараметры. К сожалению, с помощью этих метапараметров можно легко создать цикл зависимостей.

E.g

file { a: require => File['b'] }
file { b: require => File['c'] }
file { c: require => File['a'] }

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

В предоставленном вами сообщении a => b означает выполнение ресурса a перед ресурсом b. Вы получили цикл зависимостей: ...=> class[Pp_package_manager] => ... Class[Pp_package_manager]. Я предполагаю, что вы определили отношения File[/etc/default/perfectpitch] => Class[Pp_package_manager] и class[Pp_package_manager] => Class[User_manager] , что вызывает ошибку.

person kkamilpl    schedule 06.07.2015
comment
Ты был прав. Я просто переключил pp_package_manager и user_manager, и это сработало... вроде того. Сейчас просто не запускается. См. этот вопрос - stackoverflow.com/questions/31254892/ - person Ethan Brouwer; 07.07.2015