openstack之user篇

来源:互联网 发布:微信养号软件 编辑:程序博客网 时间:2024/06/06 05:03

一、user简介

    Openstack为管理员提供了一个管理页面,用户只要用自己的用户名和密码登录后,就可以进行一系列的操作,包括上传image, 创建instance等,如果是admin用户,还可以对用户、project(tenant)等操作。至于管理员的账户,需要有相关供应商(如果有的话)或openstack环境搭建者提供。在SUSE CLOUD1.0中,由于我们用Crowbar作为openstack环境的搭建工具,所以admin用户的信息是通过admin node节点的相关配置提供的,配置文件位于 /opt/dell/chef/data_bags/crowbar/bc-template-keyston.json,在JS[attributes][admin]中定义了admin用户的相关信息:name,project name和password。

    要新创建一个用户,必须给这个用户指定一个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完成命令的相关操作。在所有的serviceclient(sed 's/service/[keystone, glance, nova, ...]')中,都需要通过token来完成相关操作。

    在linux终端为了使用方便,可以定义一系列环境变量来简化相关操作的输入

    定义环境变量:

    # export OS_USERNAME=admin

    # export OS_PASSWORD=password

    # export OS_TENANT_NAME=admin

    # export OS_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方式,需要访问URI为v2.0/users, 将它与相应的endpoint拼接起来,就是这个命令URI的完全路径。
user关联的endpoint可以用以下命令取得:
    # nova endpoints      
              ...

     +-------------+------------------------------------------------------------------+
     | keystone    | Value                                                            |
    +-------------+------------------------------------------------------------------+
    | adminURL    | http://d52-54-01-77-77-71.virtual.cloud.suse.de:35357/v2.0       |
    | internalURL | http://d52-54-01-77-77-71.virtual.cloud.suse.de:5000/v2.0        |
    | publicURL   | http://public.d52-54-01-77-77-71.virtual.cloud.suse.de:5000/v2.0 |
    | region      | RegionOne                                                        |
    +-------------+------------------------------------------------------------------+
    ...


    关于keystone的相关操作都属于keystone部分, 所以讲nova->adminURL取出来,注意keystone的endpoint已经包含版本号v2.0,所以需要把v2.0去掉再和上述URI拼起来就是我们需要访问的URI。
    URI: http://d52-54-01-77-77-71.virtual.cloud.suse.de:35357/v2.0/users.

    关于user token,可以用以下命令获得:
    curl -X POST http://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格式列了出来。 


原创粉丝点击