Verificação específica da versão + loop if e else

2

inicie o fantoche. Como todo mundo sabe, começar algo é sempre o mais difícil. Bem, para prática eu quero fazer o seguinte: Eu suponho que eu devo colocá-lo em init.pp.

if 'openssl' version == '1.0.2b' or '1.0.2d'
    upgrade to 1.1.1e
else
     do nothing

Atualmente, meu código se parece com isso

 package { 'openssl':
    if 'openssl' version == '1.0.2b' or '1.0.2d' {
        ensure => '1.1.1e'
    }
    else {
    }

Eu tenho vários problemas:

1) Eu não acho que minha sintaxe para a versão do openssl está escrita corretamente. Quando eu faço pesquisa no Google simples eu vejo pessoas garantindo a versão do openssl algo como isto '1.0.1e-15.el6', às vezes é '1.0.1e-16.el6_5.7' Estou confuso em determinar o que está depois do '-'

2) Eu não acho que digitar "openssl" vai fazer o boneco sabe que é openssl

3) Como verificar a versão do openssl? Acho que minha sintaxe if 'openssl' version == 'xxx' não está correta.

    
por user3331457 10.07.2015 / 21:14

1 resposta

0

Há algumas coisas que você pode fazer para abordar esse problema, o que tornará seu código melhor a longo prazo.

  1. 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}\'")
  }
  1. 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

link link

    
por 11.07.2015 / 21:11

Tags