微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 python::virtualenv 在 puppet 中创建 python 环境变量?

如何解决如何使用 python::virtualenv 在 puppet 中创建 python 环境变量?

我正在运行一个与 Slack 交互的 Python 脚本。我正在使用

将 Slack api 令牌放入 python 脚本中
the_token = os.environ.get('SLACK_TOKEN')

我试图用

来人偶化python环境
$var_name = 'SLACK_TOKEN'
$token = 'xxxx-xxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxx'

python::virtualenv { $virtualenv_path:
  ensure       => present,requirements => '/opt/<dir>/<dir>/<dir>/requirements.txt'
  owner        => $::local_username,version      => '3',require      => [Class['<class>']],environment  => ["${var_name}=${token}"],}

我认为 'virtualenv' 块的最后一行会设置环境变量,但显然不是。

解决方法

manifests/virtualenv.pp 中有一个 exec,它运行 pip 命令来安装/启动虚拟环境(抱歉,我不是 Python 虚拟环境方面的专家)。

      exec { "python_requirements_initial_install_${requirements}_${venv_dir}":
        command     => "${pip_cmd} --log ${venv_dir}/pip.log install ${pypi_index} ${proxy_flag} --no-binary :all: -r ${requirements} ${extra_pip_args}",refreshonly => true,timeout     => $timeout,user        => $owner,subscribe   => Exec["python_virtualenv_${venv_dir}"],environment => $environment,<----- HERE
        cwd         => $cwd,}

当 exec 运行时,Puppet 打开一个 shell,环境变量中的管道,运行命令并关闭 shell,因此环境变量存在于 Puppet 启动的 shell 中,但不在它创建的 Python 环境中。它的预期功能可能是设置命令的路径(如果它们位于不同的地方)或传入代理配置,以便 pip 可以从外部站点拉入包。

我验证了 exec 正在处理您使用它正确发送的内容。

class test {

$var_name = 'test'
$token = 'xxxx-xxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxx'

  exec { "test":
    command     => "/bin/env > /tmp/env.txt",environment => ["${var_name}=${token}"],}
}

但是你会注意到我必须将 exec 运行的环境转储到一个文件中才能看到它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。