Nexus sonatype groovy получить пользователя LDAP

Я пытаюсь проверить конфигурации Nexus Sonatype. Я обнаружил скрипты Groovy отсюда:

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

Я могу настроить LDAP в Nexus Sonatype или даже создать новую роль (не из LDAP). Но теперь я ищу, как получить пользователей LDAP, чтобы затем поместить их в определенную группу / роль.

Скрипт 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)
  }

На вкладке «Пользователи» Nexus выбирает источник «по умолчанию» (не 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, я пробовал с '[]', но не лучше ..


person Isador    schedule 28.12.2016    source источник
comment
Мы немного запутались в том, чего вы пытаетесь достичь. Вы хотите найти существующих созданных пользователей LDAP, а затем изменить источник?   -  person DarthHater    schedule 28.12.2016
comment
Нет. После настройки LDAP я должен искать пользователя в LDAP и добавлять его в группу. Фактически, перед любой операцией мне нужно изменить Источник на LDAP вместо значения по умолчанию (это источник, в котором ищут пользователи).   -  person Isador    schedule 29.12.2016


Ответы (1)


Итак, чтобы найти всех пользователей LDAP, вы можете сделать что-то вроде этого

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

Оттуда я не уверен, зачем вам переключать источник, но это даст вам список всех пользователей LDAP.

person DarthHater    schedule 29.12.2016
comment
Спасибо за ответ, попробую. Это для моей организации, мне нужно изначально подготовить Nexus, поместив некоторых пользователей LDAP в определенную группу / роль. - person Isador; 30.12.2016
comment
Заинтересованы в вашем полном варианте использования, это будет полезно, если мы что-то исправим в будущем :) - person DarthHater; 30.12.2016
comment
В нашей организации мы изучаем решение Repository Manager (мы сделали PoC для Sonatype Nexus и Jfrog Artifactory). Мы выбрали Nexus, потому что он поддерживает множество типов репозиториев. Все наши развертывания выполняются с помощью Ansible, и конечная цель - развернуть Nexus с автоматической настройкой, избегая ручных настроек (особенно в отношении LDAP). Я обнаружил эту роль Ansible, которая внедряет скрипты Groovy в Nexus и вызывает их с параметрами HTTP: github.com/savoirfairelinux/ansible-nexus3-oss/tree/master/ - person Isador; 04.01.2017