python/pyosaf/utils/immom/__init__.py | 4 ++
python/samples/immadm | 54 +++++++++++-----------------------
python/samples/immlist | 47 +++++++++++------------------
3 files changed, 39 insertions(+), 66 deletions(-)
Update the python sample applications to use immom utils instead of the direct
IMM OM bindings.
Also fix immom.get() because the updates uncovered a fault when it's used to
request only specific attributes. If the attributes requested don't include
SaImmAttrClassName the function will fail since it's used to determine the
class of the object.
diff --git a/python/pyosaf/utils/immom/__init__.py
b/python/pyosaf/utils/immom/__init__.py
--- a/python/pyosaf/utils/immom/__init__.py
+++ b/python/pyosaf/utils/immom/__init__.py
@@ -83,6 +83,10 @@ def _initialize():
def get(object_name, attr_name_list=None):
''' obtain values of some attributes of the specified object '''
+ # Always request the SaImmAttrClassName attribute
+ if attr_name_list and not 'SaImmAttrClassName' in attr_name_list:
+ attr_name_list.append('SaImmAttrClassName')
+
attrib_names = [SaImmAttrNameT(a) for a in attr_name_list]\
if attr_name_list else None
diff --git a/python/samples/immadm b/python/samples/immadm
--- a/python/samples/immadm
+++ b/python/samples/immadm
@@ -18,10 +18,10 @@
from optparse import OptionParser
from pyosaf import saImm
-from pyosaf.saImmOm import *
+from pyosaf.utils import immom
from socket import gethostname
from os import getpid
-from immbase import *
+from pyosaf.saAis import eSaAisErrorT, SaAisErrorT
import json
import sys
@@ -46,66 +46,46 @@ def parseArgs(cmd=sys.argv[1:]):
help='turn off pretty printing.',
action='store_true', default=False)
(options, args) = parser.parse_args(cmd)
+
if len(args) < 2:
parser.print_help()
sys.exit()
+
return options, args
def immadm(options, args):
+
if len(args) < 2:
raise SafException(eSaAisErrorT.SA_AIS_ERR_INIT)
- opId = SaImmAdminOperationIdT(int(args[0]))
- dn = SaNameT(args[1])
- retVal = SaAisErrorT(eSaAisErrorT.SA_AIS_ERR_NOT_EXIST)
+
+ op_id = int(args[0])
+ dn = args[1]
+ retVal = SaAisErrorT(eSaAisErrorT.SA_AIS_OK)
try:
- immHandle = SaImmHandleT()
- rc = saImmOmInitialize(immHandle, None, IMM_VERSION)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
-
- ownerName = SaImmAdminOwnerNameT(options.adminOwner)
- ownerHandle = SaImmAdminOwnerHandleT()
- rc = saImmOmAdminOwnerInitialize(immHandle,
- ownerName, eSaBoolT.SA_TRUE, ownerHandle)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
-
- rc = saImmOmAdminOwnerSet(ownerHandle,
- [dn], saImm.eSaImmScopeT.SA_IMM_ONE)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
-
params = []
for p in options.params:
(name, type, val) = p.split(':', 2)
ptype = eSaImmValueTypeT.lookup[type]
params.append(
SaImmAdminOperationParamsT_2(name, ptype, val))
- contId = SaImmContinuationIdT()
- rc = saImmOmAdminOperationInvoke_2(ownerHandle,
- dn, contId, opId, params, retVal,
- saAis.SA_TIME_ONE_SECOND*5)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
+
+ immom.admin_op_invoke(dn, op_id, params=params)
+
except SafException, e:
if e.value != eSaAisErrorT.SA_AIS_ERR_NOT_EXIST:
raise e
- finally:
- saImmOmAdminOwnerRelease(ownerHandle,
- [dn], saImm.eSaImmScopeT.SA_IMM_ONE)
- saImmOmAdminOwnerFinalize(ownerHandle)
- saImmOmFinalize(immHandle)
- return {'opId': opId.value,
- 'dname': args[1],
- 'owner': options.adminOwner,
+ return {'opId': op_id,
+ 'dname': args[1],
+ 'owner': options.adminOwner,
'params': options.params,
- 'rc': eSaAisErrorT.whatis(retVal.value)}
+ 'rc': eSaAisErrorT.whatis(retVal.value)}
if __name__ == '__main__':
(options, args) = parseArgs()
result = immadm(options, args)
logger = SafLogger(result['owner'])
logger.log('ADMIN_CMD: OP_ID %(opId)s %(dname)s: %(rc)s' % result)
+
print json.dumps(result, indent=None if options.ugly else 4)
diff --git a/python/samples/immlist b/python/samples/immlist
--- a/python/samples/immlist
+++ b/python/samples/immlist
@@ -16,8 +16,9 @@
#
############################################################################
+from pyosaf import saImm
+from pyosaf.utils import immom
from optparse import OptionParser
-from immbase import *
import json
import sys
@@ -42,36 +43,24 @@ class ListOptions(object):
self.ugly = False
def immlist(options, args):
- try:
- immHandle = SaImmHandleT()
- rc = saImmOmInitialize(immHandle, None, IMM_VERSION)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
+ objects = {}
- accessorHandle = SaImmAccessorHandleT()
- rc = saImmOmAccessorInitialize(immHandle, accessorHandle)
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
+ for dn in args:
+ obj = immom.get(dn, attr_name_list=options.attr)
- objects = {}
- attribNames = [SaImmAttrNameT(a) for a in options.attr]\
- if options.attr else None
- attribs = pointer(pointer(SaImmAttrValuesT_2()))
- for dn in args:
- rc = saImmOmAccessorGet_2(accessorHandle,
- SaNameT(dn), attribNames, attribs)
- if rc == eSaAisErrorT.SA_AIS_ERR_NOT_EXIST:
- continue;
- if rc != eSaAisErrorT.SA_AIS_OK:
- raise SafException(rc)
- objects[dn] = SafObject(dn, attribs, options.numeric)
- finally:
- saImmOmAccessorFinalize(accessorHandle)
- saImmOmFinalize(immHandle)
- return objects
+ if obj:
+ attributes = {}
+ for name, value_pair in obj.attrs.iteritems():
+ type_str =
saImm.eSaImmValueTypeT.whatis(value_pair[0])
+ value = value_pair[1]
+
+ attributes[name] = [type_str, value]
+
+ objects[dn] = attributes
+
+ return objects
if __name__ == '__main__':
(options, args) = parseArgs()
- print json.dumps(immlist(options, args),
- default=SafObject.serialize,
- indent=None if options.ugly else 4)
+ print json.dumps(immlist(options, args),
+ indent=None if options.ugly else 4)
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel