Fabric: 运行时配置文档

创建于 2018-05-17  ·  4评论  ·  资料来源: fabric/fabric

我有一堆设置env的Fabric 1 fabfile。 目前尚不清楚将该代码迁移到Fabric2。文档参考了例如connect_kwargs但是关于如何或在何处进行设置没有太多。 阅读Invoke文档后,由于我需要执行代码(在下面的示例中使用keyring来检索密码),因此我似乎无法使用任何YAML / JSON配置选项。

似乎将它们全部移到fabric.py文件中可能会起作用:

import subprocess
import sys
from getpass import getuser
import os

domain = os.environ.get("DOMAIN", "loctest")

def get_config():
    user = getuser()

    try:
        password = subprocess.check_output(["keyring", "get", domain, user]).strip()
        print("Loaded %s password for %s from keyring" % (domain, user))
    except subprocess.CalledProcessError:
        print(
            "Unable to set password using `keyring` (is it in your PATH?) — expect to be nagged",
            file=sys.stderr,
        )

    return {'user': user, 'password': password}

connect_kwargs = get_config()

不幸的是,得到TypeError: can't pickle module objects 。 设置__all__不足以避免这种情况,但是将所有内容移入该函数似乎都可以:

def get_config():
    import subprocess
    import sys
    from getpass import getuser
    import os

    domain = os.environ.get("DOMAIN", "loctest")
    user = os.environ.get("USER", getuser())

    try:
        password = subprocess.check_output(["keyring", "get", domain, user]).strip()
        print("Loaded %s password for %s from keyring" % (domain, user))
    except subprocess.CalledProcessError:
        print(
            "Unable to set password using `keyring` (is it in your PATH?) — expect to be nagged",
            file=sys.stderr,
        )

    return {"user": user, "password": password}

connect_kwargs = get_config()

是否/计划有一种更清洁的方式来做到这一点? 除其他外,此代码与Fabric 1版本并不完全等效,因为它不会从配置中提取用户名,这不是我所需要的,但似乎应该有一种方式说“得到处理”配置并更新此值”。

Bug Feature Needs investigation

最有用的评论

有没有使用fabfile.py文件的简单的hello world示例? 我已经阅读了所有文档并在Internet上搜寻了几天,而且还无法在v2上远程运行单个命令。 据我所知,SSHException卡住了“没有可用的身份验证方法”

所有4条评论

我打算让“ Python格式”的配置文件大致填补“通过运行时代码执行来填充配置值”的空缺,因此可以说, .py文件在正确的轨道上。 就是说–我并没有完全按照那种想法得出结论,这听起来像是您为此付出的代价,歉意。 (我会注意到,部分原因是我认为大多数高级用户将在他们的任务文件/ fabfile中执行操作,但是从配置式数据到运行时任务主体的桥梁都需要工作。)

别忘了立即进行腌制,但这可能是配置系统的一些古怪之处,我需要对此进行深入研究。 我不喜欢泡菜(这些天,谁喜欢),所以发现它在这种情况下弹出有点令人惊讶。

无论如何,最直接的原因是我们假设模块的内容“是”配置,因此,当我们从模块对象属性转到配置嵌套字典时,我们需要进行更严格的过滤。 坦白地说,剥离模块可能是所有需要的,因为任何其他变量分配在配置文件作者看来都是不良行为。

回复:更高级别的设计问题“仅更改一个嵌套的配置值”,即_在大多数情况下可以直观地工作(配置合并过程倾向于进行深度合并,因此您的.py文件只需设置connect_kwargs = {'user': foo', 'password': 'bar'}应该最终与任何其他配置源的connect_kwargs内容合并),但我认为在connect_kwargs周围可能存在一些错误,例如,#1762。

我应该对此进行重新测试,因为那是我最初的Fabric 2升级尝试,从那时起,我已经看到很多提交。

有没有使用fabfile.py文件的简单的hello world示例? 我已经阅读了所有文档并在Internet上搜寻了几天,而且还无法在v2上远程运行单个命令。 据我所知,SSHException卡住了“没有可用的身份验证方法”

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Grazfather picture Grazfather  ·  4评论

SamuelMarks picture SamuelMarks  ·  3评论

supriyopaul picture supriyopaul  ·  4评论

shadyabhi picture shadyabhi  ·  5评论

jmcgrath207 picture jmcgrath207  ·  5评论