Como posso extrair uma declaração de recurso virtual de fantoches da definição de classe?

2

Eu tenho uma pergunta sobre recursos virtuais em fantoches. Se eu tiver:

class foo::virtual
{
  define foo () {
    custom_resource { $name:
      <attributes>,
      }
  }
  @foo { '1st_foo':
    <attributes>,
  }
}

Eu posso realize(Foo::Virtual::Foo['1st_foo']) em uma declaração de nó.

No entanto, eu gostaria de extrair a especificação de cada foo virtual em um local separado, em algum lugar além da especificação da classe foo :: virtual e define foo ().

Por analogia, tenho uma classe chamada common :: data que fornece valores padrão para várias variáveis:

  class common::data {
    $barList = [ 'a','b','z']
  }

Existe alguma maneira de declarar @foo { '2nd_foo': } dentro dos dados :: comuns? E então se referir a isso em uma declaração de nó?

    
por dotplus 09.01.2012 / 20:10

1 resposta

1

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
    
por 13.01.2012 / 22:43

Tags