Há algumas coisas que você pode fazer para abordar esse problema, o que tornará seu código melhor a longo prazo.
- Use a biblioteca stdlib que melhorou as operações de comparação de strings, como
versioncmp()
. Ele funcionará corretamente com seqüências de caracteres de versão que tenham decimais e letras.
if versioncmp($::puppetversion, '3.0.0') < 0 {
fail("foobar requires puppet 3.0.0 or greater, found: \'${::puppetversion}\'")
}
- Não faça suas declarações condicionais dentro de seu recurso. No mínimo, divida-os para que eles estejam no topo do seu manifesto. (Código não testado)
if versioncmp( '$openssl', '1.1.3e') < 0 {
$openssl_version = '42'
}
package {'openssl':
ensure => "$openssl_version",
}
No entanto, você tem que se perguntar: isso é realmente o que você quer fazer? As melhores práticas de marionetes são que seus requisitos de negócios não devem fazer parte de seus módulos de base. Eles devem ser abstraídos para papéis / módulos de perfis ou com hiera. Você pode estar melhor com as seguintes opções.
Apenas certifique-se de que todos os seus servidores estejam atualizados
package {'openssl':
ensure => latest,
}
Se você tiver alguns nós, apenas deve usar uma versão mais antiga / insegura. Em seguida, faça uma classe com parâmetros e substitua o parâmetro openssl_version
por hiera ou role / profile.
Informação adicional