This section provides the information required to develop apps on an OpenDaylight controller. Apps can be developed either within the controller using a Model-Driven SAL (MD-SAL) archetype or via an external app using the RESTCONF API to communicate with the controller.
This section starts app development within an OpenDaylight controller.
Perform the following steps to develop an app:
The following are the prerequisites for app creation:
cp -n ~/.m2/settings.xml,.orig> wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml
For Linux or Mac OS X development operating systems, the default local repository is ~/.m2/repository. For other platforms, the default local repository location varies.
Perform the following steps to develop an app:
OpenDaylight Simultaneous Release | opendaylight-startup-archetype version |
Magnesium Development | 1.3.0-SNAPSHOT |
Aluminium Development | 1.4.0-SNAPSHOT |
Define value for property 'groupId': org.opendaylight.example Define value for property 'artifactId': example [INFO] Using property: version = 0.1.0-SNAPSHOT Define value for property 'package' org.opendaylight.example: : Define value for property 'classPrefix' Example: : Define value for property 'copyright': Copyright (c) 2021 Yoyodyne, Inc. [INFO] Using property: copyrightYear = 2021
Note This will create a directory with the name given to artifactId in the above dialog, with the following contents.
.gitreview api/ artifacts/ cli/ features/ impl/ it/ karaf/ pom.xml src/
Note Build time varies depending on the development machine specification. Ensure that you are in the project’s root directory (example/,) and then issue the the following build command.
mvn clean install
cd karaf/target/assembly/bin ls ./karaf
opendaylight-user@root>
log:display | grep Example
shutdown -f
impl/src/main/java/org/opendaylight/hello/impl/HelloProvider.java
/** * Method called when the blueprint container is created. */ public void init() LOG.info("HelloProvider Session Initiated"); >
cd api/src/main/yang/
module hello yang-version 1.1; namespace "urn:opendaylight:params:xml:ns:yang:hello"; prefix "hello"; revision "2021-03-21" description "Initial revision of hello model"; > rpc hello-world input leaf name type string; > > output leaf greeting type string; > > > >
cd ../../../ mvn clean install
cd ../impl/src/main/java/org/opendaylight/hello/impl/
The HelloProvider.java file is in the current directory. Register the RPC that you created in the hello.yang file in the HelloProvider.java file. You can either edit the HelloProvider.java to match what is below or simply replace it with the code below.
/* * Copyright © 2021 Copyright (c) 2021 Yoyodyne, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.hello.impl; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev210321.HelloService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev210321.HelloWorldInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev210321.HelloWorldOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev210321.HelloWorldOutputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloProvider implements HelloService private static final Logger LOG = LoggerFactory.getLogger(HelloProvider.class); private final DataBroker dataBroker; public HelloProvider(final DataBroker dataBroker) this.dataBroker = dataBroker; > @Override public ListenableFutureRpcResultHelloWorldOutput>> helloWorld(HelloWorldInput input) HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder(); helloBuilder.setGreeting("Hello " + input.getName()); return RpcResultBuilder.success(helloBuilder.build()).buildFuture(); > /** * Method called when the blueprint container is created. */ public void init() LOG.info("HelloProvider Session Initiated"); > /** * Method called when the blueprint container is destroyed. */ public void close() LOG.info("HelloProvider Closed"); > >
cd ../../../../../resources/OSGI-INF/blueprint/
You can either edit the impl-blueprint.xml to match what is below or simply replace it with the XML below.
Copyright © 2021 Copyright (c) 2021 Yoyodyne, Inc. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html --> xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true"> id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker" odl:type="default" /> id="provider" class="org.opendaylight.hello.impl.HelloProvider" init-method="init" destroy-method="close"> ref="dataBroker" /> ref="provider"/>
cd ../../../../../ mvn clean install