收到通知且参数设置为 true 时人偶重启

Puppet reboot when notifed AND parameter set to true

我在 init.pp 中有一个共享的 puppet 重启块,并且还希望有一个默认为 false 的 $autorestart 全局参数,以便全局选择加入重启。在一个子类中,我有一些资源,例如 file_line 更改设置,这些设置通常在重新启动之前不会生效,但这些不会设置需要重新启动的 OS 标志(例如写入 audit.rules 或 sysctl.conf), 所以设置这些通知 => Reboot[after_run].

我知道一些子类函数可以在服务重启时生效,但这不是我在这里尝试做的,例如 auditd 是一个受保护的服务。

我尝试将全局重启资源放在 'if $autorestart' 块中,但是如果全局 $autorestart 设置为 false,子类资源上的通知将无法编译。我尽量保持它的灵活性和简单性。

init.pp:

Boolean $autorestart = false,
…
  if $autorestart {
    reboot { 'after_run':
      apply   => 'finished',
      timeout => 60,
    }
  }

subclass.pp:

    file_line { 'net.ipv6.conf.all.disable_ipv6':
      path  => '/etc/sysctl.conf',
      line  => 'net.ipv6.conf.all.disable_ipv6 = 1',
      match => '^net.ipv6.conf.all.disable_ipv6.*',
      notify => Reboot['after_run'],
    }

错误

Could not find resource 'Reboot[after_run]' in parameter 'notify'

我也试过 puppet-reboot 'onlyif' 参数,但这只接受特定条件,不测试参数值。 https://forge.puppet.com/puppetlabs/reboot#reboot-when-certain-conditions-are-met

感谢任何帮助。

... but then the notify on the subclass resource fails to compile if the global $autorestart is set to false

这个问题可以通过在条件中移动关系元参数来解决,即

if $autorestart {
  reboot { 'after_run':
    apply     => 'finished',
    timeout   => 60,
    subscribe => File_line['net.ipv6.conf.all.disable_ipv6'], ## ADD THIS
  }
}

(当然还要从您的 file_line 资源中删除通知。)