Troubleshooting your Barbican Setup

如果您无法在此文档中找到您正在寻找的答案,您可以在 OFTC IRC 频道 #openstack-barbican 上提问

在成功向 Keystone 认证后,获取 Barbican HTTP 401 错误

您可能会看到

即使使用有效的令牌,您也会收到 HTTP 401 Unauthorized 响应

curl -X POST -H "X-Auth-Token: $TOKEN" -H "Content-type: application/json" \
-d '{"payload": "my-secret-here", "payload_content_type": "text/plain"}' \
https://:9311/v1/secrets

由以下原因引起

Barbican 服务器上的签名证书已过期。

如何避免

检查 Barbican 服务器上的 Keystone 签名证书是否已过期。查看 /tmp/barbican/cache/signing_cert.pem 中的到期日期。如果已过期,请按照以下步骤操作。

  1. 在您的 Keystone 服务器上,验证 signing_cert.pem 的到期日期与 Barbican 机器上的到期日期是否相同。通常可以在 Keystone 服务器上的 /etc/keystone/ssl/certs 中找到 signing_cert.pem

  2. 如果证书匹配,请按照以下步骤创建新的证书

    1. 从您的 Barbican 和 Keystone 服务器中删除它。

    2. 编辑 /etc/keystone/ssl/certs/index.txt.attr 并将 unique_subject 设置为 no。

    3. 运行 keystone-manage pki_setup 以创建新的 signing_cert.pem

    4. 下次访问 Barbican API 时,更新后的证书将被下载到您的 Barbican 服务器。

  3. 如果证书不匹配,请从您的 Barbican 服务器中删除 signing_cert.pem。不要从 Keystone 中删除。下次您访问 Barbican API 时,Keystone 中的证书将被下载到您的机器。

返回的引用使用 localhost 而不是正确的主机名

您可能会看到

curl -X POST -H "X-Auth-Token: $TOKEN" -H "Content-type: application/json" \
-d '{"payload": "my-secret-here", "payload_content_type": "text/plain"}' \
http://myhostname.com/v1/secrets

# Response:
{
  "secret_ref": "https://:9311/v1/secrets/UUID_HERE"
}

由以下原因引起

响应主机名的默认配置未修改为端点的主机名(通常是负载均衡器的 DNS 名称和端口)。

如何避免

将您的 barbican.conf 文件中的 host_href 设置从 localhost:9311 更改为正确的主机名(例如上面的 myhostname.com)。

Barbican 的 tox 测试无法在我的 Mac 上运行

您可能会看到

clang: error: unknown argument: '-mno-fused-madd'

如何避免

有一个 很棒的博客文章 提供了有关错误的更多详细信息以及如何解决它的方法。 此链接提供了有关错误以及如何解决它的更多详细信息。

Barbican 的 tox 测试无法在我的 Mac 上找到 ffi.h

您可能会看到

c/_cffi_backend.c:13:10: fatal error: 'ffi.h' file not found
...
ERROR: could not install deps [...]; v = InvocationError('...', 1)

如何避免

确保 xcode 和 cmd line 工具是最新的。最简单的方法是从 OS X 命令行运行 xcode-select --install。当被问及是否要安装命令行工具时,请务必回答“是”。现在 ls /usr/include/ffi/ffi.h 应该显示缺失的文件存在,并且 tox 测试应该可以运行。

Barbican 的 tox 测试失败并显示“ImportError: No module named _bsddb”

您可能会看到

ImportError: No module named _bsddb

如何避免

运行测试 via tox(使用 testr)将在 .testrepository 目录中创建数据文件。如果环境中可用 bsddb,则这些数据文件可能会使用 bsddb 创建。如果运行的环境中没有 bsddb,这可能会导致问题。要解决此问题,请删除您的 .testrepository 目录并再次运行 tox。

uWSGI 日志 ‘OOPS ! failed loading app’

您可能会看到

...
spawned uWSGI master process (pid: 59190)
spawned uWSGI worker 1 (pid: 59191, cores: 1)
spawned uWSGI worker 1 (pid: 59192, cores: 1)
Loading paste environment: config:/etc/barbican/barbican-api-paste.ini
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter \
    0x7fd098c08520 pid: 59191 (default app)
