将策略文件分发到 Horizon

日期:

2015-11-24 15:00

标签:

跨项目, 跨角色, json, 策略, 分发, Horizon

OpenStack Horizon 可以使用 policy.json 文件来过滤其 Web 界面上可用的操作。为此,Horizon 会消费每个 OpenStack 项目(例如 cinder/nova/glance/…)的 policy.json 文件,它不会分发自己的文件。

因此,如果部署者希望在 API 和 Web 界面之间拥有统一的策略,部署者必须将策略上传到 Horizon。

目前,这在 openstack-ansible 中尚未完成。

https://blueprints.launchpad.net/openstack-ansible/+spec/policy-files-distribution

问题描述

目前,每个需要策略文件的部署者都在做相同的工作。让我们尝试在未来避免这种情况:他们使用 openstack-ansible 创建 OpenStack 项目的策略文件,但随后需要使用自己的角色手动将策略文件上传到 Horizon。

这应该可以解决这个问题,并提出一个策略文件部署方案

提议的变更

首先,应该有一个通用的跨角色开关 (policy_file_distribution_enabled),默认值为 False,除非部署者为某个组件设置了 _policy_overrides。当然,部署者可以通过将其设置为 False 来阻止此策略文件分发。

然后,我们应该分两个步骤处理策略分发

  1. horizon-install playbook 期间,从每个组的第一个主机下载每个已部署的 policy.json 文件到部署节点上的 policy_files_distribution_folder(默认值为 /etc/openstack_deploy/)。

  2. 拥有 Horizon 角色可以消耗部署主机上的这些文件并将 json 文件上传到 Horizon 节点。这将需要连接到多个主机,并会延长部署时间(首次运行时,如果启用)。

备选方案

  • 不实现此功能,让部署者自行完成工作

  • 依赖 Horizon 在未来分发自己的策略映射

  • 将每个项目(例如 nova、neutron 等)的默认策略文件从其 git 源代码中包含在 Horizon 角色中,并使用 config_template 上传/覆盖 Horizon 上的最终 nova_policy.json, glance_policy.json,... 文件。这将需要我们跟踪 Horizon 和各个项目角色中的 OpenStack 项目策略更改。

  • 在运行 os_horizon 角色之前,从其 git 源代码仓库(例如 glance、nova 等)下载每个项目的 policy.json 文件到部署节点。然后使用 config_template 上传/覆盖 Horizon 上的最终 json 文件。这将需要我们跟踪 OpenStack 项目策略文件 URL 的更改。

  • 最后的替代方案是使用另一种机制进行分发(例如 memcache/swift/文件同步…)。

Playbook/Role 影响

playbooks/role 中的小幅更改。

升级影响

没有升级影响。

安全影响

性能影响

如果首次启用,部署时间会稍长。实现将在存在文件的情况下重新下载,除非通过变量明确告知:policy_file_distribution_force_refresh

最终用户影响

最终用户将不会出现不一致的行为,即某个按钮无法工作,因为策略在组件 API 中阻止了它,但在 Horizon 中没有阻止。

部署者影响

一些新的变量

  • policy_file_distribution_enabled

  • policy_file_distribution_force_refresh

  • policy_files_distribution_files

注意:它们的名称以后可能会调整(参见实现)。

开发人员影响

不应有任何更改。

依赖项

无。

实现

负责人

目前还没有

工作项

  1. group_var 用于定义自动下载

  2. playbook 编辑以下载策略

  3. 角色更改以上传 json 文件

测试

  • 此更改是否会影响 gating 的方式?

  • 此更改是否可以基于 每次提交 进行测试?

  • 考虑到 OpenStack Infra 中实例大小的限制(8GB Ram,vCPUs <= 8),测试是否可以在资源受限的环境中运行?

是的。

  • 鉴于当前的限制(可用的特定硬件/软件配置),此测试是否无法进行?如果是这样,是否有缓解计划,以便在第三方测试、gate 增强等方式下测试此更改?

此更改是可测试的。

  • 如果服务不是 OpenStack 特定的,我们如何测试更改?

它是 OpenStack 特有的

文档影响

我们需要更新文档,以说明如何编辑策略以及如何启用将策略分发到 Horizon 的方法。

参考资料

策略文件 URL