In fact we found some issues for SDNC which are only fixable in the opendaylight artifacts, we have to provide some fixes for the ONAP SDNC distribution. The problem is that the in opendaylight used eclipse license is not okay for the ONAP project so that we have to publish and deploy the code somewhere else.
Hint: The goal always should be to bring the fix into the opendaylight project!
The artifacts we provide will be deployed to official maven central with our sonatype account.
Example
- opendaylight does not support initial configuration of the admin user, or at least setting the password for admin
- therefor we have to patch org.opendaylight.aaa:aaa-authn-api
org.opendaylight.aaa.api.StoreBuilder
public void initWithDefaultUsers(String domainID) throws IDMStoreException { String newDomainID = initDomainAndRolesWithoutUsers(domainID); if (newDomainID != null) { createUser(newDomainID, getPropertyOrDefault("${ODL_ADMIN_USERNAME}", "admin"), getPropertyOrDefault("${ODL_ADMIN_PASSWORD}", "admin"), true); } }
- now the default admin username and password can be set by environment variable on startup, e.g. controlled by kubernetes secrets or sth. similar
Steps
find correct artifact version
- in fact that ODL has some strange versioning behaviour the easiest way is to look into your distribution or in the base distribution of opendaylight and find your artifact in <odl-folder>/system/<the>/<odl>/<groupId>/<artifactId>
the code
- therefore you have to fork the responding odl subproject (we did it directly with github)
- go to your branch/tag of the version you found out before
- apply your fixes
- change for the specific artifact the groupId to yours
deploy your fix
apply you fix to the distribution
load additional artifacts with the pom file
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy-with-alternalte-repo</id> <phase>generate-sources</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>{your groupId}</groupId> <artifactId>{artifactId}</artifactId> <version>{your deployed version}</version> <outputDirectory>${project.build.directory}/docker-stage/system/org/opendaylight/{the}/{odl}/{groupId}/{artifactId}/{version}</outputDirectory> </artifactItem> </artifactItems> <localRepositoryDirectory>${project.build.directory}/docker-stage/system</localRepositoryDirectory> </configuration> </execution> </executions> </plugin>
- overwrite the artifact within the Dockerfile
# Patch xxx COPY --chown=odl:odl system/org/opendaylight/{the}/{odl}/{groupId}/{artifactId} $ODL_HOME/system/org/opendaylight/{the}/{odl}/{groupId}/{artifactId}/