summaryrefslogtreecommitdiffstats
path: root/reg2pegasus.py
blob: c9e6b32bc2e92c0f09b02ce3a59ceb2bd13a45bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/python

import sys
import re

reg_parse = re.compile(r"\[([^\]]+)\]\s+"
"provider: ([^\s]+)\s+"
"location: (\w+)\s+"
"type: ([^\n]+)\s+"
"namespace: ([^\n]+)")

Types = {
    'instance': '2',
    'association': '3',
    'indication': '4',
    'method': '5',
    'consumer': '6',
    'instanceQuery': '7'
}

def define_module(location):
    return """instance of PG_ProviderModule
{
    Name = "%(location)s";
    Location = "%(location)s";
    Vendor = "RedHat";
    Version = "0.0.1";
    InterfaceType = "CMPI";
    InterfaceVersion = "2.0.0";
    ModuleGroupName = "lmi-providers";
};
""" % { 'location': location }

def getTypes(types):
    l = []
    for key, value in Types.items():
        if key in types:
            l.append(value)
    return ",".join(l)

def define_capability(location, provider, cls, types):
    return """instance of PG_Provider
{
    Name = "%(provider)s";
    ProviderModuleName = "%(location)s";
};

instance of PG_ProviderCapabilities
{
   ProviderModuleName = "%(location)s";
   ProviderName = "%(provider)s";
   CapabilityID = "%(class)s";
   ClassName = "%(class)s";
   Namespaces = { "root/cimv2" };
   ProviderType = { %(types)s };
   SupportedProperties = NULL;
   SupportedMethods = NULL;
};
""" % { 'location': location, 'provider': provider, 'class': cls, 'types': getTypes(types) }

modules_defined = {}
for record in reg_parse.findall(sys.stdin.read()):
    cls, provider, location, types, namespace = record

    if location not in modules_defined:
        print define_module(location)
        modules_defined[location] = True

    print define_capability(location, provider, cls, types)