【问题标题】:Executing bash script from puppet fails从 puppet 执行 bash 脚本失败
【发布时间】:2016-08-26 18:35:01
【问题描述】:

我一直在尝试将驻留在 puppet 主机中的 shell 脚本复制并执行到我的 puppet 代理

这是我的代码

[root@ip-****** manifests]# cat site.pp
class mymodule::myklass{
  file {'my_bash_script':
      ensure => 'file',
      source => '/etc/puppet/modules/mymodule/my_bash_script.sh',
      path   => '/home/ec2-user/my_bash_script.sh',
      owner  => 'root',
      mode   => '755',
      notify => Exec['run_my_script'],
  }
  exec { 'run_my_script':
    command => '/home/ec2-user/my_bash_script.sh',
  }
}
include mymodule::myklass

我的脚本:

[root@ip-********* mymodule]# cat my_bash_script.sh
#!/bin/sh
mv /usr/bin/node /usr/bin/bnode
ln -s /usr/local/bin/node /usr/bin/node
mv /usr/bin/npm /usr/bin/bnpm
ln -s /usr/local/bin/npm /usr/bin/npm

我收到以下错误:

[root@ip-*********** /]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for ip*****************8
Info: Applying configuration version '1472235841'
Error: /Stage[main]/Mymodule::Myklass/File[my_bash_script]: Could not evaluate: Could not retrieve information from environment production source(s) puppet:///modules/mymodule/my_bash_script.sh
Notice: /Stage[main]/Mymodule::Myklass/Exec[run_my_script]: Dependency File[my_bash_script] has failures: true
Warning: /Stage[main]/Mymodule::Myklass/Exec[run_my_script]: Skipping because of failed dependencies
Notice: Finished catalog run in 0.08 seconds

谁能帮我解决这个错误?

【问题讨论】:

    标签: bash puppet


    【解决方案1】:

    如果您的 file 资源位于您的 module/files 目录中,您必须使用 puppet 模块 URI 来获取它们:

    file {'my_bash_script':
      ensure => 'file',
      source => 'puppet:///modules/mymodule/my_bash_script.sh',
      path   => '/home/ec2-user/my_bash_script.sh',
      owner  => 'root',
      mode   => '755',
      notify => Exec['run_my_script'],
    }
    

    请注意此处的文档:https://docs.puppet.com/puppet/latest/reference/types/file.html#file-attribute-source

    如果它仍然因该错误而失败,则意味着您的$modulepath/mymodule/files/my_bash_script.sh 中缺少该文件,因此您需要将其放置在那里。

    此外,您的 bash 脚本可以转换为内在的 Puppet DSL,奇怪的是,您最后在其自身内部包含了一个类。

    【讨论】:

    • 错误:/Stage[main]/Mymodule::Myklass/File[my_bash_script]:无法评估:无法从环境生产源 puppet:///modules/mymodule/ 检索信息my_bash_script.sh
    • 谢谢。删除行 'include mymodule::myklass' 解决了错误。但是我在 bash 脚本中提到的命令并没有在代理中执行。我有什么遗漏吗?请告诉我
    • @Ishwarya 在你的exec 资源中使用这个docs.puppet.com/puppet/latest/reference/types/…,通过查看exec 资源输出实际在做什么来帮助调试。
    • 好的,谢谢。仅供参考,我一直在尝试将驻留在 puppet master 机器中的 shell 脚本复制并执行到我的 puppet 代理。
    • @Matt,当我尝试使用接受的答案时,木偶客户端上没有 shell 脚本执行的日志。我的 shell 脚本只有一行“echo hi hello”,不应该在 puppet 代理日志中打印“hi hello”吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多