【问题标题】:file copy from puppet master to agent fails从 puppet master 到代理的文件复制失败
【发布时间】:2016-08-26 23:49:25
【问题描述】:

我正在尝试从 puppet master 复制一个简单的文件到代理。

  [root@****************** manifests]# cat site.pp

    file {'/home/ec2-user/my_bash_script.sh':
    source => "puppet:///modules/mymodule/my_bash_script.sh",
    mode => '755',
    }

请找出错误。

 [root@ip-***********/]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for ip-10-20-1-137.dev.uberops.net
Info: Applying configuration version '1472255014'
Error: /Stage[main]/Main/File[my_bash_script.sh]: Could not evaluate: 
Could not retrieve information from environment production source(s)   
puppet:///modules/mymodule/my_bash_script.sh
Notice: Finished catalog run in 0.06 seconds

谁能告诉我我在这里缺少什么。

【问题讨论】:

  • 从您迄今为止提出的问题来看,我假设您使用的是 puppet 3.6-3.8。这是真的吗?
  • 是的,我正在使用 puppet 3.8.7

标签: puppet


【解决方案1】:

由于您使用的是 Puppet >= 3.7,因此您需要为自己的模块使用目录环境。 /etc/puppet/modules/ 目录或$basemodulepath 用于未声明但具有引用的类型、函数等的基本模块,例如 stdlib、lvm 等。

将您的模块从/etc/puppet/modules/ 移动到您的客户在/etc/puppet/environments/'environment'/modules 的适当目录环境以解决您的问题。

附加信息:

对于 Puppet Enterprise 3.8,地址为 /etc/puppetlabs/puppet/environments/'environment'/modules。对于 Puppet 4 企业版和非企业版,地址为 /etc/puppetlabs/code/environments/'environment'/modules

使用默认的生产目录环境,这将是 /etc/puppet/environments/production/modules 对于您的情况。

【讨论】:

  • 在这个答案中,对我来说,风格过于实质。基本模块路径用于跨环境共享的模块。此类模块的性质是站点要求和政策的问题。没有什么特别的理由说明为什么存储在那里的模块不应该包含从用户清单中引用的类,也没有为什么站点本地模块不应该驻留在那里。事实上,我并没有立即明白为什么提议的更改应该可以解决问题。
  • @JohnBollinger 他之前的问题表明他在/etc/puppet/modules 中有模块,这是一个需要目录环境的Puppet 版本。
  • 我还是没明白你的意思。目录环境不排除跨环境共享模块,也不限制可以共享的模块类型。您所描述的这种限制最多是政策问题,而不是技术限制。如果 OP 的模块已经在他的 $basemodulepath 中,似乎是这样,那么我认为没有理由相信他的问题会通过移动它来解决。
【解决方案2】:

Could not retrieve information from environment production source(s) 这个错误说明,puppet 找不到你安抚的文件。 请仔细检查您提供的路径和文件是否存在。

一般文件结构如下:

-/etc/puppet -/etc/puppet/manifest/ -/etc/puppet/files -/etc/puppet/modules

如果您在其他地方设置了模块目录(/modules/mymodule/files/your-file-here),那么您的文件路径将是; puppet:///modules-directory/modules-name/file-namepuppet:///modules/mymodule/your-file-here

【讨论】:

    【解决方案3】:

    URL puppet:///modules/mymodule/my_bash_script.sh 对应于相对于适用模块路径的文件 mymodule/files/my_bash_script.sh。该文件必须存在并且可由 master / puppetserver 进程读取。可能产生您提出的错误的最常见问题是

    • 您拼错了文件名
    • 您将文件放在错误的目录中
    • 所有权/权限/ACL/SELinux上下文和策略不允许master读取文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多