分享

openstack之user篇

xioaxu790 发表于 2014-5-10 20:37:52 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 13064
问题导读:
1、user在openstack中起什么作用?
2、如何创建user ?





一、user简介
    Openstack为管理员提供了一个管理页面,用户只要用自己的用户名和密码登录后,就可以进行一系列的操作,包括上传image, 创建instance等,如果是admin用户,还可以对用户、projecttenant)等操作。至于管理员的账户,需要有相关供应商(如果有的话)或openstack环境搭建者提供。在SUSE CLOUD1.0中,由于我们用Crowbar作为openstack环境的搭建工具,所以admin用户的信息是通过admin node节点的相关配置提供的,配置文件位于/opt/dell/chef/data_bags/crowbar/bc-template-keyston.json,在JS[attributes][admin]中定义了admin用户的相关信息:nameproject namepassword
    要新创建一个用户,必须给这个用户指定一个project. Project又称为tenant,可以看做定义了一组特定资源的组合,只要定义了一个属于这个project的用户,则该用户就能够使用这个project定义的一组资源。用户和project是多对多的关系,一个project包括许多用户,一个用户也可以属于不同的project
    只有用户admin(超级用户)才能够参与user的管理,例如用户的添加,删除,密码修改等(这可以认为是openstack branch/essex的一个bug,一个普通用户应该能够对自己进行编辑,估计这个问题在openstack的新版本上能够得到解决)。

二、user 命令
    关于user的基本命令有:user-list, user-get, user-create, user-delete ... 相关用法可以参考相关的api介绍, 也可通过
    # keystone help 获得帮助。
    下面用user-list为例介绍其使用方法。
    管理用户取得用户列表命令为user-list
    # keystone --os-username admin--os-passowrd password --os-tenant-name admin user-list
    可以看到为了取得用户列表,需要提供超级用户名(admin,根据你的环境,下同),密码(password,project(admin)keystoneclient在接收到命令后,会为该用户生成一个token, 然后根据这个token完成命令的相关操作。在所有的serviceclientsed 's/service/[keystone, glance, nova, ...]')中,都需要通过token来完成相关操作。
    linux终端为了使用方便,可以定义一系列环境变量来简化相关操作的输入。
    定义环境变量:
    # export OS_USERNAME=admin
    # export OS_PASSWORD=password
    # export OS_TENANT_NAME=admin
    # exportOS_AUTH_URL=""http://127.0.0.1:5000/v2.0/
    这样就大大简化命令行输入代码:
    # keystone user-list

三、user api
    openstack所有的命令都是通过WSGI进行扩展,用http请求来完成。用户PUT/POST请求数据给相应的nova endpoint, nova处理请求,reponse相关的数据。请求数据通常包装成json格式,也可以是XML格式。
    openstack.org/api介绍中,user list的请求格式定义为:
      
     Verb定义了该请求为GET方式,需要访问URIv2.0/users, 将它与相应的endpoint拼接起来,就是这个命令URI的完全路径。
user关联的endpoint可以用以下命令取得:
    # nova endpoints      
              ...
    +-------------+------------------------------------------------------------------+
     | keystone    | Value                                                           |
   +-------------+------------------------------------------------------------------+
    | region      | RegionOne                                                       |
   +-------------+------------------------------------------------------------------+
    ...
    关于keystone的相关操作都属于keystone部分, 所以讲nova->adminURL取出来,注意keystoneendpoint已经包含版本号v2.0,所以需要把v2.0去掉再和上述URI拼起来就是我们需要访问的URI
    关于user token,可以用以下命令获得:
    curl -X POSThttp://localhost:5000/v2.0/tokens -d'{"auth":{"passwordCredentials":{"username":"admin", "password":"crowbar"}}}' -H"Content-type: application/json"
    也可以用代码的方式获得。
    有了URI user token,我们就可以通过http请求取得user list了。
    python代码:
   
import httplib2
req_url ="http://d52-54-01-77-77-71.virtual.cloud.suse.de:35357/v2.0/users"
method ="GET"
http_obj =httplib2.Http()
headers = {}
headers['X-Auth-Token']= "95cf83d589eb4654b4ae7ee26c747338"
resp, resp_body =http_obj.request(req_url, method,
                                  headers=headers, body=None)
print resp_body

输出结果:
   {"users": [{"tenant_id":"4e14ab2a2df045f1a6f02081a46deb2c", "enabled":"True", "id": "ce205b61760c463cb46e41909de8495f","name": "admin"}, {"tenant_id":   "82a50c8ca24e4fb4893b922867936a1b", "enabled":"True", "id": "93183a88bd3f400595d76d97de240b21","name": "crowbar"}, {"tenant_id":"79741744708840888d51532920f0bdc4", "enabled":"True", "id": "1a739ace53054437a2b207100c9f2a39","name": "glance"}, {"tenant_id":"79741744708840888d51532920f0bdc4", "enabled":"True", "id": "dc906b9e8cc64456bb962ac41557a972","name": "nova"}, {"name": "demo","enabled": true, "email": null, "id":"cc1eb14d33144bd08aeef821f972c887", "tenantId":"723f3c3b4bb64af382470e9254372af2"}, {"name":"test", "enabled": true, "email": null,"id": "446460140f6f4ed1a97e0964cf56959c", "tenantId":"4e14ab2a2df045f1a6f02081a46deb2c"}, {"name":"testuser", "enabled": true, "email": null,"id": "c61ef7c83f8f4a999021fccf73be1345","tenantId": "c4c4c1ba590740d8b1b783aa61d32aed"}]}
   
可以看到,所有用户的信息已经通过http访问方式以json格式列了出来。  

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条