Openstack horizon 通过policy进行定制化
来源:互联网 发布:淘宝网店怎么赚钱 编辑:程序博客网 时间:2024/05/08 15:02
Openstack的horzion组件目前只提供了部分的Openstack管理操作,有些功能只能通过命令行完成,命令行对于没有技术背景的客户来说是一种很糟糕的体验。同时,horzion中一些功能的默认权限可能并不完全符合某些客户的应用场景,所有经常有必要对horizon进行一些定制化的处理。
Openstack admin guide只介绍了简单的定制化处理,包括网站的标题、logo以及一些css样式的定制化,远远没法满足定制化的需求。
这里简单记录一下通过policy来定制化horizon。
nova、keystone以及glance中默认的policy.json文件中只能识别admin角色:所有不需要admin角色的操作可以被相应tenant中的拥有任何角色的任何用户执行。
horizon中也会保存各个组件相应的policy.json文件,默认存放在horizon/openstack_dashboard/conf中。horizon会根据policy.json文件中的内容来为不同的用户显示不同的内容。下面举一个简单的例子说明:
需求: 默认情况下,普通的用户也可以创建网络,客户希望网络只能由管理员来创建。
实现: 修改horizon/openstack_dashboard/conf/neutron_policy.json
"create_network": "", 修改为 "create_network": "rule:admin_only" 实现起来很简单。
同时,horizon是怎么知道Openstack中开启了哪些服务:例如你的Openstack环境中没有启动swift服务,而此时horizon中却显示了对象存储服务的话,就会出现问题。
其实horizon根据的是keystone中是否存在相应service_type的endpoint。
代码见 openstack_auth项目的backend.py文件:
def get_all_permissions(self, user, obj=None): """Returns a set of permission strings that this user has through his/her Keystone "roles". The permissions are returned as ``"openstack.{{ role.name }}"``. """ if user.is_anonymous() or obj is not None: return set() # TODO(gabrielhurley): Integrate policy-driven RBAC # when supported by Keystone. role_perms = set(["openstack.roles.%s" % role['name'].lower() for role in user.roles]) service_perms = set(["openstack.services.%s" % service['type'].lower() for service in user.service_catalog if user.services_region in [endpoint.get('region', None) for endpoint in service.get('endpoints', [])]]) return role_perms | service_perms比如openstack_dashboard/dashboards/project/containers/panel.py 中
class Containers(horizon.Panel): name = _("Containers") slug = 'containers' permissions = ('openstack.services.object-store',)
permission是"openstack.services.object-store" 表示keystone中必须有一个service_type为object-store的service,并且这个service存在endpoint。这样的基础上,horizon才会在project中显示相应的对象存储选项。
keystone中的service_type挺重要的,不能随便设置。
接下来希望对horizon的代码进行进一步的了解。
- Openstack horizon 通过policy进行定制化
- openstack 个性化定制horizon
- openstack horizon 快速入门
- OpenStack Horizon 使用VNC
- openstack中horizon学习
- openstack horizon 报 error
- Openstack Horizon修改笔记
- openstack horizon 新增dashboard
- OpenStack Horizon 参数设置说明
- 自定义OpenStack Horizon(Mitaka)
- Openstack --- Horizon之login
- Openstack Horizon workflows
- OpenStack Horizon开发环境
- 【openstack】Nova中的policy
- OpenStack版本升级之Horizon
- OpenStack版本升级之Horizon
- OpenStack horizon开发环境搭建
- openstack horizon ubuntu apache2 总结
- 工具栏按钮下拉菜单
- C++中内存泄露问题
- Android初学之备份短信(写xml文件、多线程、进度条)
- linux中fork()函数详解(详细,实例精讲)
- Android TCP demo
- Openstack horizon 通过policy进行定制化
- LeetCode[Array]: Rotate Image
- C语言函数的学习
- 【转】Js window.document 的属性、方法和事件汇总
- Jquery$.each用法
- hdu1075 字典树
- 【转】onclick事件 能不能同时调用两个js函数
- bulletsop 2.0.12 for houdini 13
- 将My97DatePicker插件正确放入项目中调用