Puppet、wget和代理

3

我正在尝试在发出wget调用之前设置代理:

file { "/etc/environment":
    content => inline_template("
        http_proxy=http://10.0.12.13:8080
        https_proxy=http://10.0.12.13:8080")
}

问题在于我必须重新启动Puppet会话,以便正确加载环境。
我也尝试在exec语句中导出变量:
exec { "proxy-export-vars":
    provider => "shell",
    command => "export http_proxy=http://10.0.12.13:8080 && export https_proxy=http://10.0.12.13:8080",
}

问题是如何在不重启会话和puppet应用程序的情况下加载环境设置?

更新

WGET puppet plugin使用顶级作用域变量搜索代理设置。因此,诀窍是在顶级作用域中定义这些变量,即在节点定义之前。完整的工作代码:

$http_proxy = "http://10.0.12.13:8080"
$https_proxy = "http://10.0.12.13:8080"

node 'machine' {

    # ...
}

从现在开始,WGET puppet插件将使用这些代理设置获取资源。

1个回答

3

为单个exec资源设置环境变量的最简单方法是使用environment属性。详见此处的文档。例如:

exec {'fetch something':
  environment => [
    'http_proxy=http://10.0.12.13:8080',
    'https_proxy=http://10.0.12.13:8080',
  ],
  command => '/usr/bin/wget -o /tmp/myfile http://myserver/myfile',
}

您的第二次尝试...
exec { "proxy-export-vars":
    provider => "shell",
    command => "export http_proxy=http://10.0.12.13:8080 && export https_proxy=http://10.0.12.13:8080",

如果使用 export 命令,会失败,因为 (a) export 是一个 shell 内置命令,所以 Puppet 无法执行它,因为没有相应的二进制文件...而且 (b) 即使可以执行,也不会做你想要的事情,因为像这样设置环境变量是不持久的 -- 它只影响当前进程及其子进程。


export 可能与 provider => shell 一起使用,但你的第二点是正确的 - 导出这些值的 shell 将会迅速终止。 - Felix Frank
完全忽略了“provider”在其中的事实。感谢您指出这一点。 - larsks
这不太好,因为其他模块通过wget插件多次使用WGET来安装一些软件。我必须为每个命令设置代理。但是你指引了我一个方向 - 我会尝试找出是否可以修改插件以在每次获取之前设置代理。 - Cleankod
使用您的提示找到了解决方案。我的问题现在已更新为完整的工作解决方案。谢谢! - Cleankod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接