2015-11-05 53 views
0

我对傀儡很新,而且我一直在关注如何用参数通知一个类。我想通知类,我发现,它运行更新的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 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 mysecondclass { 
    file { '/etc/init.d/myscript': 
     ensure => file, 
    } 

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

但我有点想通知它......有没有办法实现这一目标?

+0

你试图调用定义为一类,它是不是一个类。它看起来只会有一个实例,所以将它改为一个类。 – 123

+1

为什么不将文件放在/etc/init.d中,然后使用服务资源而不是定义的类型进行管理? 'service {'name_of_service':enable => true}'应该处理我认为的'update-rc.d'命令。 – ptierno

回答

2

您可以通知类别中的几种方式木偶:

随着认购,你将需要更新从内部更新EXEC -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, 
    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": } 

注重它的存在波浪线,而不是一个正常的箭头。

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

+0

我希望能够单独离开update-rc类,并在需要时调用它(或者在这种情况下,通知它)...您的解决方案不考虑只设置$ {title}当myclsss :: update-rc以我在问题底部显示的方式调用时... –

+0

O,对不起,我没注意到你使用$ title。我会更新我的答案 – cristi

+0

是啊,我仍然不认为你明白我的意思大声笑...如果我把'myclass :: update-rc.d {'myscript':}'放入'mysecondclass'中,它会运行'update -rc.d myscript defaults' ...我想用'notify =>'来做到这一点......我不想更改'myclass :: update-rc.d',因为我想要它可重复使用。 –