我正在尝试运行这样的单个模块:
puppet apply --verbose --modulepath=moduleshere --noop -e 'include myclass'
但是,我收到这种错误,表明路径未设置
Parameter unless failed: '[ -e "${logfile}" ]' is not qualified and no path was specified. Please qualify the command or specify a path.
我不想在每个这样的位置都明确指定路径,当作为完整 Puppet 运行的一部分运行时,它工作正常。如何在运行单个模块时指定路径?
答案1
资源中的命令Exec
要么必须是完全限定的(即/usr/bin/test
而不是test
),要么必须设置path
该资源的属性。Exec
如果您可以修改 Puppet 清单,您可以简单地添加以下定义来path
为所有Exec
资源设置默认属性/bin
:
Exec { path => "/bin" }
作为一种(或多或少)肮脏的解决方法,您也可以在命令行上path
为任何资源设置默认值:Exec
$ puppet apply --verbose -e 'Exec { path => "/bin" }' your_manifest.pp
文档指针:
答案2
那.. 不应该作为完整运行的一部分工作。它需要命令中可执行文件的完整路径unless
。也许您在全局文件中设置了路径,而该路径是完整运行的一部分?
请尝试unless => '/usr/bin/[ -e "${logfile}" ]'
。
答案3
我同意 Shane 的观点,默认路径可能在全局范围的清单中设置。您可以执行相同的操作,但不能将其作为参数传递,因此可以使用 stdin:
$ puppet apply -v --modulepath=moduleshere --noop <<EOF
Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin" }
include myclass
EOF
或者将 Exec 和 include 行放入example.pp
然后使用puppet apply -v ... example.pp
。
答案4
您需要使用完全限定的路径。
例如:
exec { "sample":
command => "/usr/bin/test",
}
或者:
exec { "sample":
path => ['/usr/bin', '/usr/sbin', '/bin'],
command => "test",
}