Рассмотрим следующий код:
file { '/etc/systemd/system/docker.service.d/http-proxy.conf':
ensure => 'present',
owner => 'root',
group => 'root',
mode => '644',
content => '[Service]
Environment="HTTP_PROXY=http://10.0.2.2:3128"
Environment="HTTPS_PROXY=http://10.0.2.2:3128"
',
notify => Exec['daemon-reload'],
require => Package['docker-ce'],
}
exec { 'daemon-reload':
command => 'systemctl daemon-reload',
path => '/sbin',
refreshonly => true,
}
service { 'docker':
ensure => 'running',
subscribe => File['/etc/systemd/system/docker.service.d/http-proxy.conf'],
require => Exec['daemon-reload'],
}
Я хотел бы отредактировать какой-нибудь сервис systemd.В этом случае это среда для докера, но может потребоваться любая другая необходимость.
Поскольку файл системного модуля был изменен, systemctl daemon-reload
должен быть запущен для новой конфигурацииПодниматься.
Запуск puppet apply
завершается неудачно:
Notice: Compiled catalog for puppet-docker-test.<redacted> in environment production in 0.18 seconds
Notice: /Stage[main]/Main/File[/etc/systemd/system/docker.service.d/http-proxy.conf]/ensure: defined content as '{md5}dace796a9904d2c5e2c438e6faba2332'
Error: /Stage[main]/Main/Exec[daemon-reload]: Failed to call refresh: Could not find command 'systemctl'
Error: /Stage[main]/Main/Exec[daemon-reload]: Could not find command 'systemctl'
Notice: /Stage[main]/Main/Service[docker]: Dependency Exec[daemon-reload] has failures: false
Warning: /Stage[main]/Main/Service[docker]: Skipping because of failed dependencies
Notice: Applied catalog in 0.15 seconds
Причина очевидна: systemctl
живет в /bin
, а не /sbin
, как настроено.Однако, исправив это, затем снова запустив puppet apply
, не приведет ни к перезапуску службы, ни к запуску systemctl daemon-reload
:
Notice: Compiled catalog for puppet-docker-test.<redacted> in environment production in 0.19 seconds
Notice: Applied catalog in 0.16 seconds
Очевидно, это происходит из-за того, что в файловом ресурсе не было никаких изменений (поскольку он был применен при неудачном запуске), который обновил бы daemon-reload и затем запустил службу для перезапуска.
Чтобы заставить puppet перезагрузить службу и перезапустить ее, я мог изменить содержимоефайла на диске, я мог бы изменить содержимое кода марионетки, но ощущается как Мне не хватает лучшего способа сделать это.
Как лучше восстановиться после такого сценария?Или, как написать кукольный код, который не имеет этой проблемы?