libcloud:在驱动程序初始化期间缺少1个必需的位置参数错误

时间:2017-12-18 23:29:14

标签: python google-compute-engine libcloud

我正在使用:

  • libcloud 2.2.1
  • python 3.5.2
  • 的virtualenv
  • 带有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'

这对我来说perfectly textbook。知道会出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

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

  1. 每个服务帐户都有一个与之关联的电子邮件/ ID,我在“凭据”屏幕上单击“管理服务帐户”后才发现该帐户。我错误地使用我的谷歌帐户作为user_id,因为我无法弄清楚在该领域还有什么东西(即使这没有意义,但我看不到其他选择)。
  2. 在检查了libcloud代码之后,我发现了credential_file参数,它似乎比应该用于服务帐户文件的key参数更合适。这就是导致我看到的实际错误的原因。