配置

OpenStackClient 主要通过命令行选项和环境变量进行配置。大多数设置也可以放置在配置文件中,以简化管理多个云配置。

全局选项、环境变量和配置文件中使用的关键字之间存在关联,这使得在它们之间进行转换变得简单。

大多数全局选项都有一个对应的环境变量,也可以用来设置值。如果同时存在,命令行选项优先。环境变量名称是通过删除前导破折号 (–),将每个嵌入的破折号 (-) 转换为下划线 (_),并转换为大写来从选项名称派生的。

如果存在,配置文件的关键字名称是从全局选项名称派生的,通过删除 --os- 前缀。

全局选项

openstack manpage 列出了 OpenStackClient 识别的所有全局选项以及默认身份验证插件。

环境变量

openstack manpage 还列出了 OpenStackClient 和默认身份验证插件识别的所有环境变量。

配置文件

clouds.yaml

clouds.yaml 是一个配置文件,其中包含连接到一个或多个云所需的一切。它可能包含私有信息,通常被认为是用户私有的。

OpenStackClient 会在以下位置查找名为 clouds.yaml 的文件

  • 当前目录

  • ~/.config/openstack

  • /etc/openstack

找到的第一个文件获胜。

这些键与 openstack 全局选项匹配,但没有 --os- 前缀。

clouds:
  devstack:
    auth:
      auth_url: http://192.168.122.10:5000/
      project_name: demo
      username: demo
      password: 0penstack
    region_name: RegionOne
  ds-admin:
    auth:
      auth_url: http://192.168.122.10:5000/
      project_name: admin
      username: admin
      password: 0penstack
    region_name: RegionOne
  infra:
    cloud: rackspace
    auth:
      project_id: 275610
      username: openstack
      password: xyzpdq!lazydog
    region_name: DFW,ORD,IAD
    interface: internal

在上面的示例中,rackspace 云的 auth_url 取自 clouds-public.yaml(如下所示)。

前两个条目是同一个 DevStack 云的两个默认用户的条目。

第三个条目是 Rackspace Cloud Servers 帐户的条目。如果 clouds-public.yaml(如下所示)中存在 rackspace 条目,则它等效于以下选项

--os-auth-url https://identity.api.rackspacecloud.com/v2.0/
--os-project-id 275610
--os-username openstack
--os-password xyzpdq!lazydog
--os-region-name DFW
--os-interface internal

并且可以在命令行中选择

openstack --os-cloud infra server list

请注意,rackspace 条目中列出了多个区域。为每个区域创建了一个完全相同的配置。如果未在命令行中指定 -os-region-name,则默认使用列表中的第一个区域。

interface(如上面的 rackspace 条目中所示)的选择是可选的。为了使此配置工作,此云实例的每个服务必须已经配置为支持这种类型的接口。

如果您使用的是 Identity v3,则需要指定用户和项目域名称,如以下示例所示

clouds:
  devstack:
    auth:
      auth_url: http://192.168.122.10:5000/
      project_name: demo
      username: demo
      password: 0penstack
      user_domain_name: Default
      project_domain_name: Default
    region_name: RegionOne

clouds-public.yaml

clouds-public.yaml 是一个配置文件,旨在包含有关云的公共信息,这些信息在大量用户之间通用。其想法是 clouds-public.yaml 可以轻松地在用户之间共享,以简化公共云配置。

clouds.yaml 类似,OpenStackClient 会在以下位置查找 clouds-public.yaml

  • 当前目录

  • ~/.config/openstack

  • /etc/openstack

找到的第一个文件获胜。

这里的键在 clouds.yaml cloud 键中引用。出现在 clouds.yaml 中的任何内容

public-clouds:
  rackspace:
    auth:
      auth_url: 'https://identity.api.rackspacecloud.com/v2.0/'

调试

您可能会发现 configuration show 命令有助于调试配置问题。它将显示您当前的配置。

日志设置

通过在配置 clouds.yaml 中设置 log_levellog_file,用户可以启用额外的日志记录

clouds:
  devstack:
    auth:
      auth_url: http://192.168.122.10:5000/
      project_name: demo
      username: demo
      password: 0penstack
    region_name: RegionOne
    operation_log:
      logging: TRUE
      file: /tmp/openstackclient_demo.log
      level: info
  ds-admin:
    auth:
      auth_url: http://192.168.122.10:5000/
      project_name: admin
      username: admin
      password: 0penstack
    region_name: RegionOne
    log_file: /tmp/openstackclient_admin.log
    log_level: debug
log_file: </path/file-name>

日志文件的完整路径。

log_level: error | info | debug

如果未设置日志级别,将使用 warning

如果日志级别为 info,将记录以下信息

  • 云名称

  • 用户名

  • 项目名称

  • CLI 开始时间(日志记录开始时间)

  • CLI 结束时间

  • CLI 参数

  • CLI 返回值

  • 以及任何 info 消息。

如果日志级别为 debug,将记录以下信息

  • 云名称

  • 用户名

  • 项目名称

  • CLI 开始时间(日志记录开始时间)

  • CLI 结束时间

  • CLI 参数

  • CLI 返回值

  • API 请求标头/正文

  • API 响应标头/正文

  • 以及任何 debug 消息。

每次执行命令时,都会保存这些日志。记录用户操作可以帮助识别资源更改并提供有用的故障排除信息。

如果保存单个命令的输出,请使用 –log-file 选项。

  • –log-file <LOG_FILE>

可以使用以下选项设置 –log-file 的日志级别。

  • -v, –verbose

  • -q, –quiet

  • –debug

语言环境和语言支持

从 OpenStackClient 3.0.0 开始,完全支持语言。以下是一些确保您拥有正确配置的技巧。

验证首选 Python 编码

请执行以下操作以诊断并确保语言环境设置正确。以交互方式运行 Python 并打印首选编码值,例如:

$ python -c "import locale; print locale.getpreferredencoding()"

如果值为 asciiANSI_X3.4-1968 或任何 ASCII 的等效名称,则问题在于您的环境。您很可能没有正确设置 LANG 环境变量。

检查 LANG 环境变量

LANG 应该采用以下形式:lang_code`_`[region_code].`encoding`。例如,它可能如下所示:en_US.UTF-8

关键部分是 encodingUTF-8。Python 将查找语言环境信息,如果找到编码值,它会将 stdin、stdout 和 stderr 的编码属性设置为在您的环境中找到的值,如果未在您的环境中定义,则默认为 ASCII。

重定向输出

只有当 stdin、stdout 和 stderr 附加到 TTY 时,才会发生上述情况。如果重定向数据,这些流上的编码将默认为在 Python 分发的 site.py 中设置的默认编码,默认值为 ASCII。对此的解决方法是将 PYTHONIOENCODING 设置为 UTF8。

$ PYTHONIOENCODING=utf-8

关于 DevStack 的最后说明

一个常见的 post devstack 操作是 source openrc 文件以设置环境变量。这样做会取消设置终端中的默认 LANG 环境变量,这将导致首选 Python 编码为 ascii。我们建议单独设置这些环境变量,或使用 devstackdevstack-admin os-cloud 配置文件。

$ openstack project list --os-cloud devstack-admin