Назад | Перейти на главную страницу

Класс Puppet Package не может обнаружить установленный пакет при наличии нескольких версий

Я пытаюсь установить 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']}",
}