OOPS ! failed loading app in worker 1 (pid 59192) :( trying again...
Respawned uWSGI worker 1 (new pid: 59193)
Loading paste environment: config:/etc/barbican/barbican-api-paste.ini
OOPS ! failed loading app in worker 1 (pid 59193) :( trying again...
worker respawning too fast !!! i have to sleep a bit (2 seconds)...
...

注意

您将看不到此错误的任何有用的日志或堆栈跟踪!

由以下原因引起

vassal(worker)进程无法访问数据存储。

如何避免

检查您的 barbican.conf 文件中的 sql_connection,以确保它引用了有效的可访问数据库。

“Cannot register CLI option” 错误在导入 logging 时

您可能会看到

...
  File ".../oslo_config/cfg.py", line 1275, in register_cli_opt
    raise ArgsAlreadyParsedError("cannot register CLI option")
ArgsAlreadyParsedError: arguments already parsed: cannot register CLI option

由以下原因引起

尝试在配置参数“解析”后调用 olso.config 的 register_cli_opt() 函数(有关详细信息,请参阅 oslo.config 项目的 cfg.py 文件 中的注释和方法)。

如何避免

不要调用 import barbican.openstack.common.log as logging 来获取 logger,而是调用 from barbican.common import config 使用以下方法在您的源代码文件中获取 logger:LOG = config.getLogger(__name__)

Responder 抛出 TypeError: 'NoneType' object has no attribute '__getitem__'

您可能会看到

...
2013-04-14 14:17:56 [FALCON] [ERROR] POST \
/da71dfbc-a959-4ad3-bdab-5ee190ce7515/csrs? => Responder raised \
TypeError: 'NoneType' object has no attribute '__getitem__'

由以下原因引起

忘记在通过 XxxxResource 类创建的实体中设置您的非空 FK。

如何避免

在通过 repository 创建它之前,请不要忘记设置实体上定义的任何 FK。

uWSGI 配置问题:ImportError: No module named site

您可能会看到

...
uwsgi socket 0 bound to TCP address :9311 fd 3
Python version: 2.7.3 (...)  [...]
Set PythonHome to ./.venv
ImportError: No module named site

由以下原因引起

  • 找不到 Barbican 项目的 Python 虚拟环境。

  • 要么上面的 ‘broker’ 设置不正确,要么您尚未启动队列进程(例如 RabbitMQ)

如何避免

确保 etc/barbican/barbican-api-paste.ini 处的 uWSGI 配置文件已正确配置(请参见上面的安装步骤),尤其是如果虚拟环境文件夹的名称与 .ini 文件不同。

REST 请求因 JSON 错误而失败

您可能会看到

{
    "title": "Malformed JSON"
}

由以下原因引起

Barbican REST 服务器无法解析来自您的 REST 客户端的传入 JSON 消息。

如何避免

确保您提交的是正确格式化的 JSON。例如,列表中的最后一个名称/值对之后是否有逗号?所有基于文本的名称/值周围是否有引号?值的类型是否与预期匹配(例如,整数和布尔类型而不是带引号的文本)?

如果您正在使用 Chrome 的 Advanced REST Client,并且尝试将文件上传到 secrets PUT 调用,这不仅会由于它使用的多部分格式而失败,而且还会尝试将此文件提交到每个 REST 请求,从而导致此错误。关闭带有客户端的选项卡/窗口,然后重新启动它。

Crypto Mime Type 不受支持,当我尝试运行测试或访问 API 时

您可能会看到

一个包含以下内容的堆栈跟踪(例如)

CryptoMimeTypeNotSupportedException: Crypto Mime Type of 'text/plain' not supported

由以下原因引起

Barbican 插件未安装到 Python 插件管理器可以找到它们的位置。

如何避免

确保您运行 pip install -e .

Python “找不到模块错误”与 uWSGI 脚本一起使用

您可能会看到

*** has_emperor mode detected (fd: 6) ***
...
!!! UNABLE to load uWSGI plugin: dlopen(./python_plugin.so, 10): image not found !!!
...
  File "./site-packages/paste/deploy/loadwsgi.py", line 22, in import_string
      return pkg_resources.EntryPoint.parse("x=" + s).load(False)
  File "./site-packages/distribute-0.6.35-py2.7.egg/pkg_resources.py", line 2015, in load
      entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named barbican.api.app
...
*** Starting uWSGI 1.9.13 (64bit) on [Fri Jul  5 09:59:29 2013] ***

由以下原因引起

Barbican 源代码模块未在 uwsgi 等应用程序的 Python 路径中找到。

如何避免

确保您正在从虚拟环境运行,并且在激活虚拟环境后执行了 pip。这尤其包括 pip install -e 命令。此外,虚拟环境可能会损坏,因此您可能需要重建它。

‘无法打开数据库文件 None None’ 运行脚本时出错

您可能会看到

...
  File "./site-packages/sqlalchemy/engine/strategies.py", line 80, in connect
    return dialect.connect(*cargs, **cparams)
  File "./site-packages/sqlalchemy/engine/default.py", line 283, in connect
    return self.dbapi.connect(*cargs, **cparams)
OperationalError: (OperationalError) unable to open database file None None
[emperor] removed uwsgi instance barbican-api.ini
...

由以下原因引起

sqlite 数据库的 destination 文件夹未找到,或不可写。

如何避免

确保 /var/lib/barbican/ 文件夹存在并且可以被运行 Barbican API 进程的用户写入。

‘ValueError: No JSON object could be decoded’ 使用 Keystoneclient 中间件

您可能会看到

...
2013-08-15 16:55:15.759 2445 DEBUG keystoneclient.middleware.auth_token \
[-] Token validation failure. _validate_user_token \
./site-packages/keystoneclient/middleware/auth_token.py:711
...
2013-08-15 16:55:15.759 2445 TRACE keystoneclient.middleware.auth_token \
raise ValueError("No JSON object could be decoded")
2013-08-15 16:55:15.759 24458 TRACE keystoneclient.middleware.auth_token \
ValueError: No JSON object could be decoded
...
2013-08-15 16:55:15.766 2445 WARNING keystoneclient.middleware.auth_token \
[-] Authorization failed for token ...
2013-08-15 16:55:15.766 2445 INFO keystoneclient.middleware.auth_token \
[-] Invalid user token - rejecting request...

由以下原因引起

keystoneclient 中间件组件正在查找 openssl 中的 cms 命令,该命令在版本 1.0.1 之前不可用。

如何避免

更新 openssl。

“accept-encoding of ‘gzip,deflate,sdch’ not supported”

您可能会看到

Secret retrieval issue seen - accept-encoding of 'gzip,deflate,sdch' not supported

由以下原因引起

这可能是您使用的浏览器的问题,因为通过 curl 执行请求似乎不受影响。

如何避免

除了使用 curl 等命令来发出 REST 请求之外,您可能没有其他选择。