2

просто начни марионетку. Как все знают, начинать что-либо всегда труднее всего. Для практики я хочу сделать следующее: я полагаю, что я должен поместить его в init.pp.

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

В настоящее время мой код выглядит так

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

У меня есть несколько проблем:

1) Я не думаю, что мой синтаксис для версии openssl написан правильно. Когда я делаю простой поиск в Google, я вижу людей, которые обеспечивают версию openssl примерно так: «1.0.1e-15.el6», иногда это «1.0.1e-16.el6_5.7». Я не понимаю, что следует за «-».

2) Я не думаю, что ввод "openssl" заставит кукол знать, что это openssl

3) Как проверить версию openssl? Я думаю, что мой синтаксис, if 'openssl' version == 'xxx' не является правильным.

1 ответ1

0

Есть несколько вещей, которые вы могли бы сделать, чтобы решить эту проблему, что сделает ваш код лучше в долгосрочной перспективе.

  1. Используйте библиотеку stdlib, которая улучшила операции сравнения строк, такие как versioncmp() . Он будет правильно работать со строками версий, которые имеют десятичные дроби и буквы.

 if versioncmp($::puppetversion, '3.0.0') < 0 {
    fail("foobar requires puppet 3.0.0 or greater, found: \'${::puppetversion}\'")
  }

  1. Не делайте свои условные заявления внутри вашего ресурса. По крайней мере, разделите их, чтобы они были наверху вашего манифеста. (Непроверенный код)

if versioncmp( '$openssl', '1.1.3e') < 0 {
   $openssl_version = '42'
}

package {'openssl': 
  ensure => "$openssl_version",
}

Тем не менее, вы должны спросить себя, действительно ли это то, что вы хотите сделать? Лучшие практики Puppet - это то, что ваши бизнес-требования не должны быть частью ваших базовых модулей. Они должны быть абстрагированы от модулей ролей / профилей или с hiera. Вам может быть лучше со следующими опциями.

A. Просто убедитесь, что все ваши серверы обновлены

package {'openssl':
  ensure => latest,
}

B. Если у вас есть какие-то узлы, вам просто нужно использовать более старую / небезопасную версию. Затем сделайте параметризированный класс и переопределить параметр openssl_version с hiera или роли / профиля.

Дополнительная информация

https://puppetlabs.com/blog/patching-heartbleed-openssl-vulnerability-puppet-enterprise http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-2/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .