diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | cmake/modules/CuraMacros.cmake | 2 | ||||
-rwxr-xr-x | register.sh | 88 | ||||
-rw-r--r-- | registration2pegasus.py | 62 |
4 files changed, 152 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1020897..7ff9c2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,4 +30,4 @@ find_package(KonkretCMPI REQUIRED) add_subdirectory(src) add_subdirectory(mof) -install(FILES provider-register.sh DESTINATION share/cura-providers/) +install(PROGRAMS register.sh registration2pegasus.py DESTINATION share/cura-providers/) diff --git a/cmake/modules/CuraMacros.cmake b/cmake/modules/CuraMacros.cmake index 0b750f7..aed9b54 100644 --- a/cmake/modules/CuraMacros.cmake +++ b/cmake/modules/CuraMacros.cmake @@ -99,5 +99,5 @@ macro(cim_registration PROVIDER_NAME LIBRARY_NAME MOF) PATHS ${CMAKE_SOURCE_DIR}/mof/ ) add_custom_target(register-${PROVIDER_NAME} - ${CMAKE_SOURCE_DIR}/provider-register.sh -m ${MOF_FILE} -r ${CMAKE_CURRENT_BINARY_DIR}/${PROVIDER_NAME}.registration) + ${CMAKE_SOURCE_DIR}/register.sh ${MOF_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${PROVIDER_NAME}.registration) endmacro(cim_registration) diff --git a/register.sh b/register.sh new file mode 100755 index 0000000..cef7f59 --- /dev/null +++ b/register.sh @@ -0,0 +1,88 @@ +#!/bin/sh + +pegasus_repository="/var/lib/Pegasus/repository" + +function usage() +{ + printf "Usage: $0 [ register | unregister ] mof registration\n" +} + +function register() +{ + mof=$1 + registration=$2 + if [ $HAS_SFCBD -eq 1 ]; + then + /usr/bin/sfcbstage -r $registration $mof + /usr/bin/sfcbrepos -f + /usr/bin/systemctl reload-or-try-restart sblim-sfcb.service + fi + + if [ $HAS_PEGASUS -eq 1 ]; + then + /usr/sbin/cimserver --status > /dev/null 2>&1 + if [ $? -eq 0 ]; + then + CIMMOF="/usr/bin/cimmof" + else + CIMMOF="/usr/bin/commofl -R $pegasus_repository" + fi + + $CIMMOF -uc $mof + cat $registration | /usr/bin/python2 $(dirname $0)/registration2pegasus.py | $CIMMOF -uc -n root/PG_Interop - + fi +} + +function unregister() +{ + mof=$1 + registration=$2 + if [ $HAS_SFCBD -eq 1 ]; + then + /usr/bin/sfcbunstage -r $(basename $registration) $(basename $mof) + /usr/bin/sfcbrepos -f + /usr/bin/systemctl reload-or-try-restart sblim-sfcb.service + fi + + if [ $HAS_PEGASUS -eq 1 ]; + then + for module in $(cut -d' ' -f 4 $registration | sort | uniq); + do + /usr/bin/cimprovider -d -m ${module}Module && /usr/bin/cimprovider -r -m ${module}Module + done + fi +} + +if [ $# -lt 3 ]; +then + usage + exit 1 +fi + +if [ -e /usr/sbin/sfcbd ]; +then + HAS_SFCBD=1 +else + HAS_SFCBD=0 +fi + +if [ -e /usr/sbin/cimserver ]; +then + HAS_PEGASUS=1 +else + HAS_PEGASUS=0 +fi + +# TODO: check if at least one server is installed + +case $1 in + register) + register $2 $3 + break;; + unregister) + unregister $2 $3 + break;; + **) + usage + exit 1 +esac diff --git a/registration2pegasus.py b/registration2pegasus.py new file mode 100644 index 0000000..62947c7 --- /dev/null +++ b/registration2pegasus.py @@ -0,0 +1,62 @@ +#!/usr/bin/python + +import sys + +Types = { + 'instance': '2', + 'association': '3', + 'indication': '4', + 'method': '5', + 'consumer': '6', + 'instanceQuery': '7' +} + +def define_module(provider): + return """instance of PG_ProviderModule +{ + Name = "%(provider)sModule"; + Location = "%(provider)s"; + Vendor = "RedHat"; + Version = "0.0.1"; + InterfaceType = "CMPI"; + InterfaceVersion = "2.0.0"; + ModuleGroupName = "cura-providers"; +}; +""" % { 'provider': provider } + +def getTypes(types): + l = [] + for key, value in Types.items(): + if key in types: + l.append(value) + return ",".join(l) + +def define_capability(provider, name, cls, types): + return """instance of PG_Provider +{ + Name = "%(name)s"; + ProviderModuleName = "%(provider)sModule"; +}; + +instance of PG_ProviderCapabilities +{ + ProviderModuleName = "%(provider)sModule"; + ProviderName = "%(name)s"; + CapabilityID = "%(class)s"; + ClassName = "%(class)s"; + Namespaces = { "root/cimv2" }; + ProviderType = { %(types)s }; + SupportedProperties = NULL; + SupportedMethods = NULL; +}; +""" % { 'provider': provider, 'name': name, 'class': cls, 'types': getTypes(types) } + +modules_defined = {} +for line in sys.stdin: + cls, namespace, name, provider, types = line.strip().split(" ", 4) + + if provider not in modules_defined: + print define_module(provider) + modules_defined[provider] = True + + print define_capability(provider, name, cls, types) |