До недавнего времени у меня создалось впечатление, что простое объявление ресурса с различными атрибутами гарантирует, что Puppet управляет ресурсом и возвращает его в настроенное состояние в случае его изменения.
Сегодня я обнаружил, что для настроенного мной ресурса yumrepo это не так, пока я не добавил audit => all
метапараметр ресурса. я удалил /etc/yum.repos.d/foo.repo
и побежал puppetd --test
. Puppet не воссоздала ресурс. Указывает ли это на дефект Puppet?
Если это предполагаемое поведение, возникает вопрос, какие еще ресурсы требуют audit => all
сообщить Puppet, что нужно управлять состоянием ресурса, если оно изменяется в управляемой системе?
Вот класс репозитория:
class yum::therepo {
# Temporarily remove the Yum repo configuration if we don't have
# httpd yet.
exec { 'disable-the-repo-to-get-its-dependencies':
provider => shell,
command => 'rm -f /etc/yum.repos.d/the.repo',
unless => 'rpm -q httpd',
onlyif => 'test -f /etc/yum.repos.d/the.repo',
before => [Package['httpd'], Exec['httpd-for-yum'],],
path => '/bin:/usr/bin',
}
# Ensures httpd is running as a Yum server before anything else
# tries to install packages from it.
exec { 'httpd-for-yum':
provider => shell,
command => '/sbin/service nginx stop || true ; /sbin/service httpd restart',
require => Class['yum::server'],
}
yumrepo {
"the":
require => [Exec['httpd-for-yum'],],
descr => "The YUM Repo",
baseurl => "http://yum/repos/redhat/5/x86_64/",
gpgcheck => "0",
enabled => "1",
# One puppet run failed to recreate the.repo. I added audit
# => all, and the next puppet run did recreate the.repo.
# Possibly a red herring. I'd like to understand why it
# worked in one case and not in the other.
#audit => all,
}
}
И класс сервера Yum:
class yum::server {
include httpd
include iptables
package { ['createrepo']:
ensure => present;
}
exec { 'update-repo-metadata':
require => [ Package['createrepo']],
cwd => '/var/www/html/yum',
command => '/usr/bin/createrepo --update -d repos/redhat/5/x86_64/',
creates => '/var/www/html/yum/repos/redhat/5/x86_64/repodata/repomd.xml',
}
file {'/etc/httpd/conf.d/yum.conf':
ensure => file,
mode => 0644,
source => "puppet:///modules/yum/yum_httpd.conf",
require => Package['httpd'],
notify => Service['httpd'],
}
}
Я думаю, вы неправильно понимаете флаг аудита, но не могли бы вы опубликовать свой раздел ресурсов yum, поскольку это очень поможет. Обычно нет, вам не нужен аудит для ресурса yumrepo, чтобы он создал файл .repo.
Создание большинства типов ресурсов Puppet без ensure
свойство - неопределенное поведение. Конечно, Puppet знает о ресурсе, но, не зная, каким должно быть конечное состояние, Puppet не может сделать с ним ничего полезного.
В качестве примера попробуйте puppet apply
следующий фрагмент кода:
file { '/testfile': }