def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in ["add", "edit", "copy", "rename", "find", "remove"]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in ["list"]: pass elif object_action not in ("reload", "update"): self.parser.add_option("--name", dest="name", help="name of object") elif object_action == "reload": self.parser.add_option("--filename", dest="filename", help="filename to load data from") (options, args) = self.parser.parse_args() # the first three don't require a name if object_action == "report": if options.name is not None: report_item(self.remote, object_type, None, options.name) else: report_items(self.remote, object_type) elif object_action == "list": list_items(self.remote, object_type) elif object_action == "find": items = self.remote.find_items(object_type, utils.strip_none(vars(options), omit_none=True), "name", False) for item in items: print item elif object_action in OBJECT_ACTIONS: if opt(options, "name") == "" and object_action not in ("reload", "update"): print "--name is required" sys.exit(1) if object_action in ["add", "edit", "copy", "rename", "remove"]: try: if object_type == "setting": settings = self.remote.get_settings() if not settings.get("allow_dynamic_settings", False): raise RuntimeError( "Dynamic settings changes are not enabled. Change the allow_dynamic_settings to 1 and restart cobblerd to enable dynamic settings changes" ) elif options.name == "allow_dynamic_settings": raise RuntimeError("Cannot modify that setting live") elif self.remote.modify_setting(options.name, options.value, self.token): raise RuntimeError("Changing the setting failed") else: self.remote.xapi_object_edit( object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token, ) except xmlrpclib.Fault, (err): (etype, emsg) = err.faultString.split(":", 1) print emsg[1:-1] # don't print the wrapping quotes sys.exit(1) except RuntimeError, (err): print err.args[0] sys.exit(1)
def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in [ "add", "edit", "copy", "rename", "find" ]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in [ "list" ]: pass else: self.parser.add_option("--name", dest="name", help="name of object") (options, args) = self.parser.parse_args() if object_action in [ "add", "edit", "copy", "rename", "remove", "reboot" ]: if opt(options, "name") == "": print "--name is required" sys.exit(1) try: self.remote.xapi_object_edit(object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token) except xmlrpclib.Fault, (err): (etype, emsg) = err.faultString.split(":",1) print emsg[1:-1] # don't print the wrapping quotes sys.exit(1)
def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in [ "add", "edit", "copy", "rename", "find" ]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in [ "list" ]: pass else: self.parser.add_option("--name", dest="name", help="name of object") (options, args) = self.parser.parse_args() if object_action in [ "add", "edit", "copy", "rename", "remove" ]: if opt(options, "name") == "": print "--name is required" sys.exit(1) self.remote.xapi_object_edit(object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token) elif object_action == "getks": if object_type == "profile": data = self.remote.generate_kickstart(options.name,"") elif object_type == "system": data = self.remote.generate_kickstart("",options.name) print data elif object_action == "dumpvars": if object_type == "profile": data = self.remote.get_blended_data(options.name,"") elif object_type == "system": data = self.remote.get_blended_data("",options.name) # FIXME: pretty-printing and sorting here print data elif object_action in [ "poweron", "poweroff", "reboot" ]: power={} power["power"] = object_action.replace("power","") power["systems"] = [options.name] task_id = self.remote.background_power_system(power, self.token) elif object_action == "report": if options.name is not None: report_item(self.remote,object_type,None,options.name) else: report_items(self.remote,object_type) elif object_action == "list": list_items(self.remote, object_type) elif object_action == "find": items = self.remote.find_items(object_type, utils.strip_none(vars(options), omit_none=True), "name", False) for item in items: print item else: raise exceptions.NotImplementedError() # FIXME: add tail/polling code here if task_id != -1: self.print_task(task_id) self.follow_task(task_id) return True
def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in [ "add", "edit", "copy", "rename", "find", "remove" ]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in [ "list" ]: pass elif object_action not in ("reload","update"): self.parser.add_option("--name", dest="name", help="name of object") elif object_action == "reload": self.parser.add_option("--filename", dest="filename", help="filename to load data from") (options, args) = self.parser.parse_args() # the first three don't require a name if object_action == "report": if options.name is not None: report_item(self.remote,object_type,None,options.name) else: report_items(self.remote,object_type) elif object_action == "list": list_items(self.remote, object_type) elif object_action == "find": items = self.remote.find_items(object_type, utils.strip_none(vars(options), omit_none=True), "name", False) for item in items: print item elif object_action in OBJECT_ACTIONS: if opt(options, "name") == "" and object_action not in ("reload","update"): print "--name is required" sys.exit(1) if object_action in [ "add", "edit", "copy", "rename", "remove" ]: try: if object_type == "setting": settings = self.remote.get_settings() if options.value == None: raise RuntimeError("You must specify a --value when editing a setting") elif not settings.get('allow_dynamic_settings',False): raise RuntimeError("Dynamic settings changes are not enabled. Change the allow_dynamic_settings to 1 and restart cobblerd to enable dynamic settings changes") elif options.name == 'allow_dynamic_settings': raise RuntimeError("Cannot modify that setting live") elif self.remote.modify_setting(options.name,options.value,self.token): raise RuntimeError("Changing the setting failed") else: self.remote.xapi_object_edit(object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token) except xmlrpclib.Fault, (err): (etype, emsg) = err.faultString.split(":",1) print "exception on server: %s" % emsg sys.exit(1) except RuntimeError, (err): print err.args[0] sys.exit(1)
def add_options(self, p, args): # FIXME: must create per-interface fields also. Do this manually? rc = utils.add_options_from_fields(p, item_system.FIELDS, args) p.add_option("--interface", dest="interface", help="which interface(s) to add/edit?", default="eth0") p.add_option( "--delete-interface", dest="delete_interface", help="delete named interface(s) from the system object" ) return rc
def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in ["add", "edit", "copy", "rename", "find"]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in ["list"]: pass else: self.parser.add_option("--name", dest="name", help="name of object") (options, args) = self.parser.parse_args() if object_action in [ "add", "edit", "copy", "rename", "remove", "reboot" ]: if opt(options, "name") == "": print "--name is required" sys.exit(1) self.remote.xapi_object_edit( object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token) elif object_action == "getks": if object_type == "profile": data = self.remote.generate_kickstart(options.name, "") elif object_type == "system": data = self.remote.generate_kickstart("", options.name) print data elif object_action == "dumpvars": if object_type == "profile": data = self.remote.get_blended_data(options.name, "") elif object_type == "system": data = self.remote.get_blended_data("", options.name) # FIXME: pretty-printing and sorting here keys = data.keys() keys.sort() for x in keys: print "%s : %s" % (x, data[x]) elif object_action in ["poweron", "poweroff", "powerstatus", "reboot"]: power = {} power["power"] = object_action.replace("power", "") power["systems"] = [options.name] task_id = self.remote.background_power_system(power, self.token) elif object_action == "report": if options.name is not None: report_item(self.remote, object_type, None, options.name) else: report_items(self.remote, object_type) elif object_action == "list": list_items(self.remote, object_type) elif object_action == "find": items = self.remote.find_items( object_type, utils.strip_none(vars(options), omit_none=True), "name", False) for item in items: print item else: raise exceptions.NotImplementedError() # FIXME: add tail/polling code here if task_id != -1: self.print_task(task_id) self.follow_task(task_id) return True
def add_options(self, p, args): return utils.add_options_from_fields(p, item_image.FIELDS, args)
def add_options(self, p, args): utils.add_options_from_fields(p, item_distro.FIELDS, args) return True
def object_command(self, object_type, object_action): """ Process object-based commands such as "distro add" or "profile rename" """ task_id = -1 # if assigned, we must tail the logfile fields = self.get_fields(object_type) if object_action in [ "add", "edit", "copy", "rename", "find" ]: utils.add_options_from_fields(object_type, self.parser, fields, object_action) elif object_action in [ "list" ]: pass else: self.parser.add_option("--name", dest="name", help="name of object") (options, args) = self.parser.parse_args() # the first three don't require a name if object_action == "report": if options.name is not None: report_item(self.remote,object_type,None,options.name) else: report_items(self.remote,object_type) elif object_action == "list": list_items(self.remote, object_type) elif object_action == "find": items = self.remote.find_items(object_type, utils.strip_none(vars(options), omit_none=True), "name", False) for item in items: print item elif object_action in OBJECT_ACTIONS: if opt(options, "name") == "": print "--name is required" sys.exit(1) if object_action in [ "add", "edit", "copy", "rename", "remove" ]: try: self.remote.xapi_object_edit(object_type, options.name, object_action, utils.strip_none(vars(options), omit_none=True), self.token) except xmlrpclib.Fault, (err): (etype, emsg) = err.faultString.split(":",1) print emsg[1:-1] # don't print the wrapping quotes sys.exit(1) elif object_action == "getks": if object_type == "profile": data = self.remote.generate_kickstart(options.name,"") elif object_type == "system": data = self.remote.generate_kickstart("",options.name) print data elif object_action == "dumpvars": if object_type == "profile": data = self.remote.get_blended_data(options.name,"") elif object_type == "system": data = self.remote.get_blended_data("",options.name) # FIXME: pretty-printing and sorting here keys = data.keys() keys.sort() for x in keys: print "%s : %s" % (x, data[x]) elif object_action in [ "poweron", "poweroff", "powerstatus", "reboot" ]: power={} power["power"] = object_action.replace("power","") power["systems"] = [options.name] task_id = self.remote.background_power_system(power, self.token) else: raise exceptions.NotImplementedError()
def add_options(self, p, args): utils.add_options_from_fields(p, item_profile.FIELDS, args) p.add_option("--inherit",dest="inherit",help="parent for subprofile") return True