我正在使用msutter DSC模块进行傀儡。在阅读源代码时,我遇到了这样的代码(在dsc_configuration_provider.rb中):
def create
Puppet.debug "\n" + ps_script_content('set')
output = powershell(ps_script_content('set'))
Puppet.debug output
end
什么文件定义了 powershell 函数或方法?它是内置的红宝石吗?内置木偶?从类继承?我知道它用于将文本作为命令发送到powershell并收集结果,但我需要查看源代码以了解如何为我的目的改进其错误日志记录,因为某些PowerShell错误被吞并且没有警告被打印到Puppet日志。
文件dsc_provider_helpers.rb中的这些行可能是相关的:
provider.commands :powershell =>
if File.exists?("#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe")
"#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe"
elsif File.exists?("#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe")
"#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe"
else
'powershell.exe'
end
肯定会定义Powershell可执行文件所在的位置,但不会指示如何调用它以及如何派生返回值。 stdout和stderr合并了吗?我给出了文本输出或只是错误代码?等
答案 0 :(得分:3)
这是核心Puppet逻辑。当提供者有命令时,如
commands :powershell => some binary
将其作为函数powershell(*args)
连接起来。
您可以与Chocolatey等其他提供商一起查看:
commands :chocolatey => chocolatey_command
def self.chocolatey_command
if Puppet::Util::Platform.windows?
# must determine how to get to params in ruby
#default_location = $chocolatey::params::install_location || ENV['ALLUSERSPROFILE'] + '\chocolatey'
chocopath = ENV['ChocolateyInstall'] ||
('C:\Chocolatey' if File.directory?('C:\Chocolatey')) ||
('C:\ProgramData\chocolatey' if File.directory?('C:\ProgramData\chocolatey')) ||
"#{ENV['ALLUSERSPROFILE']}\chocolatey"
chocopath += '\bin\choco.exe'
else
chocopath = 'choco.exe'
end
chocopath
end
然后其他位置可以像使用args的函数一样调用chocolatey
:
chocolatey(*args)