JPAnderson JPAnderson - 2 months ago 21
Groovy Question

Nexus3 Configure LDAP with API

I'm currently trying to write a script to configure LDAP on my Nexus 3 instance. I've taken a look at this post and i'm running into some errors and I think it's just me not understanding Groovy that well.

Here's what I've tried.

import org.sonatype.nexus.ldap.persist.*
import org.sonatype.nexus.ldap.persist.entity.*
import groovy.json.JsonSlurper

def ldap = new JsonSlurper().parseText(args)
def manager = container.lookup(LdapConfigurationManager.class.name)

manager.addLdapServerConfiguration(
new LdapConfiguration(
name: ldap.name,
connection: new Connection(
host: new Connection.Host(Connection.Protocol.ldap, ldap.host, ldap.port),
maxIncidentsCount: 3,
connectionRetryDelay: 300,
connectionTimeout: 15,
searchBase: 'dc=example,dc=com',
authScheme: 'simple',
systemPassword: 'systemPassword',
systemUsername: 'systemUsername'
),
mapping: new Mapping(
ldapGroupsAsRoles: true,
emailAddressAttribute: 'mail',
userIdAttribute: 'sAMAccountName',
userMemberOfAttribute: 'memberOf',
userObjectClass: 'user',
userPasswordAttribute: 'userPassword',
userRealNameAttribute: 'cn',
userBaseDn: '(memberof:1.2.840.113556.1.4.1941:=cn=Devs,ou=someOU,ou=anotherOU,dc=example,dc=com'
)
)
)


When i use the provision.sh script provided in the complex-script examples I get:

"name" : "ldapConfig",
"result" : "org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:\n
Script8.groovy: 10: unable to resolve class ldapConfiguration \n
@ line 10, column 3.\n new ldapConfiguration(\n^\n\n1 error\n"


It really bothers me it can't resolve the class...
Now, I'm not sure how to provide the JSON object for args. I've instead tried to put a JSON block directly into JsonSlurper().parseText() like this:

ldap = new JsonSlurper().parseText('{"host: localhost", "port: 389"}')


This produces same error as above.

Here is a snippet from the provision.sh is where invoke the addUpdateScript.groovy script.

#!/bin/bash

# A simple example script that publishes a number of scripts to the Nexus Repository Manager
# and executes them.

# fail if anything errors
set -e
# fail if a function call is missing an argument
set -u

username=admin
password=admin123

# add the context if you are not using the root context
host=http://localhost:8081

# add a script to the repository manager and run it
function addAndRunScript {
name=$1
file=$2
# using grape config that points to local Maven repo and Central Repository , default grape config fails on some downloads although artifacts are in Central
# change the grapeConfig file to point to your repository manager, if you are already running one in your organization
groovy -Dgroovy.grape.report.downloads=true -Dgrape.config=grapeConfig.xml addUpdatescript.groovy -u "$username" -p "$password" -n "$name" -f "$file" -h "$host"
printf "\nPublished $file as $name\n\n"
curl -v -X POST -u $username:$password --header "Content-Type: text/plain" "$host/service/siesta/rest/v1/script/$name/run"
curl -v -X GET -u $username:$password "$host/service/siesta/rest/v1/script/$name"
printf "\nSuccessfully executed $name script\n\n\n"
}

printf "Provisioning Integration API Scripts Starting \n\n"
printf "Publishing and executing on $host\n"

addAndRunScript ldapConfig ldapConfig.groovy


Am I using the wrong class name? LdapConfiguration. When I loaded this into IntelliJ I found ldapConfig but it didn't work either. Not sure how to dig into the javadoc to get more details out of the libraries.

Answer

I believe you have

new ldapConfiguration(

Where you need to have

new LdapConfiguration(

On line 10 of your script