我非常了解passenv
和setenv
在tox.ini文件上的用法,但是我正面临一种情况,我想取消定义一些变量,以便它们不包含在通配符passenv中。
示例
[testenv]
passenv = ANSIBLE_*
# I how do I assure that ANSIBLE_INVENTORY is not passed?
答案 0 :(得分:1)
引用文档:
tox将为您解决环境隔离问题:它将删除未通过
passenv
指定的所有操作系统环境变量。
也就是说,您只是不提及不想传递的变量。
对于passenv
,文档说:
您可以使用
setenv
选项覆盖这些变量。
由于未设置的Shell变量看起来像一个空字符串,因此您可以尝试setenv
至''
所有您不想传递的变量。取决于代码如何使用这些变量,它可能有效也可能无效,因为空的env变量和未设置的env变量之间存在 差异。
我看不到有任何方法可以有选择地在tox文档中取消设置变量。我建议使用一些比ANSIBLE_*
弱的通配符,以免它们不让您希望保持不变的变量进入。
另一种解决方案是在运行tox
的shell中取消设置变量 ,以使tox进程无法访问并传递它们:
#!/bin/sh
unset ANSIBLE_KEYS_TO_KINGDOM
tox "$@"
答案 1 :(得分:0)
到目前为止,似乎无法执行这样的取消设置,所以我在https://github.com/tox-dev/tox/issues/1387
提出了将其作为功能请求提出的条件。有一个解决方法,但是它很不方便,我什至不知道是否值得一提:
command = bash -c "unset ANSIBLE_INVENTORY; <original command>"
如您所见,这种方法根本无法扩展,并且可能使tox.ini的维护成为真正的负担。