2016-12-28 74 views
1

我試圖驗證Nexus Sonatype配置。 我從這裏發現Groovy腳本:Nexus sonatype groovy獲得LDAP用戶

https://github.com/savoirfairelinux/ansible-nexus3-oss/tree/master/templates/groovy

我能夠在的Nexus Sonatype的配置LDAP,甚至創造(而不是從LDAP)的新角色。但是現在我正在搜索如何獲得LDAP用戶,然後將它們放入特定的組/rôle中。

的Groovy腳本如下:

import groovy.json.JsonSlurper 
import org.sonatype.nexus.security.user.UserNotFoundException 


parsed_args = new JsonSlurper().parseText(args) 

try { 
    // update an existing user 
    user = security.securitySystem.getUser(parsed_args.username) 

    /* I tried with 'setSource' but doesn't works... */ 
    user.setSource(parsed_args.source) 

    user.setFirstName(parsed_args.first_name) 
    user.setLastName(parsed_args.last_name) 
    user.setEmailAddress(parsed_args.email) 
    security.setUserRoles(parsed_args.username, parsed_args.roles) 
    security.securitySystem.updateUser(user) 
    security.securitySystem.changePassword(parsed_args.username, parsed_args.password) 
    security.setUserRoles(parsed_args.username, parsed_args.roles) 

} catch(UserNotFoundException ignored) { 
    // create the new user 
    security.addUser(parsed_args.username, parsed_args.first_name, parsed_args.last_name, parsed_args.email, true, parsed_args.password, parsed_args.roles) 
    } 

在 「用戶」 標籤,納克斯選擇 「默認」 源(未LDAP ...)。 我在nexus-public存儲庫中搜索org.sonatype.security組,但老實說我不明白他們的類... https://github.com/sonatype/nexus-public/tree/master/components/nexus-security/src/main/java/org/sonatype/nexus/security

任何人都已經這樣做了嗎?

編輯:

我嘗試這樣做:

import groovy.json.JsonSlurper 
import org.sonatype.nexus.security.user.UserNotFoundException 
import org.sonatype.nexus.security.user.UserSearchCriteria 

parsed_args = new JsonSlurper().parseText(args) 


criteria = new UserSearchCriteria(userId: 'myUser', source: 'LDAP') 
user = security.securitySystem.searchUsers(criteria) 
//user.forEach { println it } 
security.setUserRoles(user.userId, 'myRole') 
security.securitySystem.updateUser(user) 

現在我的錯誤是:

javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: org.sonatype.nexus.security.internal.SecurityApiImpl.setUserRoles() is applicable for argument types: (java.util.ArrayList, java.util.ArrayList) values: [[myUser], [myRole]]\\nPossible solutions: setUserRoles(java.lang.String, java.util.List)\"\n}", "content_type": "application/json", "date": "Fri, 30 Dec 2016 10:05:51 GMT", "failed": true, "json": {"name": "setup_user", "result": "javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: org.sonatype.nexus.security.internal.SecurityApiImpl.setUserRoles() is applicable for argument types: (java.util.ArrayList, java.util.ArrayList) values: [[myUser], [myRole]]\nPossible solutions: setUserRoles(java.lang.String, java.util.List)"}, "msg": "Status code was not [200, 204]: HTTP Error 400: Bad Request 

也許,我有一個ArrayList的類型有問題,我試着用 '[]'但並不是更好。

+0

我們對你想要完成的事情有點困惑。您想查找現有的已創建的LDAP用戶,然後更改源代碼? – DarthHater

+0

否。一旦配置了LDAP,我將搜索LDAP中的用戶並將其添加到組中。事實上,在進行任何操作之前,我需要將Source更改爲LDAP,而不是「默認」(這是搜索用戶的來源)。 – Isador

回答

0

所以要找到所有的LDAP用戶,你可以這樣做:

import org.sonatype.nexus.security.user.UserSearchCriteria 
criteria = new UserSearchCriteria(source: 'LDAP') 
users = security.securitySystem.searchUsers(criteria) 
users.forEach { println it } 

從那裏,我不確定爲什麼要切換源代碼,但是這會爲您提供所有LDAP用戶的列表。

+0

感謝您的回答,我會試試這個。這對於我的組織來說,我需要最初配置Nexus,將某些LDAP用戶放入特定的組/組中。 – Isador

+0

有興趣知道您的完整用例,這將有助於我們在將來調整內容:) – DarthHater

+0

在我們的組織中,我們正在研究Repository Manager解決方案(我們製作了Sonatype Nexus和Jfrog Artifactory的PoC)。我們選擇了Nexus,因爲它支持很多存儲庫類型。我們所有的部署都是使用Ansible完成的,最終目標是部署Nexus自動配置,避免手動設置(特別是關於LDAP)。我發現了在Nexus中插入Groovy腳本的AnsibleRôle,並使用HTTP參數調用它們:https://github.com/savoirfairelinux/ansible-nexus3-oss/tree/master/templates – Isador