Вы хотите начать с проверки отсутствия устаревшего пакета.
package { 'docker':
ensure => absent,
}
Но вы не можете использовать Package['docker']
, потому что новый модуль puppetlabs-docker уже объявляет об этом. Вы должны сделать что-то вроде этого:
package { 'legacy-docker':
ensure => absent,
name => 'docker',
}
Существует ряд устаревших обязательных пакетов , которые также необходимо удалить.
package { [
'docker-client',
'docker-client-latest',
'docker-common',
'docker-latest',
'docker-latest-logrotate',
'docker-logrotate',
'docker-selinux',
'docker-engine-selinux',
'docker-engine',
]:
ensure => absent,
}
Итак, все вместе, этот порядок, кажется, работает неявно.
package { 'legacy-docker':
ensure => absent,
name => 'docker',
}
package { [
'docker-client',
'docker-client-latest',
'docker-common',
'docker-latest',
'docker-latest-logrotate',
'docker-logrotate',
'docker-selinux',
'docker-engine-selinux',
'docker-engine',
]:
ensure => absent,
}
include docker
На самом деле, это, кажется, вызывает проблемы при последующих запусках манифеста ... общие зависимости второго уровня удалены!
Error: Execution of '/bin/rpm -e container-selinux-2.68-1.el7.noarch' returned 1: error: Failed dependencies:
container-selinux >= 2.9 is needed by (installed) docker-ce-18.06.1.ce-3.el7.x86_64
Error: /Stage[main]/Profile::Docker/Package[docker-selinux]/ensure: change from '2:2.68-1.el7' to 'absent' failed: Execution of '/bin/rpm -e container-selinux-2.68-1.el7.noarch' returned 1: error: Failed dependencies:
container-selinux >= 2.9 is needed by (installed) docker-ce-18.06.1.ce-3.el7.x86_64
Error: Execution of '/bin/rpm -e container-selinux-2.68-1.el7.noarch' returned 1: error: Failed dependencies:
container-selinux >= 2.9 is needed by (installed) docker-ce-18.06.1.ce-3.el7.x86_64
Error: /Stage[main]/Profile::Docker/Package[docker-engine-selinux]/ensure: change from '2:2.68-1.el7' to 'absent' failed: Execution of '/bin/rpm -e container-selinux-2.68-1.el7.noarch' returned 1: error: Failed dependencies:
container-selinux >= 2.9 is needed by (installed) docker-ce-18.06.1.ce-3.el7.x86_64
Что ж, ресурс пакета не имеет свойства refreshonly
, поэтому нам нужно прибегнуть к ресурсу exec. Тьфу.
package { 'legacy-docker':
ensure => absent,
name => 'docker',
notify => Exec['autoremove'],
}
exec { 'autoremove':
command => '/usr/bin/yum -y autoremove',
refreshonly => true,
}
include docker
Это ... разумно? Единственное, что может быть упорядочением, вы можете изучить явное упорядочение ресурсов, используя ->
.