Кукольный будет содержать все определенные типы, объявленные внутри другого определенного типа (или класса). Насколько я понимаю, это означает, что любой заявленный источник будет зависеть от контейнера. Это приведет к петле зависимостей:Puppet: объявить ресурс без содержания
define user {
}
define bar {
user { $name: }
->
Bar[$name]
}
bar { 'foo': }
Error: Could not apply complete catalog: Found 1 dependency cycle: (User[foo] => Bar[foo] => User[foo])
Есть ли способ избежать этого? У меня есть один конкретный случай, где я бы предпочел, чтобы после объявления Bar[$name]
было объявлено также User[$name]
, но Bar[$name]
зависит от User[$name]
, а не наоборот. В основном такое же поведение, как и require
, но для зависимости определенного типа.
Есть ли какой-либо способ сделать это, или это единственное решение, чтобы иметь манифест об объявлении Bar[$name]
объявить User[$name]
, а также (и затем добавить зависимость от любого тела bar
или в объявлении манифеста?
более реалистичный пример:
define servize {}
define appserver {
user { $name: }
->
servize { $name: }
}
appserver { 'app': }
# the deploy application needs a directory owned by itself on startup
file { '/tmp/foobar':
ensure => directory,
owner => 'app', # auto-require
}
->
Appserver['app']
Не совсем вычислит. 'User [$ name]' объявляется 'Bar [$ name]', поэтому вам действительно нужно иметь * все ресурсы, объявленные * Bar [$ name] '*, которые не являются *' User [$ name] 'зависит от' User [$ name] ', правильно? Не будет ли прямо выражать это? –
@FelixFrank Я уже это делаю. Но зависимость 'user' от' appserver' по-прежнему остается проблемой. Мой пример немного упрощен. Проверьте мое редактирование. В этом случае вы можете разбить цикл, добавив зависимость вместо «Servize» (и далее разрушите абстракцию ...), но в более сложных сценариях я иногда по-прежнему получаю циклы из зависимостей службы. Просто не нужно и нежелательно «зависящий от пользователя» сервер приложений. Хотелось бы, чтобы это был вариант создания/обеспечения_ресурсов, который создавал бы ресурсы и позволял им плавать в графе (например, классы). – Artefacto