2015-08-31 2 views
0

Как мне удобно запускать обновление на каком-либо ресурсе при изменении одного из многих других ресурсов (возможно, из разных типов ресурсов), которые были объявлены поблизости, в марионетке 4?Как удобно подписаться на несколько недавно объявленных ресурсов?

E.g.

# these resources 
resource_type1 {...} 
resource_type2 {...} 
resource_type2 {...} 
resource_type2 {...} 
resource_type3 {...} 

# should refresh this when changed 
service {...} 

Я знаю, что я мог бы перечислить каждый ресурс в subscribe и использовать коллекторы ресурсов в нем; но я хотел бы, чтобы что-то более подходящее для хронически ленивого.


Я считал помощью с блоком, но это не работает:

with() || { 
    # these resources 
    resource_type1 {...} 
    resource_type2 {...} 
    resource_type2 {...} 
    resource_type2 {...} 
    resource_type3 {...} 
} 

~> 

# will refresh this when any of them have changed 
service {...} 

Только последний ресурс внутри с блоком инициирует обновление.

Вы можете проверить это для себя с помощью:

with() || { 
    file { '/etc/test': 
    content => 'Change this and notice it does not trigger', 
    } 
    file { '/etc/test2': 
    content => 'foo', 
    } 
} 
~> 
exec {'/bin/echo triggered': 
    refreshonly => true, 
} 

ответ

0

В Кукол 4, в то же время приводит к изрядной котла пластины, надежный способ сделать это состоит в использовании класс для группы ресурсов:

class config { 
    resource_type1 {...} 
    resource_type2 {...} 
    resource_type2 {...} 
    resource_type2 {...} 
    resource_type3 {...} 
} 

class { 'config': } 
~> 
service {...} 

Когда часть класса, вы хотите добавить contain, а также (here's why), например так:

class foo { 
    class { 'foo::config': } 
    ~> 
    service {...} 

    contain 'foo::config' 
} 
Смежные вопросы