The Open Device Manager implements the device management interface based on RFC-8348 from IETF and WT-383 from BBF, to communicate to the Operator NEM components and translates the commands to the device native interface.

Clone this repo:

Branches

  1. 32d40f2 Commit VOL-4124. Testcases for device package. by Prince Pereira · 3 years, 6 months ago master
  2. c1c21d6 VOL-4019: Initial commit with grpc nbi, sbi, etcd, kafka and hw management rpcs. by Prince Pereira · 3 years, 7 months ago
  3. b94c6f6 Initial empty repository by Zack Williams · 3 years, 7 months ago

Opendevice Manager

The Opendevice Manager runs as a microservice docker container and implements the below functionalities:

  • Implementation of the gRPC Server on ONF/SEBA community defined DMI towards Operator NEM components
  • Implementation of the gRPC Client on ONF/SEBA community defined DMI towards Device
  • Implementation of the Device Context Management (Configuration, UUID, Inventory, States)
  • Consume the Events, Metrics from Device on GRPC Streams and publish on Kafka towards NEM components

Development make targets

The Makefile contains many commands that are useful in development:

build                     : Alias for 'docker build'
clean                     : Removes any local filesystem artifacts generated by a build
distclean                 : Removes any local filesystem artifacts generated by a build or test run
docker-build-profile      : Build opendevice manager docker image with profiling enabled
docker-build              : Build opendevice manager docker image
docker-kind-load          : Load docker images into a KinD cluster
docker-push               : Push the docker images to an external repository
help                      : Print help for each Makefile target
lint-dockerfile           : Perform static analysis on Dockerfile
lint-mod                  : Verify the Go dependencies
lint                      : Run all lint targets
local-lib-go              : Copies a local version of the voltha-lib-go dependency into the vendor directory
local-protos              : Copies a local version of the dmi-protos dependency into the vendor directory
mod-update                : Update go mod files
sca                       : Runs static code analysis with the golangci-lint tool
test                      : Run unit tests

Some highlights:

  • It's recommended that you run the lint, sca, and test targets before submitting code changes.

  • The docker-* targets for building and pushing Docker images depend on the variables DOCKER_REGISTRY, DOCKER_REPOSITORY, and DOCKER_TAG as described in the CORD documentation

  • If you make changes the dependencies in the go.mod file, you will need to run make mod-update to update the go.sum and vendor directory.

Building with a Local Copy of dmi-protos or voltha-lib-go

If you want to build/test using a local copy of the dmi-protos or voltha-lib-go libraries this can be accomplished by using the environment variables LOCAL_PROTOS and LOCAL_LIB_GO. These environment variables should be set to the filesystem path where the local source is located, e.g.:

export LOCAL_PROTOS=/path/to/device-management-interface
export LOCAL_LIB_GO=/path/to/voltha-lib-go

Then run make local-protos and/or make local-lib-go as is appropriate to copy them into the vendor directory.

NOTE: That the files in the vendor directory are no longer what is in the most recent commit, and it will take manual git intervention to put the original files back.