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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/python2
#
# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Authors: Radek Novacek <rnovacek@redhat.com>
# Jan Safranek <jsafrane@redhat.com>
#
import sys
import re
import argparse
reg_parse = re.compile(r"\[([^\]]+)\]\s+"
"provider: ([^\s]+)\s+"
"location: (\w+)\s+"
"type: ([^\n]+)\s+"
"namespace: ([^\n]+)\s+"
"(group: ([^\n]+)|)") # the group is optional
Types = {
'instance': '2',
'association': '3',
'indication': '4',
'method': '5',
'consumer': '6',
'instanceQuery': '7'
}
def define_module(location, group, version):
return """instance of PG_ProviderModule
{
Name = "%(group)s";
Location = "%(location)s";
Vendor = "OpenLMI";
Version = "%(version)s";
InterfaceType = "CMPI";
InterfaceVersion = "2.0.0";
ModuleGroupName = "%(group)s";
};
""" % { 'location': location, 'group': group, 'version': version }
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, group):
return """instance of PG_Provider
{
Name = "%(provider)s";
ProviderModuleName = "%(group)s";
};
instance of PG_ProviderCapabilities
{
ProviderModuleName = "%(group)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), 'group': group }
parser = argparse.ArgumentParser(description='Create MOF files with registration of providers for Pegasus CIMOM.')
parser.add_argument('-v', '--version', action='store', required=True, help="Version of the provider API.")
args = parser.parse_args()
version = args.version
modules_defined = {}
for record in reg_parse.findall(sys.stdin.read()):
cls, provider, location, types, namespace, _unused, group = record
if not group:
group = location
if group not in modules_defined:
print define_module(location, group, version)
modules_defined[group] = True
print define_capability(location, provider, cls, types, group)
|