2014-09-26 92 views
0

我现在使用一个函数将几个库安装到我的虚拟机中。然而,由于某种原因,即使未使用create exec(因为库已安装),它仍会执行chown exec。执行者的木偶奇怪行为

我是否认识订阅错误?我认为第二个exec只会在订阅者执行时执行。

define add (
    $lib_version = undef, 
    $lib_version_prefix = undef, 
    $lib_name = undef, 
    $user_path = "/usr/bin:/usr/sbin:/bin", 
){ 
    file {"/var/www/lib/$lib_name": 
    mode => $php::folder_mode, 
    owner => $php::folder_owner, 
    group => $php::folder_group, 
    ensure => directory 
    } 
    exec {"create-$lib_name": 
    cwd  => "/var/www/lib/$lib_name", 
    command => "xxx", 
    creates => "/var/www/lib/$lib_name/$lib_version", 
    } 
    exec {"chown-$lib_name": 
    cwd => "/var/www/lib", 
    command => "chown xxx", 
    path => $user_path, 
    subscribe => Exec["create-$lib_name"], 
    } 
} 

在此先感谢

回答

1

无需使用EXEC的chown操作。改用文件资源。

exec { "create-${lib_name}": 
    cwd  => "/var/www/lib/${lib_name}", 
    command => 'xxx', 
    creates => "/var/www/lib/${lib_name}/${lib_version}" 
} 

file { "/var/www/lib/path/to/directory": 
    ensure => directory, 
    owner  => 'root', 
    group  => 'root', 
    recurse => true, 
    subscribe => Exec["create-${lib_name}" 
} 
+0

我需要递归使用它,但会递归=>真正的工作?我仍然需要知道,如何编写像我试图做的依赖高管。感谢 – Pulz 2014-09-26 15:05:29

+0

递归将在文件资源中工作。我已经更新了我的答案以反映他的观点。 – ptierno 2014-09-26 15:08:58

0

这里使用file类型是更好的解决方案,但如果你想要一个execsubscribe d或notify荷兰国际集团的资源都更改为只运行,您exec设置refreshonly => true

0

除非您定义了一些约束,否则Puppet不会以线性顺序执行语句(就像编写的代码一样)。

您需要强制执行的排序,这可能是与链接箭头进行~>require声明:

exec {"chown-$lib_name": 
    cwd  => "/var/www/lib", 
    command => "chown xxx", 
    path  => $user_path, 
    require => Exec["create-$lib_name"], 
    } 

subscribe意味着资源会时依赖一个变化通知。它经常用于例如用于重新启动服务,但在这种情况下不是很有用。