【问题标题】:Get Temp Directory on Windows using Puppet使用 Puppet 在 Windows 上获取临时目录
【发布时间】:2016-02-16 09:25:50
【问题描述】:

我正在尝试使用download_file 模块下载文件并希望将其保存到临时目录。有没有一种内置的方法可以使用 Puppet 执行此操作,而无需将其硬编码为 C:\Windows\Temp

download_file { "Download Flyway" :
    url                   => 'https://bintray.com/artifact/download/business/maven/flyway-commandline-3.2.1-windows-x64.zip',
    destination_directory => 'C:\Windows\Temp'
}

【问题讨论】:

  • 您是否尝试过 %temp% 是否得到解决,或者是否有办法告诉 puppet 您要使用环境变量?
  • 那行不通。到目前为止,我试图研究环境变量,但没有取得多大成功。 Error: Parameter path failed on File[download-flyway-commandline-3.2.1-windows-x64.zip.ps1]: File paths must be fully qualified, not '%TEMP%\download-flyway-commandline-3.2.1-windows-x64.ps1'

标签: windows puppet temp


【解决方案1】:

您可以创建自定义事实来提供该信息(命名为 modulename/lib/facter/module_temp_dir.rb):

Facter.add('module_temp_dir') do
  setcode do
    if Puppet::Util::Platform.windows?
        require 'win32/registry'

        value = nil
        begin
          # looking at current user may likely fail because it's likely going to be LocalSystem
          hive = Win32::Registry::HKEY_CURRENT_USER
          hive.open('Environment', Win32::Registry::KEY_READ | 0x100) do |reg|
            value = reg['TEMP']
          end
        rescue Win32::Registry::Error => e
          value = nil
        end

        if value.nil?
          begin
            hive = Win32::Registry::HKEY_LOCAL_MACHINE
            hive.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_READ | 0x100) do |reg|
              value = reg['TEMP']
            end
          rescue Win32::Registry::Error => e
            value = nil
          end
        end
      end

      value
    end
  end
end

这种方法比简单地使用 ENV['TEMP'] 更受欢迎,因为它不会被篡改,就像运行时可能存在的环境变量一样。

如果您不关心被篡改的值和/或您可能希望在本地运行时更改它,您可以改为执行以下操作:

Facter.add('module_temp_dir') do
  setcode do
   ENV['TEMP']       
  end
end

作为自动提供部分/全部环境变量作为事实的后续行动,我已提交https://tickets.puppetlabs.com/browse/FACT-1346。有可能我们可以快速提供更多重要的系统提供的环境变量来提供所有这些环境变量,我们将需要当前声明为阻止该票证的白名单功能 (https://tickets.puppetlabs.com/browse/FACT-718)。

参考:

https://github.com/chocolatey/puppet-chocolatey/blob/master/lib/facter/choco_install_path.rbhttps://github.com/chocolatey/puppet-chocolatey/blob/master/lib/puppet_x/chocolatey/chocolatey_install.rb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多