LINUX.ORG.RU
ФорумAdmin

Расстановка зависимостей.

 


1

2

Это только пример. Реальные классы чуть сложнее:

Есть класс A, представляющий папочку (/opt/trash), есть множество классов C_i, представляющих программы, которые в эту папочку ставятся. У каждого класса (А и C_i) есть параметр ensure, который может принимать значения present и absent. Папочка может понадобиться сама по себе, без установленных программ.

Если существует хотя бы один С_i c ensure == present, то A::ensure тоже должно быть present

Если A::ensure == present, то A должно предшествовать всем С_i (в терминах require/before)

Если A::ensure == absent, то наоборот: Все С_i предшествуют A,

Очень желательна возможноть не упоминать A в описании ноды без необходимости.

Можно ли такие взаимоотношения вбить в puppet-манифесты?

★★

Ответ на: комментарий от router

Есть подозрение, что тебе нужны виртуальные ресурсы. Я их не использовал, поэтому примеров манифеста нет

Непонятно, как они могут здесь помочь. Если есть С_i c разными ensure, то они должны вызвать realize для разных вариантов A и будет конфликт.

Пока склоняюсь к варианту потребовать обязательно подключать A в описании ноды до использования С_i'тах, затем в С_i'тых проверить A::ensure и, если оно установленно в absent, проигнорировать С_i::ensure, считая его тоже установленным в absent.

Как удовлетворить все 4 требования я не знаю.

ival ★★
() автор топика
Ответ на: комментарий от Log_in

Не должно. Должно быть в обратную сторону:

A::ensure => absent должно повлечь С_i::ensure => absent для всех C_i'тых

ival ★★
() автор топика
Ответ на: комментарий от ival

Это противоречит исходному посылу

Если существует хотя бы один С_i c ensure == present, то A::ensure тоже должно быть present

Log_in
()
Ответ на: комментарий от Log_in

A::ensure => absent должно повлечь С_i::ensure => absent для всех C_i'тых

Если существует хотя бы один С_i c ensure == present, то A::ensure тоже должно быть present

Эти два утверждения эквивалетны, согласно двум правилам:

Правило контропозиции A->B влечет not B -> not A. Например, утверждение «если человек является админом, то он бородат» влечет «если человек не бородат, то он не админ»

Правило обращения кванторов: not \exists x P(x) <-> \forall x not P(x): утверждение «не существует бородатых админов» эквивалентно утверждению «все админы безбородые»

ival ★★
() автор топика
Последнее исправление: ival (всего исправлений: 1)
Ответ на: комментарий от ival

Бред. Из того что человек бородат, не следует автоматически, что он админ. Рассматривается ситуация:

Если существует хотя бы один С_i c ensure == present, то A::ensure тоже должно быть present

Все кто носит свитер и/или бороду — админы.

И в то же время утверждается:

A::ensure => absent должно повлечь С_i::ensure => absent для всех C_i'тых

Если человек — не админ, то он не может носить ни свитер, ни бороду.

Log_in
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.