Jira利用API把用户设为deactive的方法
Jira REST API可以对用户账户做多种操作,但唯独不可以改变用户激活状态
# curl -D- -u admin:Admin_012 -X GET http://172.18.167.39:8080/rest/api/2/user?username=admin
{"self":"http://172.18.167.39:8080/rest/api/2/user?username=admin",
"key":"admin",
"name":"admin",
"emailAddress":"xnnewjcloudjenkins@jd.com",
"avatarUrls":{
"48x48":"http://172.18.167.39:8080/secure/useravatar?avatarId=10341",
"24x24":"http://172.18.167.39:8080/secure/useravatar?size=small&avatarId=10341",
"16x16":"http://172.18.167.39:8080/secure/useravatar?size=xsmall&avatarId=10341",
"32x32":"http://172.18.167.39:8080/secure/useravatar?size=medium&avatarId=10341"},
"displayName":"系统管理员",
"active":true,
"timeZone":"Asia/Shanghai",
"locale":"zh_CN",
"groups":{"size":2, "items":[]},
"applicationRoles":{"size":1, "items":[]},
"expand":"groups,applicationRoles"}
无论是用POST, PUT, UPDATE尝试将"active"设为false,REST API都返错误。据说是因为Jira的公司出于安全性的考虑,所以没有开放这个选项的REST API操作。
但是有些时候又的确需要程序化的操作手段,比如公司部门架构调整或是人员变动时,需要批量删除用户,如果直接去delete用户并不是一个好的方法,因为这些用户如果之前在Jira里有过任何操作,那删除用户之后,操作的记录关联项就会变为Null,这无疑是不利于系统使用和维护的。在这种情况下,将这些失效用户置为deactive就是一种比较好的解决方法。但Jira系统deactive用户的操作是在界面上:设置->用户管理->选择某个用户->最右侧的[编辑]->去掉[活跃/active]的勾选框。
但大批量操作时这种做法无疑不可行,还是需要API的解决方法。
在Jira公司提供正式的支持API之前,一种workaround如下:
1. 先创建一个应用APP:设置->用户管理->Jira用户服务器->[添加应用程序]
2. 在输入页面中填入:[应用程序名称]:任意字符串比如app_name;[密码]:能记住就行比如app_password;[IP地址]:保留默认的127.0.0.1和::1,另起一行,填入你打算执行操作的客户端机器的ip地址,比如192.168.1.5;保存,现在应该能在回到的页面上看到刚刚创建的应用的信息
3. 到刚才指定IP的客户端机器上,输入curl命令:
# curl -D- -u app_name:app_password -X PUT --data '{"name":"要删除的用户名/key", "active":"false"}' http://jira_host_name:8080/rest/usermanagement/1/user?username=要删除的用户名/key -H 'Content-Type: application/json' -H 'Accept: application/json'
4. 批量删除用户的话,写个shell script即可
# curl -D- -u admin:Admin_012 -X GET http://172.18.167.39:8080/rest/api/2/user?username=admin
{"self":"http://172.18.167.39:8080/rest/api/2/user?username=admin",
"key":"admin",
"name":"admin",
"emailAddress":"xnnewjcloudjenkins@jd.com",
"avatarUrls":{
"48x48":"http://172.18.167.39:8080/secure/useravatar?avatarId=10341",
"24x24":"http://172.18.167.39:8080/secure/useravatar?size=small&avatarId=10341",
"16x16":"http://172.18.167.39:8080/secure/useravatar?size=xsmall&avatarId=10341",
"32x32":"http://172.18.167.39:8080/secure/useravatar?size=medium&avatarId=10341"},
"displayName":"系统管理员",
"active":true,
"timeZone":"Asia/Shanghai",
"locale":"zh_CN",
"groups":{"size":2, "items":[]},
"applicationRoles":{"size":1, "items":[]},
"expand":"groups,applicationRoles"}
无论是用POST, PUT, UPDATE尝试将"active"设为false,REST API都返错误。据说是因为Jira的公司出于安全性的考虑,所以没有开放这个选项的REST API操作。
但是有些时候又的确需要程序化的操作手段,比如公司部门架构调整或是人员变动时,需要批量删除用户,如果直接去delete用户并不是一个好的方法,因为这些用户如果之前在Jira里有过任何操作,那删除用户之后,操作的记录关联项就会变为Null,这无疑是不利于系统使用和维护的。在这种情况下,将这些失效用户置为deactive就是一种比较好的解决方法。但Jira系统deactive用户的操作是在界面上:设置->用户管理->选择某个用户->最右侧的[编辑]->去掉[活跃/active]的勾选框。
但大批量操作时这种做法无疑不可行,还是需要API的解决方法。
在Jira公司提供正式的支持API之前,一种workaround如下:
1. 先创建一个应用APP:设置->用户管理->Jira用户服务器->[添加应用程序]
2. 在输入页面中填入:[应用程序名称]:任意字符串比如app_name;[密码]:能记住就行比如app_password;[IP地址]:保留默认的127.0.0.1和::1,另起一行,填入你打算执行操作的客户端机器的ip地址,比如192.168.1.5;保存,现在应该能在回到的页面上看到刚刚创建的应用的信息
3. 到刚才指定IP的客户端机器上,输入curl命令:
# curl -D- -u app_name:app_password -X PUT --data '{"name":"要删除的用户名/key", "active":"false"}' http://jira_host_name:8080/rest/usermanagement/1/user?username=要删除的用户名/key -H 'Content-Type: application/json' -H 'Accept: application/json'
4. 批量删除用户的话,写个shell script即可
评论
发表评论