У меня вопрос о виртуальных ресурсах в марионетке. Если бы у меня был:
class foo::virtual
{
define foo () {
custom_resource { $name:
<attributes>,
}
}
@foo { '1st_foo':
<attributes>,
}
}
Я могу realize(Foo::Virtual::Foo['1st_foo'])
в объявлении узла.
Однако я хотел бы извлечь спецификацию каждого виртуального foo в отдельное место, где-нибудь помимо спецификации класса foo :: virtual и определения foo ().
По аналогии у меня есть класс с именем common :: data, который предоставляет значения по умолчанию для различных переменных:
class common::data {
$barList = [ 'a','b','z']
}
Есть ли способ объявить @foo { '2nd_foo': }
из common :: data? А затем сослаться на это в объявлении узла?
Да, вы можете использовать это определение вне класса, в котором оно создано, но вам может потребоваться включить класс, чтобы убедиться, что определение сначала проанализировано, а имя отдельного ресурса основано на классе, в котором находится определение, а не на том, где класс называется.
Вот полный рабочий протестированный пример (протестирован на CLI с применением марионетки и правильным именем узла):
class foo::virtual {
define foo() { notify { "test${title}": message => "realized foo ${title}" } }
@foo { '1st_foo': }
}
class common::data {
include foo::virtual
@foo::virtual::foo { '2nd_foo': }
}
node default {
include common::data
realize(Foo::Virtual::Foo['1st_foo'])
realize(Foo::Virtual::Foo['2nd_foo'])
}
Вывод подтверждает, что оба произошли:
notice: realized foo 1st_foo
notice: realized foo 2nd_foo