Python3批量创建Crowd用户并分配组
背景
迁移Crowd完成后(之前采用LDAP方式,新迁移Crowd不采用),需要批量创建公司所有员工的用户以及分配组,手工创建以及之前Postman的方式还是比较低效。
Python在N多年前入门,写了几个爬虫脚本后,再也没用过,借这个机会顺便再熟悉下Python脚本。
归根结底的原因就是:本人很懒~
CrowdApi
https://docs.atlassian.com/atlassian-crowd/3.2.0/REST/
如下示例是基于Crowd3.2.0版本的Api,不同版本间的Api稍有差异。
#添加用户
$curl-u"application-name:password"-XPOST-H"Content-Type:application/json"-H"Accept:application/json"-d"{\"name\":\"test.user\",\"display-name\":\"TestUser\",\"active\":true,\"first-name\":\"Test\",\"email\":\"test.user@ourdomain.com\",\"last-name\":\"User\",\"password\":{\"value\":\"mypassword\"}}"http://localhost:8095/crowd/rest/usermanagement/1/user#用户添加到组
$curl-u"application-name:password"-XPOST-H"Content-Type:application/json"-d"{\"name\":\"all-users\"}"http://localhost:8095/crowd/rest/usermanagement/1/user/group/direct\?username\=daodaotest
注意:此处-u的参数为Crowd中应用(Application)的用户名和密码,Crowd的管理员是不能添加用户。
Python实现脚本
实现添加Crowd用户,用户添加到指定组,读取csv文件批量添加用户和设定的多个组。
crowdUsers.csv用户数据csv文件
name,displayName,email
daodaotest1,daodaotest1,daodaotest1@daodaotest.com
daodaotest2,daodaotest2,daodaotest2@daodaotest.com
daodaotest3,daodaotest3,daodaotest3@daodaotest.com
......
addCrowdUsers.py批量添加Crowd用户和用户组脚本
#!/usr/bin/python #-*-coding:UTF-8-*- # #FilenameaddCrowdUsers.py #Revision0.0.1 #Date2020/5/14 #Authorjiangliheng #Emailjiang_liheng@163.com #Websitehttps://jiangliheng.github.io/ #Description批量添加Crowd用户和用户组 importrequests fromrequests.authimportHTTPBasicAuth importcsv fromitertoolsimportislice #请求headers headers={ 'Accept':'application/json', 'Content-type':'application/json', } #crowd访问基础路径 base_url='http://localhost:8095' #添加用户的默认用户组和密码 auth_username='application-name' auth_password='password' #用户默认密码 password='daodaotest' defaddUser(name,displayName,email): """ 添加单用户 :paramname:登录用户,建议拼音全称,如:jiangliheng :paramdisplayName:显示名称,建议中文全称,如:蒋李恒 :paramemail:邮箱地址 :return:status_code状态码,text响应报文信息 """ #请求json数据 data='{\ "name":"'+name+'",\ "email":"'+email+'",\ "active":true,\ "first-name":"'+displayName+'",\ "last-name":"'+displayName+'",\ "display-name":"'+displayName+'",\ "password":{\ "value":"'+password+'"\ }\ }' #发起请求 #解决中文乱码问题data.encode("utf-8").decode("latin1") response=requests.post( base_url+'/crowd/rest/usermanagement/1/user', headers=headers, auth=HTTPBasicAuth(auth_username,auth_password), data=data.encode("utf-8").decode("latin1") ) #状态码 status_code=response.status_code #响应报文信息 text=response.text #状态判断 ifstr(status_code).startswith("2"): print("%s用户添加成功,状态码:%s,响应报文信息:%s"%(name,status_code,text)) else: print("%s用户添加失败,状态码:%s,响应报文信息:%s"%(name,status_code,text)) #返回状态码,响应报文信息 returnstatus_code,text defaddGroup(username,groupname): """ 用户添加到组 :paramusername:登录用户,建议拼音全称,如:jiangliheng :paramgroups:用户组,用逗号隔开,如:bitbucket-users,bamboo-users :return:status_code状态码,text响应报文信息 """ #请求json数据 data='{\ "name":"'+groupname+'"\ }' #发起请求 response=requests.post( base_url+'/crowd/rest/usermanagement/1/user/group/direct?username='+username, headers=headers, auth=HTTPBasicAuth(auth_username,auth_password), data=data ) #状态码 status_code=response.status_code #响应报文信息 text=response.text #状态判断 ifstr(status_code).startswith("2"): print("%s用户添加组%s成功,状态码:%s,响应报文信息:%s"%(username,groupname,status_code,text)) else: print("%s用户添加组%s失败,状态码:%s,响应报文信息:%s"%(username,groupname,status_code,text)) #返回状态码,响应报文信息 returnstatus_code,text defaddUserByCsv(csvfile): """ 通过CSV文件批量添加用户,并加到组 :paramfilename:Crowd用户csv文件 """ #批量读取csv的用户 withopen(csvfile,'r',encoding='utf-8')asf: fieldnames=("name","displayName","email") reader=csv.DictReader(f,fieldnames) forrowinislice(reader,1,None): print("批量添加用户%s"%(row["name"])) #添加用户 addUser(row["name"],row["displayName"],row["email"]) #添加多个组 addGroup(row["name"],"all-users") addGroup(row["name"],"bitbucket-users") addGroup(row["name"],"confluence-users") addGroup(row["name"],"jira-software-users") addGroup(row["name"],"sonar-users") f.close() defmain(): #通过CSV文件批量添加用户,并加到组 addUserByCsv("crowdUsers.csv") #添加单用户 #addUser("daodaotest","叨叨软件测试","daodaotest@daodaotest.com") #添加用户到组 #addGroup("daodaotest","all-users") if__name__=="__main__": main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。