3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
18 from ConfigParser import SafeConfigParser
20 from cmframework.apis import cmerror
21 from cmframework.utils import cmlogger
24 class CMArgsParser(object):
25 def __init__(self, prog):
30 self.log_level = cmlogger.CMLogger.str_to_level('debug')
31 self.log_dest = cmlogger.CMLogger.str_to_dest('syslog')
32 self.disable_remote_activation = False
35 self.activators = None
36 self.validators = None
38 self.backend_uri = None
39 self.backend_api = None
41 self.inventory_handlers = None
42 self.inventory_data = None
43 self.install_phase = False
44 self.activationstate_handler_uri = None
45 self.activationstate_handler_api = None
46 self.activator_workers = 1
47 self.snapshot_handler_uri = None
48 self.snapshot_handler_api = None
49 self.alarmhandler_api = None
51 def parse(self, args):
52 argparse.ArgumentParser(description='Configuration Management Server',
56 self.parse_config(args)
58 self.parse_cmd_line(args)
60 def parse_config(self, args):
61 parser = argparse.ArgumentParser(description='Configuration Management Server',
64 parser.add_argument('--file',
70 args = parser.parse_args(args)
71 self.filename = args.filename
72 except Exception as error:
73 raise cmerror.CMError(str(error))
75 self.parse_config_file()
77 def parse_config_file(self):
78 config = SafeConfigParser(
79 {'log_level': cmlogger.CMLogger.level_to_str(self.log_level),
80 'log_dest': cmlogger.CMLogger.dest_to_str(self.log_dest),
81 'verbose': repr(self.verbose),
82 'disable_remote_activation': repr(self.disable_remote_activation),
83 'activator_workers': '10',
84 'alarmhandler_api': 'cmframework.lib.cmalarmhandler_dummy.AlarmHandler_Dummy',
85 'snapshot_handler_api': ''})
87 config.read(self.filename)
88 self.ip = config.get('cmserver', 'ip')
89 self.port = config.getint('cmserver', 'port')
90 self.backend_api = config.get('cmserver', 'backend_api')
91 self.backend_uri = config.get('cmserver', 'backend_uri')
92 self.verbose = config.getboolean('cmserver', 'verbose')
93 self.log_level = cmlogger.CMLogger.str_to_level(config.get('cmserver', 'log_level'))
94 self.log_dest = cmlogger.CMLogger.str_to_dest(config.get('cmserver', 'log_dest'))
95 self.validators = CMArgsParser.dir_parser(config.get('cmserver', 'validators'))
96 self.activators = CMArgsParser.dir_parser(config.get('cmserver', 'activators'))
97 self.disable_remote_activation = \
98 config.getboolean('cmserver', 'disable_remote_activation')
99 if not self.disable_remote_activation:
100 self.rmq_ip = config.get('cmserver', 'rmq_ip')
101 self.rmq_port = config.getint('cmserver', 'rmq_port')
102 self.inventory_handlers = CMArgsParser.dir_parser(config.get('cmserver',
103 'inventory_handlers'))
104 self.inventory_data = config.get('cmserver', 'inventory_data')
105 self.install_phase = config.getboolean('cmserver', 'install_phase')
106 self.activationstate_handler_uri = config.get('cmserver', 'activationstate_handler_uri')
107 self.activationstate_handler_api = config.get('cmserver', 'activationstate_handler_api')
108 self.activator_workers = config.getint('cmserver', 'activator_workers')
109 self.snapshot_handler_uri = config.get('cmserver', 'snapshot_handler_uri')
110 self.snapshot_handler_api = config.get('cmserver', 'snapshot_handler_api')
111 self.alarmhandler_api = config.get('cmserver', 'alarmhandler_api')
112 except Exception as error:
113 raise cmerror.CMError(str(error))
115 def parse_cmd_line(self, args):
116 parser = argparse.ArgumentParser(description='Configuration Management Server',
119 parser.add_argument('--ip',
121 help='The IP address to listen to',
125 parser.add_argument('--port',
127 help='The port number used for listening',
131 parser.add_argument('--backend-api',
133 metavar='BACKEND-API',
135 help='The module.class implementing the backend api',
139 parser.add_argument('--backend-uri',
141 metavar='BACKEND-URI',
143 help='The uri needed by the backend api',
144 type=str, action='store')
146 parser.add_argument('--log-level',
150 help=('The enabled logging level, possible values are '
151 '{debug, info, warn, error}'),
152 type=CMArgsParser.log_level_parser,
153 default=self.log_level,
156 parser.add_argument('--log-dest',
160 help='The logs destination, possible values are {console, syslog}',
161 type=CMArgsParser.log_dest_parser,
162 default=self.log_dest,
165 parser.add_argument('--verbose',
168 default=self.verbose,
169 help='Enable verbose mode',
172 parser.add_argument('--validators',
174 metavar='VALIDATORS-PATH',
176 help='The full path were validatation plugin(s) are located',
177 type=CMArgsParser.dir_parser,
180 parser.add_argument('--activators',
182 metavar='ACTIVATORS-PATH',
184 help='The full path were activation plugin(s) are located',
185 type=CMArgsParser.dir_parser,
188 parser.add_argument('--disable-remote-activation',
189 dest='disable_remote_activation',
191 default=self.disable_remote_activation,
192 help='Enable running activators in the target nodes',
195 parser.add_argument('--rmq-ip',
199 help='RMQ broker IP address',
203 parser.add_argument('--rmq-port',
207 help='RMQ broker port number',
211 parser.add_argument('--inventory-handlers',
212 dest='inventory_handlers',
213 metavar='INVENTORY-HANDLERS-PATH',
215 help='The full path were inventory handlers are located',
216 type=CMArgsParser.dir_parser,
219 parser.add_argument('--inventory-data',
220 dest='inventory_data',
221 metavar='INVENTORY-DATA',
223 help='The full path for the inventory data file',
227 parser.add_argument('--install-phase',
228 dest='install_phase',
231 help='Indicate install phase startup',
234 parser.add_argument('--activationstate-handler-api',
235 dest='activationstate_handler_api',
236 metavar='ACTIVATIONSTATE-HANDLER-API',
238 help='The module.class implementing the activationstate handler api',
242 parser.add_argument('--activationstate-handler-uri',
243 dest='activationstate_handler_uri',
244 metavar='ACTIVATIONSTATE-HANDLER-URI',
246 help='The uri needed by the activationstate handler uri',
247 type=str, action='store')
249 parser.add_argument('--activator-workers',
250 dest='activator_workers',
251 metavar='ACTIVATOR_WORKERS',
254 help='Number of activator workers',
258 parser.add_argument('--snapshot-handler-api',
259 dest='snapshot_handler_api',
260 metavar='SNAPSHOT-HANDLER-API',
262 help='The module.class implementing the snapshot handler api',
266 parser.add_argument('--snapshot-handler-uri',
267 dest='snapshot_handler_uri',
268 metavar='SNAPSHOT-HANDLER-URI',
271 help='The uri needed by the snapshot handler uri',
272 type=str, action='store')
274 parser.add_argument('--alarmhandler-api',
275 dest='alarmhandler_api',
276 metavar='ALARMHANDLER-API',
278 help='The module.class implementing the alarmhandler api',
283 args = parser.parse_args(args)
285 self.port = args.port
286 self.backend_api = args.backend_api
287 self.backend_uri = args.backend_uri
288 self.verbose = args.verbose
289 self.log_level = args.log_level
290 self.log_dest = args.log_dest
291 self.validators = args.validators
292 self.activators = args.activators
293 self.disable_remote_activation = args.disable_remote_activation
294 if not self.disable_remote_activation:
295 self.rmq_ip = args.rmq_ip
296 self.rmq_port = args.rmq_port
297 self.inventory_handlers = args.inventory_handlers
298 self.inventory_data = args.inventory_data
299 self.install_phase = args.install_phase
300 self.activationstate_handler_api = args.activationstate_handler_api
301 self.activationstate_handler_uri = args.activationstate_handler_uri
302 self.activator_workers = args.activator_workers
303 self.snapshot_handler_api = args.snapshot_handler_api
304 self.snapshot_handler_uri = args.snapshot_handler_uri
305 self.alarmhandler_api = args.alarmhandler_api
306 except Exception as error:
307 raise cmerror.CMError(str(error))
310 def log_level_parser(level):
312 return cmlogger.CMLogger.str_to_level(level)
313 except cmerror.CMError as exp:
314 raise argparse.ArgumentTypeError(str(exp))
317 def log_dest_parser(dest):
319 return cmlogger.CMLogger.str_to_dest(dest)
320 except cmerror.CMError as exp:
321 raise argparse.ArgumentTypeError(str(exp))
324 def dir_parser(path):
325 if os.path.isdir(path):
327 raise argparse.ArgumentTypeError('Not a directory')
335 def get_backend_api(self):
336 return self.backend_api
338 def get_backend_uri(self):
339 return self.backend_uri
341 def get_log_level(self):
342 return self.log_level
344 def get_log_dest(self):
347 def get_verbose(self):
350 def get_validators(self):
351 return self.validators
353 def get_activators(self):
354 return self.activators
356 def get_disable_remote_activation(self):
357 return self.disable_remote_activation
359 def get_rmq_ip(self):
362 def get_rmq_port(self):
365 def get_inventory_handlers(self):
366 return self.inventory_handlers
368 def get_inventory_data(self):
369 return self.inventory_data
371 def is_install_phase(self):
372 return self.install_phase
374 def get_activationstate_handler_api(self):
375 return self.activationstate_handler_api
377 def get_activationstate_handler_uri(self):
378 return self.activationstate_handler_uri
380 def get_activator_workers(self):
381 return self.activator_workers
383 def get_snapshot_handler_api(self):
384 return self.snapshot_handler_api
386 def get_snapshot_handler_uri(self):
387 return self.snapshot_handler_uri
389 def get_alarmhandler_api(self):
390 return self.alarmhandler_api
394 cm_parser = CMArgsParser('cmserver')
396 cm_parser.parse(sys.argv[1:])
397 print 'ip = %s' % cm_parser.get_ip()
398 print 'port = %d' % cm_parser.get_port()
399 print 'backend-api = %s' % cm_parser.get_backend_api()
400 print 'backend-uri = %s' % cm_parser.get_backend_uri()
401 print 'log-level = %s' % cmlogger.CMLogger.level_to_str(cm_parser.get_log_level())
402 print 'log-dest = %s' % cmlogger.CMLogger.dest_to_str(cm_parser.get_log_dest())
403 print 'verbose = %s' % repr(cm_parser.get_verbose())
404 print 'validators = %s' % repr(cm_parser.get_validators())
405 print 'activators = %s' % repr(cm_parser.get_activators())
406 print 'rmq-ip = %s' % repr(cm_parser.get_rmq_ip())
407 print 'rmq-port = %s' % repr(cm_parser.get_rmq_port())
408 print 'inventory-handlers = %s' % repr(cm_parser.get_inventory_handlers())
409 print 'inventory-data = %s' % repr(cm_parser.get_inventory_data())
410 print 'install-phase = %s' % repr(cm_parser.is_install_phase())
411 print 'activationstate-handler-api = %s' % repr(cm_parser.get_activationstate_handler_api())
412 print 'activationstate-handler-uri = %s' % repr(cm_parser.get_activationstate_handler_uri())
413 print 'activator-workers = %s' % repr(cm_parser.get_activator_workers())
414 print 'snapshot-handler-api = %s' % repr(cm_parser.get_snapshot_handler_api())
415 print 'snapshot-handler-uri = %s' % repr(cm_parser.get_snapshot_handler_uri())
416 print 'alarmhandler-api = %s' % cm_parser.get_alarmhandler_api()
417 except cmerror.CMError as error:
418 print 'Got error %s' % str(error)
422 if __name__ == '__main__':