0

我在用着:

  • 库云 2.2.1
  • 蟒蛇3.5.2
  • 虚拟环境
  • 带有 json 凭证文件的 GCE 服务帐户

Python 代码如下所示:

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver


def run():
    """ Run this script
    """
    ComputeEngine = get_driver(Provider.GCE)
    driver = ComputeEngine(user_id='****@****.com',
                           credential_file='serviceaccount.json',
                           project='****')

run()

当我运行我的代码时,我得到:

Traceback (most recent call last):
  File "./myscript.py", line 47, in <module>
    run()
  File "./myscript.py", line 21, in run
    project='ebs-it', secure=True)
  File "/***/virtualenv/lib/python3.5/site-packages/libcloud/compute/drivers/gce.py", line 1795, in __init__
    super(GCENodeDriver, self).__init__(user_id, key, **kwargs)
  File "/***/virtualenv/lib/python3.5/site-packages/libcloud/common/base.py", line 975, in __init__
    self.connection = self.connectionCls(*args, **conn_kwargs)
TypeError: __init__() missing 1 required positional argument: 'secure'

这对我来说看起来非常教科书。知道可能出了什么问题吗?

4

1 回答 1

0

问题有两个方面:不熟悉 Google 的服务帐户,导致编码错误。

  1. 每个服务帐户都有一个与之关联的电子邮件/ID,我是在单击“凭据”屏幕上的“管理服务帐户”后才发现的。我错误地将我的谷歌帐户用作 user_id,因为我无法弄清楚该字段中还有什么内容(即使这没有意义,但我看不到替代方法)。
  2. 在检查了 libcloud 代码后,我发现了这个credential_file参数,它似乎比key应该用于服务帐户文件的参数更合适。这就是导致我看到的实际错误的原因。
于 2017-12-19T18:47:17.203 回答