Idea ID: 1659759

Request for discovery Hitachi VSP-G200 storage by CIM Protocol

Status : Waiting for Votes
over 2 years ago

We need to discover Hitachi VSP-G200 storage by CIM Protocol, but current discovery (Storage Devices Connection by CIM and Storage Devices Topology by CIM) doesn't support this storage. The discovery supports hitachi arrays, but only arrays with "root/smis/current" namespace . For new Hitachi storages namespace is "root/hitachi/smis".

I'm not first one who needs this feature -

https://community.softwaregrp.com/t5/CMS-UCMDB-and-UD-User/Discovery-of-Hitachi-storage-array/td-p/1626960

https://community.softwaregrp.com/t5/CMS-UCMDB-and-UD-User/Hitatchi-storage-discovery/td-p/231773

 

Ps.

I've already done my own research for this case and I can say that current discovery works fine for Hitachi VSP-G200 with a little bit improvements:

1. add new namespace to cimCategories.xml

            <namespace>
                <name>root/hitachi/smis</name>
                <class>
                    <name>HITACHI_StorageSystem</name>
                    <min-count>1</min-count>
                </class>
            </namespace>

2. change smis_topology.py (I've attached this file)

HITACHINAMESPACENEW = 'root/hitachi/smis'
NAMESPACE2VENDORMAP = {
    DEFAULTNAMESPACE:   'cimv2',
    L3PARNAMESPACE:     'tpd',
    EVANAMESPACE:       'eva',
    LISTARRAY13:        'netapp',
    EMCNAMESPACE:       'emc',
    BROCADENAMESPACE:   'brocade',
    HUAWEINAMESPACE:    'huawei',
    HITACHINAMESPACE:   'hitachi',
    HITACHINAMESPACENEW:'hitachi2',
    IBMNAMESPACE:       'ibm'
}
    def bindNamespace(self, ns):
        vendor = NAMESPACE2VENDORMAP.get(ns)
        if vendor == 'hitachi2':
            vendor = 'hitachi' 
        script =  'smis_'+vendor
        className = 'Namespace'
        logger.debug("Namespace vendor name %s" % vendor)
        module = __import__(script)
        if hasattr(module, className):
            nampespaceClass = getattr(module, className)
            self.namespace = nampespaceClass()
            logger.debug("Imported the module %s" % script)
            logger.debug("Got the namespace %s" % self.namespace)
        else:
            logger.debug("Failed to import the module %s" % script)

I hope it will be useful for RnD. If RnD needs communication log please contact with me by email.