【问题标题】:Passing key:value pairs to Python Dictionary将键:值对传递给 Python 字典
【发布时间】:2022-08-09 22:52:37
【问题描述】:

我正在尝试遍历 key:value 列表并在 hvac 方法中插入 python dict() 以在 Vault 中创建或更新机密。

我在文件中有一个键:值列表:

key1:value1
key2:value2
key3:value3
import hvac


def write_secret():
    client = hvac.Client(url=\'http://localhost:8200\')
    print(f\" Is client authenticated: {client.is_authenticated()}\")
    with open(\"keylist.txt\") as keyfile:
        for line in keyfile:
            key, value = line.split(\":\", 1)
            key=key.strip()
            value=value.strip()
            client.secrets.kv.v2.create_or_update_secret(    
                path = \'keys\',
                secret = dict(
                    key=value
                ),
                cas = 0,
                )
write_secret()

上面脚本中最终发生的事情是单个键:值对将被写入 Vault。

预期的行为将是在 Vault 中具有以下内容:

key1:value1
key2:value2
key3:value3

我得到的是:

key:value3 --> it seems like the values are iterating but the keys are not getting passed in

任何帮助,将不胜感激!如果需要更多信息,我会更新帖子。

谢谢!

  • dict(key=value) 创建一个字典,其中的键字面意思是 key。您希望{key: value} 让两个元素都是变量。
  • @jasonharper {key: value} 修复了未传入的密钥。谢谢!

标签: python hashicorp-vault


【解决方案1】:

使用带有 dict 构造函数的理解方法来构建所需的秘密对象:

file_contents = """
key1:value1
key2:value2
key3:value3
""".strip()

secret = dict(line.split(':', 1) for line in file_contents.split())

print(secret)

出去:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

【讨论】:

  • 这摆脱了几行代码,谢谢!我现在得到的唯一问题是它只会向路径keys 添加一个值。我需要在keys 路径下创建所有值。
  • 答案贴在下面
【解决方案2】:

这解决了我的问题:

def write_secret():
    client = hvac.Client(url='http://localhost:8200')
    print(f" Is client authenticated: {client.is_authenticated()}")
    with open("keylist.txt") as keyfile:
            client.secrets.kv.v2.create_or_update_secret(    
                path = 'keys',
                secret = dict(
                    line.split(':', 1) for line in keyfile
                ),
                )
write_secret()

通过更新 key:value 迭代发生的位置,我能够达到预期的效果。

【讨论】:

    【解决方案3】:

    您可以使用 csv 库:

    import csv
    
    with open("file.txt") as f:
        data = dict(csv.reader(f, delimiter=":"))
    

    {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
    

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2016-12-22
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多