Puppet - 使用参数通知 class

Puppet - Notify a class with parameters

我是 puppet 的新手,我一直不知道如何使用参数通知 class。我正在尝试通知我发现的 class,它使用参数运行 update-rc.d:

define myclass::update-rc {
    exec { "update-rc_${title}":
        command => "update-rc.d ${title} defaults",
        cwd => "/tmp",
        path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
        refreshonly => true
    }
}

以及我希望通知它的class:

class mysecondclass {
    file { '/etc/init.d/myscript':
        ensure => file,
        notify => Class['myclass::update-rc { "myscript": } ']
    }
}

失败并出现错误:

Could not find dependent Exec[Myclass::update-rc { "myscript": } ] ...

如果我像这样将 myclass::update-rc { "myscript": } 放在 class 中,它确实有效:

class mysecondclass {
    file { '/etc/init.d/myscript':
        ensure => file,
    }

    myclass::update-rc { "myscript": }
}

但我有点想通知它...有什么办法可以做到这一点吗?

您可以在 Puppet 中通过多种方式通知 class:

使用 subscribe,您需要从 update-rc define 中更新 exec:

exec { "update-rc_${title}":
  command     => "update-rc.d ${title} defaults",
  cwd         => "/tmp",
  path        => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
  refreshonly => true,
  subscribe   => File['/etc/init.d/myscript'],
}

使用通知您将需要更新文件资源:

myclass::update-rc { "myscript": }

file { '/etc/init.d/myscript':
  ensure => file,
  notify => Myclass::Update-rc["myscript"]
}

这是等效的,但使用链接箭头:

file { '/etc/init.d/myscript':
  ensure => file,
} ~>
myclass::update-rc { "myscript": }

注意那里是波浪号而不是普通箭头。

此外,您应该将定义名称从 update-rc 更新为 update_rc:https://docs.puppetlabs.com/puppet/latest/reference/lang_reserved.html#classes-and-defined-types