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:
- 和notify/subscribehttps://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html#syntax-relationship-metaparameters
- 带链接箭头https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html#syntax-chaining-arrows
使用 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
我是 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:
- 和notify/subscribehttps://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html#syntax-relationship-metaparameters
- 带链接箭头https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html#syntax-chaining-arrows
使用 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