Evita declaração de instruções se regex ao usar recursos exportados no fantoche

2

Evite adicionar um host manualmente

class::define {  [
    'host1.domain',
    'host2.domain'
  ]:
    attribute  => 'hello',
    attribute2 => 'world'
}

class::define {  [
    'host3.domaintwo',
    'host4.domaintwo'
  ]:
    attribute  => 'apple',
    attribute2 => 'orange'
}

usando recursos exportados:

if $fqdn =~ /^.*\.domain$/ {
  @@class::define { $fqdn:
    attribute  => 'hello',
    attribute2 => 'world',
    tag => 'test'
  }
}

if $fqdn =~ /^.*\.domaintwo$/ {
  @@class::define { $fqdn:
    attribute  => 'apple',
    attribute2 => 'orange',
    tag => 'test2'
  }
}

Class::define <<| tag == 'test' and tag == 'test2' |>> 

funciona como esperado.

Pergunta

As declarações if podem ser omitidas para obter o mesmo resultado?

    
por 030 15.02.2015 / 19:15

1 resposta

2

Ao tornar as exportações incondicionais, você provocará uma colisão, porque o manifesto agora declara o recurso exportado

Class::Define[$fqdn]

duas vezes (com atributos diferentes).

Você pode evitar isso permitindo que o FQDN seja passado como um valor de atributo, em vez de esperar que seja o título do recurso.

@@class::other_define {
    "hello-$fqdn":
        fqdn => $fqdn,
        attribute  => 'hello',
        attribute2 => 'world',
        tag => 'test';
    "fruit-$fqdn":
        fqdn => $fqdn,
        attribute  => 'apple',
        attribute2 => 'orange',
        tag => 'test2';
}

Apenas certifique-se de ainda usar o fqdn fact em títulos de recursos, para que as exportações de agentes distintos não colidam.

Como um aparte, não sei por que você escolhe tags distintas e por que importar apenas recursos que possuem ambas tags "como esperado". Na verdade, eu esperaria que não importasse nada.

    
por 18.02.2015 / 23:48

Tags