将策略文件分发到 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 来阻止此策略文件分发。
然后,我们应该分两个步骤处理策略分发
在
horizon-installplaybook 期间,从每个组的第一个主机下载每个已部署的 policy.json 文件到部署节点上的policy_files_distribution_folder(默认值为/etc/openstack_deploy/)。拥有 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
注意:它们的名称以后可能会调整(参见实现)。
开发人员影响¶
不应有任何更改。
依赖项¶
无。
实现¶
负责人¶
目前还没有
工作项¶
group_var 用于定义自动下载
playbook 编辑以下载策略
角色更改以上传 json 文件
测试¶
此更改是否会影响 gating 的方式?
否
此更改是否可以基于 每次提交 进行测试?
是
考虑到 OpenStack Infra 中实例大小的限制(8GB Ram,vCPUs <= 8),测试是否可以在资源受限的环境中运行?
是的。
鉴于当前的限制(可用的特定硬件/软件配置),此测试是否无法进行?如果是这样,是否有缓解计划,以便在第三方测试、gate 增强等方式下测试此更改?
此更改是可测试的。
如果服务不是 OpenStack 特定的,我们如何测试更改?
它是 OpenStack 特有的
文档影响¶
我们需要更新文档,以说明如何编辑策略以及如何启用将策略分发到 Horizon 的方法。
参考资料¶
策略文件 URL
Horizon: https://docs.openstack.org/developer/horizon/topics/policy.html#policy-files
keystone: https://github.com/openstack/keystone/blob/master/etc/policy.json
Glance: https://github.com/openstack/glance/blob/master/etc/policy.json
Nova: https://github.com/openstack/nova/blob/master/etc/nova/policy.json
Neutron: https://github.com/openstack/neutron/blob/master/etc/policy.json
Cinder: https://github.com/openstack/cinder/blob/master/etc/cinder/policy.json