从 Puppet 执行 bash 脚本失败
Executing bash script from puppet fails
我一直在尝试将驻留在 puppet master 机器中的 shell 脚本复制并执行到我的 puppet agent
这是我的代码
[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
谁能帮我解决这个错误?
如果您的 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,奇怪的是您在末尾包含一个 class 自身内部。
我一直在尝试将驻留在 puppet master 机器中的 shell 脚本复制并执行到我的 puppet agent
这是我的代码
[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
谁能帮我解决这个错误?
如果您的 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,奇怪的是您在末尾包含一个 class 自身内部。