summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRadek Novacek <rnovacek@redhat.com>2012-08-01 13:48:26 +0200
committerRadek Novacek <rnovacek@redhat.com>2012-08-02 10:30:49 +0200
commitf21cc8472b172f2fb629df774d4190bb69da940d (patch)
tree54f81e61c559e9c0fe63842f719e0feb3dc2126d
parent1fcc5cf2b149b2efb8a6f2320f8779d41309c1c8 (diff)
downloadopenlmi-providers-f21cc8472b172f2fb629df774d4190bb69da940d.tar.gz
openlmi-providers-f21cc8472b172f2fb629df774d4190bb69da940d.tar.xz
openlmi-providers-f21cc8472b172f2fb629df774d4190bb69da940d.zip
Add script for registration and deregitration of provider
-rw-r--r--CMakeLists.txt2
-rw-r--r--cmake/modules/CuraMacros.cmake2
-rwxr-xr-xregister.sh88
-rw-r--r--registration2pegasus.py62
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)