Puppet代码的说明

时间:2017-06-12 21:04:36

标签: puppet

这是我的Puppet代码:

  file { 'copy_files':
     path => "/data/files",
     source => "puppet:///modules/mymodule/repo",
     recurse => true;
  }
  file {'chmod_script':
     path => "/data/files/inner_folder/script",
     ensure => 'present',
     mode => "+x"
  }

我想要的是复制我的文件夹(' repo')然后使一个脚本可执行。但是使用上面的代码,脚本中的所有内容都会被删除(脚本只是空文件)。没有该添加资源(' chmod_script')文件的内容是预期的(未擦除)。我在这做错了吗?我认为这可能是因为第二个资源(' chmod_Script')更早被执行但文档说" Puppet按照它们在清单中声明的​​顺序应用资源。"。那么有人可以解释一下它应该是什么样的吗?

修改 我决定使用这个脚本:

  file { 'copy_files':
     path => "/data/files",
     source => "puppet:///modules/mymodule/repo",
     recurse => true;
  }
  file {'chmod_script':
     path => "/data/files/inner_folder/script",
     source => "puppet:///modules/mymodule/repo/inner_folder/script",
     ensure => 'present',
     mode => "+x"
  }

因此,在更新模式时,我再次复制内容。

1 个答案:

答案 0 :(得分:1)

您似乎遇到了无证件的行为。

当您运行puppet agent -t时,Puppet代理会请求Puppet Master编译目录,并且在所有条件相同的情况下,由于您询问了订单,它会根据您在清单中的写入方式对所有内容进行排序(假设您有Puppet 4或Puppet 3的版本比2014年初更新)。

接下来,如果您通过recurse请求Puppet镜像远程目录,Puppet实际上会修补已编译的目录,并为其中的每个文件添加一个资源。 (并且Puppet继续遵守清单排序。)

但这是抓住了。不允许重复的资源,因此如果编译的目录已经包含与将通过recurse添加的文件重叠的文件资源,Puppet会决定保留哪一个。如果目录已通过特定声明包含文件资源,则目录中已存在的目录将获胜。

所以,在你的情况下,Puppet对远程内容一无所知 inner_folder/script,并且您没有指定任何内容,因此Puppet只会创建一个空文件。

(另外,请查看Bug 2296中的讨论,以了解其他相关边缘情况中的行为。)

我同意Matt Schuchard的说法,根据您的要求,在这里做的最好的事情就是在远程目录中设置可执行标志(+x)。

此外,您还需要使用source_permissions => usedoc):

  file { 'copy_files':
     path => "/data/files",
     source => "puppet:///modules/mymodule/repo",
     source_permissions => use,
     recurse => true,
  }