Проверка конкретной версии + цикл if и else
Просто начни кукольную. Как все знают, начинать что-либо всегда сложнее всего. Для практики я хочу сделать следующее: я предполагаю, что я должен поместить это в 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 ответ
Есть несколько вещей, которые вы могли бы сделать, чтобы решить эту проблему, что улучшит ваш код в долгосрочной перспективе.
- Используйте библиотеку stdlib, которая улучшила операции сравнения строк, такие как
versioncmp()
, Он будет правильно работать со строками версий, которые имеют десятичные дроби и буквы.
if versioncmp($::puppetversion, '3.0.0') < 0 {
fail("foobar requires puppet 3.0.0 or greater, found: \'${::puppetversion}\'")
}
- Не делайте ваши условные заявления внутри вашего ресурса. По крайней мере, разделите их, чтобы они были наверху вашего манифеста. (Непроверенный код)
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/