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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。