傀儡奇怪的行为

时间:2014-09-26 12:49:26

标签: puppet

我现在使用一个函数将多个库安装到我的VM上。但是由于某种原因,即使未使用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"],
  }
}

提前致谢

3 个答案:

答案 0 :(得分:1)

不需要为chown操作使用exec。改为使用文件资源。

 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}"
 }

答案 1 :(得分:0)

在此处使用file类型是更好的解决方案,但如果您希望exec仅在subscribe d或notify资源更改时运行,请设置{您refreshonly => true上的{1}}。

答案 2 :(得分:0)

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

您需要强制执行订购,这可以通过链接箭头~>require语句来完成:

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

subscribe表示当相关资源发生更改时,将通知资源。经常使用它,例如重启服务,但在这种情况下不是很有用。