我创建了2个已定义的资源
下载应用程序并将其设置为服务
创建服务的配置文件
我希望1在2之前运行,因为1创建了2创建配置文件的目录。
但我还需要的是,如果更新配置文件,它应该通知1中的服务进行刷新。这是我遇到问题的地方,因为我似乎无法访问该服务。
以下是我正在使用的示例代码:
class start {
resource::run_service{'start'}
->
resource::conf:service_conf{'conf'}
}
define resource::run_service {
# Does some things
service { 'main':
ensure => 'running',
enable => true
}
}
define resource::conf::service_conf {
file { 'file.config':
ensure => file,
path => '/some/path/',
owner => 'user',
group => 'group',
mode => 0600,
content => template('templates/templatefile.erb'),
notify => Resource::Run_service::Service['main'], # What is the proper way to do this?
}
}
这是我从木偶那里得到的错误:
错误:无法从远程服务器检索目录:SERVER上的错误400:无效关系:文件[file.config] {notify => Resource :: Run_service :: Service ['main']},因为Resource :: Run_service :: Service ['main']似乎不在目录中
我可以这样做:
notify => Resource::Run_service['main'],
但它给了我一个依赖循环。
有没有办法可以刷新服务?
答案 0 :(得分:3)
这里有一些问题:
resource::run_service{'start'} -> resource::conf:service_conf{'conf'}
指定的依赖项与您指定的依赖项相反(2之前为1)。我认为这是一个拼写错误,因为它与你问题的其他部分相矛盾。$title
变量,因此您可能只想删除它们。至少,您应该重新组织它们,以便配置文件的目录创建与配置文件具有相同的定义资源类型。Resource::Run_service::Service['main']
不是有效的资源名称,因此这就是您收到“not in catalog”错误的原因。本机资源类型没有命名空间,因此您无需在它们之前指定已定义的资源类型命名空间。mode
属性值的八进制字符串。这是Puppet中的错误,因为它可能导致Ruby中的类型转换的未定义行为。考虑到所有这些,最简单的方法是:
class start {
}
define resource::run_service {
file { 'directory that contains config file':
ensure => directory,
before => File['file.config'],
}
# Does some things
service { 'main':
ensure => 'running',
enable => true
}
}
define resource::conf::service_conf {
file { 'file.config':
ensure => file,
path => '/some/path/',
owner => 'user',
group => 'group',
mode => '0600',
content => template('templates/templatefile.erb'),
notify => Service['main'],
}
}
这将以最少的痛苦为您提供您想要的行为。