Puppet-将多个文件复制到目录

Puppet-将多个文件复制到目录

我想复制一些文件木偶://代理上的目录的 URL。我不确定我在这里是否做错了什么,但似乎 Puppet 不喜欢这样

  file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1.conf',
                     'puppet:///modules/nginx/app2.conf'],
    sourceselect => all,
  }

这是我尝试运行代理时得到的结果

错误:无法将临时文件 /etc/nginx/conf.d.puppettmp_9046 重命名为 /etc/nginx/conf.d:是一个目录

如果我通过在模块中创建目录并将资源指向它们来稍微改变一下,它就可以工作

  mkdir module/files/app1 module/files/app2
  mv module/files/app1.conf module/files/app1
  mv module/files/app2.conf module/files/app2

新资源

  file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1',
                     'puppet:///modules/nginx/app2'],
    sourceselect => all,
    recurse      => true,
  }

创建目录来复制单个文件列表似乎有点愚蠢。

编辑

我尝试在小路但我却急于求成,以为这就是解决方案。原因是我有自己的nginx节点定义中的类声明被注释掉了。尝试后,我得到了与上述相同的错误。

  file { '/etc/nginx/conf.d/':
    path         => '/etc/nginx/conf.d/',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1.conf',          
                     'puppet:///modules/nginx/app2.conf'],
    sourceselect => all,
  }

答案1

目的地后面缺少一个“/”。

首先要说几件事:

为什么要确保目录并具有内容(源参数)?为目录创建两个资源,为目录中的两个文件创建两个资源。

它会报错,因为你正在将文件导入目录,而不是将文件导入目录。目录只能将目录作为源。

因此,您可以创建单独的定义,因为您只定义了两个要放入目录中的文件。另一种方法是在 module/files 下创建一个目录并将文件放入其中。然后,当您进行源定义时,您指定的是目录而不是文件。

希望这能有所帮助。您已经自己执行了。

答案2

出什么问题了

file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => 'puppet:///modules/nginx',
    recurse      => true,

  }

?此解决方案可保持整个目录同步

相关内容