为Openstack添加注册模块

在openstack中,只有admin用户才可以创建用户,租客,并且分配用户给租客,所以如果要添加注册功能的话,就要创建一个keystoneclient,使其拥有admin的身份。

一个完整的创建用户的流程应该是这样的,创建租客 —— 创建用户 —— 分配用户给租客,所以我们的注册用户的时候也应该仿照这样的流程去创建用户。

首先,参看keystone的源码,可以伪造一个admin的keystoneclien,代码如下

   from keystoneclient.v2_0 import client as keystone_client 
   token = keystone_client.Client(username='admin',
                                 password=ADMIN_PASSWORD,
                                 tenant_name='admin',
                                 auth_url=AUTH_URL)
   token1 = token.auth_ref.auth_token

  伪造这个client的目的就是得到他的token(代码中叫做token1),有了这个token接着

    conn = keystone_client.Client(
        token=token1, endpoint=AUTH_URL,
        original_ip=request.environ.get('REMOTE_ADDR', ''),
        insecure=getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False))

  

现在的这个conn就是一个拥有admin身份的keystoneclient了,那么就可以用它去做各种事情了。

接下来的事情就很简单了,只需要按照keystone的api依次调用就好。

创建租客:

from openstack_dashboard import api
a = api.keystone.super_tenant_create(request, data['name'], data['email'], True)

创建用户:

from openstack_dashboard import api
new_user = api.keystone.super_user_create(request, data['name'], data['email'], data['password'], data['tenant_id'], True)

分配用户给租客:

from openstack_dashboard import api
api.keystone.add_tenant_super_user_role(request, data['tenant_id'], new_user.id, data['role_id'])

  

需要说明的是data这个dict是用注册界面post而来,

class CreateUser(forms.SelfHandlingForm):

    name = forms.CharField(label=_("User Name"),
                          help_text='Please input your username',
                          validators=[check_name])

    password = forms.RegexField(label=_("Password"),
        min_length=6,
        help_text='Your password must be at least 6 characters long',
        widget=forms.PasswordInput(render_value=False),
        regex=validators.password_validator(),
        error_messages={'invalid': validators.password_validator_msg()})

    confirm_password = forms.CharField(
            label=_("Confirm Password"),
            help_text='Please confirm your password',
            required=True,
            widget=forms.PasswordInput(render_value=False))
    email = forms.EmailField(label=_("Email"), help_text='Please input your email', required=True)

 

至此,一个用户就创建成功了。

欢迎讨论,邮箱changzhi1990@gmail.com

 

posted @ 2013-10-18 15:46  苌来看看  阅读(711)  评论(0编辑  收藏  举报