如何确保对象从模块更新到下游?

时间:2017-05-12 20:51:52

标签: python

我不确定我的标题是否具有误导性,但我是一个蟒蛇菜鸟。我正在为Vault做界面。它所做的只是每30秒续订一次密钥,因此客户不必这样做。否则,秘密将过期或更改,使用密钥的客户端将收到错误。我使用python threading来更新密钥。这是我的代码。

from __future__ import print_function

import hvac
import time
import threading
import os


VAULT_URL = os.environ['VAULT_ADDR']
VAULT_TOKEN = os.environ['VAULT_TOKEN']


class Client:
    def __init__(self, *keys):
        self.keys = keys
        self.data_dict = {}
        self.client = hvac.Client(
            url=VAULT_URL,
            token=VAULT_TOKEN)

        self.__renew()

    def read(self):
        for key in self.keys:
            self.data_dict[key] = self.client.read(key)
        return self.data_dict

    def __renew(self):
        self.client.renew_token()
        threading.Timer(30, self.__renew).start()
        self.read()

这就是它的使用方式。

from cnvault.cnvault import Client

data_dict = Client('secret/key').read()

// This is for web.py just to test
class ping:
      def GET(self):
          print(data_dict)
          return 'pong'

现在,如果我使用Vault CLI更改Vault中的数据并拨打/ping,我仍然会看到旧数据。

0 个答案:

没有答案