Sim, você pode usar essa definição fora da classe em que foi criada, mas pode ser necessário incluir a classe para garantir que a definição seja analisada primeiro e o nome do recurso individual seja baseado na classe na qual a definição está inserida. não onde a classe é chamada.
Aqui está um exemplo completo de teste testado (testado no CLI com aplicação de fantoches e nodename correto):
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'])
}
A saída confirma que ambos acontecem:
notice: realized foo 1st_foo
notice: realized foo 2nd_foo