Я пытаюсь установить kernel-devel
пакет, соответствующий запущенной версии ядра.
Мое предположение было:
package { 'kernel-devel':
ensure => "${facts['kernelrelease']}",
}
но это не сработает, если более одного kernel-devel
пакет уже установлен. Это ошибка, которую я получаю:
Error: Could not update: Failed to update to version 3.10.0-957.21.3.el7.x86_64, got version 3.10.0-957.21.3.el7; 3.10.0-1062.4.3.el7; 3.10.0-1062.9.1.el7 instead
Таким образом, пакет уже установлен, но класс Package вызывает ошибку, потому что (по-видимому) он выполняет сравнение строк вместо просмотра списка версий.
Как правильно с этим справиться?
Если я не ошибаюсь, вы можете решить эту проблему с помощью версии, указанной в заголовке ресурса.
package { "kernel-devel-${facts['kernelrelease']}":
ensure => present,
}
Или, если у вас есть другие ресурсы, которые зависят от 'kernel-devel', вы можете использовать атрибут name.
package { 'kernel-devel':
name => "kernel-devel-${facts['kernelrelease']}",
ensure => present,
}
[root@aaron ~]# dnf list installed kernel-devel
Installed Packages
kernel-devel.x86_64 5.3.11-200.fc30 @updates
kernel-devel.x86_64 5.3.14-200.fc30 @updates
[root@aaron ~]# uname -a
Linux aaron 5.3.15-200.fc30.x86_64 #1 SMP Thu Dec 5 15:18:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@aaron ~]# puppet apply kernel-devel.pp
Notice: Compiled catalog for aaron.tsp in environment production in 0.54 seconds
Notice: /Stage[main]/Main/Package[kernel-devel-5.3.15-200.fc30.x86_64]/ensure: created
Notice: Applied catalog in 62.18 seconds
[root@aaron ~]# dnf list installed kernel-devel
Installed Packages
kernel-devel.x86_64 5.3.11-200.fc30 @updates
kernel-devel.x86_64 5.3.14-200.fc30 @updates
kernel-devel.x86_64 5.3.15-200.fc30 @updates
Я недавно столкнулся с тем же самым. Я не уверен, что есть хороший способ справиться с этим, судя по сообщениям об ошибках, которые я обнаружил, по-видимому, Puppet действительно не хочет признавать, что может быть установлено несколько версий пакета, поскольку это нарушает их модель ресурсов.
Я думаю, единственное, что вы можете сделать, это вернуться к использованию exec
, что-то вроде
exec { "yum install kernel-devel-${facts['kernelrelease']}":
path => $facts['path'],
unless => "rpm -qa kernel-devel | grep -q ${facts['kernelrelease']}",
}