应用单个傀儡模块时如何设置路径?

应用单个傀儡模块时如何设置路径?

我正在尝试运行这样的单个模块:

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",
}

相关内容