为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