Puppet - 通过参数通知类

时间:2015-11-05 23:58:34

标签: puppet

我对傀儡很陌生,而且我一直坚持如何通过参数通知一个类。我试图通知我找到的一个类,它使用参数运行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 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": }
}

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

1 个答案:

答案 0 :(得分:2)

您可以通过几种方式在傀儡中通知课程:

使用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