def _POST(self, *param, **params): if not validates_host_add(self): return web.badrequest(self.view.alert) uniq_key_check = findby1uniquekey(self.orm, self.input.m_uuid) if uniq_key_check is not None and config['application.uniqkey'] != self.input.m_uuid: return web.conflict(web.ctx.path) hostname_check = findby1hostname(self.orm, self.input.m_hostname) if hostname_check is not None: return web.conflict(web.ctx.path) # notebook note_title = None if is_param(self.input, "note_title"): note_title = self.input.note_title note_value = None if is_param(self.input, "note_value"): note_value = self.input.note_value _notebook = n_new(note_title, note_value) # tags _tags = None if is_param(self.input, "tags"): _tags = [] tag_array = comma_split(self.input.tags) tag_array = uniq_sort(tag_array) for x in tag_array: if t_count(self.orm, x) == 0: _tags.append(t_new(x)) else: _tags.append(t_name(self.orm, x)) uniq_key = self.input.m_uuid name = self.input.m_name hostname = self.input.m_hostname model = findby1uniquekey(self.orm, uniq_key, is_deleted = True) if model is None: host = m_new(created_user=self.me, modified_user=self.me, uniq_key=uni_force(uniq_key), name=name, hostname=hostname, attribute=MACHINE_ATTRIBUTE['HOST'], hypervisor=MACHINE_HYPERVISOR['REAL'], notebook=_notebook, tags=_tags, icon=None, is_deleted=False) m_save(self.orm, host) return web.created(None) else: model.name = name model.hostname = hostname model.uniq_key = uniq_key model.notebook.title = note_title model.notebook.value = note_value model.tags = _tags model.is_deleted = False m_update(self.orm, model) return web.created(None)
def _POST(self, *param, **params): if not validates_host_add(self): return web.badrequest(self.view.alert) if self.input.m_connect_type == "karesansui": uniq_key_check = findby1uniquekey(self.orm, self.input.m_uuid) if uniq_key_check is not None and config['application.uniqkey'] != self.input.m_uuid: return web.conflict(web.ctx.path) hostname_check = findby1hostname(self.orm, self.input.m_hostname) if hostname_check is not None: return web.conflict(web.ctx.path) # notebook note_title = None if is_param(self.input, "note_title"): note_title = self.input.note_title note_value = None if is_param(self.input, "note_value"): note_value = self.input.note_value _notebook = n_new(note_title, note_value) # tags _tags = None if is_param(self.input, "tags"): _tags = [] tag_array = comma_split(self.input.tags) tag_array = uniq_sort(tag_array) for x in tag_array: if t_count(self.orm, x) == 0: _tags.append(t_new(x)) else: _tags.append(t_name(self.orm, x)) name = self.input.m_name if self.input.m_connect_type == "karesansui": uniq_key = self.input.m_uuid attribute = MACHINE_ATTRIBUTE['HOST'] if is_param(self.input, "m_hostname"): hostname = self.input.m_hostname if self.input.m_connect_type == "libvirt": uniq_key = string_from_uuid(generate_uuid()) attribute = MACHINE_ATTRIBUTE['URI'] if is_param(self.input, "m_uri"): segs = uri_split(self.input.m_uri) if is_param(self.input, "m_auth_user") and self.input.m_auth_user: segs["user"] = self.input.m_auth_user if is_param(self.input, "m_auth_passwd") and self.input.m_auth_passwd: segs["passwd"] = self.input.m_auth_passwd hostname = uri_join(segs) model = findby1uniquekey(self.orm, uniq_key, is_deleted = True) if model is None: host = m_new(created_user=self.me, modified_user=self.me, uniq_key=uni_force(uniq_key), name=name, hostname=hostname, attribute=attribute, hypervisor=MACHINE_HYPERVISOR['REAL'], notebook=_notebook, tags=_tags, icon=None, is_deleted=False) m_save(self.orm, host) return web.created(None) else: model.name = name model.hostname = hostname model.uniq_key = uniq_key model.notebook.title = note_title model.notebook.value = note_value model.tags = _tags model.is_deleted = False m_update(self.orm, model) return web.created(None)
def regist_guest(obj, _guest, icon_filename, cmd, options, cmdname, rollback_options, is_create=False): if icon_filename: _guest.icon = icon_filename if (karesansui.sheconf.has_key('env.uniqkey') is False) \ or (karesansui.sheconf['env.uniqkey'].strip('') == ''): raise action_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], cmd), options) rollback_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_DELETE_GUEST), rollback_options) _jobgroup = JobGroup(cmdname[0], karesansui.sheconf['env.uniqkey']) # create volume job order = 0 if is_create is True: _volume_job = make_storage_volume_job(options["uuid"], options["storage-volume"], options["storage-pool"], options["disk-format"], options["disk-size"], options["disk-size"], 'M', order) order += 1 _jobgroup.jobs.append(_volume_job) _job = Job('%s command' % cmdname[1], order, action_cmd) _job.rollback_command = rollback_cmd _jobgroup.jobs.append(_job) # GuestOS INSERT try: m_save(obj.orm, _guest) obj.orm.commit() except: obj.logger.error('Failed to register the Guest OS. #1 - guest name=%s' \ % _guest.name) raise # throw # JobGroup INSERT try: jg_save(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(machine) obj.logger.error('Failed to register the JobGroup. #2 - jobgroup name=%s' \ % _jobgroup.name) try: m_delete(obj.orm, _guest) obj.orm.commit() obj.logger.error('#3 Rollback successful. - guest id=%d' % _guest.id) except: obj.logger.critical('#4 Rollback failed. - guest id=%d' % _guest.id) raise raise # throw # Machine2JobGroup INSERT try: _m2j = m2j_new( machine=_guest, jobgroup_id=_jobgroup.id, uniq_key=karesansui.sheconf['env.uniqkey'], created_user=obj.me, modified_user=obj.me, ) m2j_save(obj.orm, _m2j) obj.orm.commit() except: # rollback(machine, jobgroup) try: m_delete(obj.orm, _guest) obj.orm.commit() except: # rollback(machine) obj.logger.critical('Failed to register the Machine. #5 - guest id=%d' \ % _guest.id) try: jg_delete(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(jobgroup) obj.logger.critical('Failed to register the JobGroup. #6 - jobgroup id=%d' \ % _jobgroup.id) raise # throw return True
def regist_guest(obj, _guest, icon_filename, cmd, options, cmdname, rollback_options, is_create=False): if icon_filename: _guest.icon = icon_filename if (karesansui.sheconf.has_key('env.uniqkey') is False) \ or (karesansui.sheconf['env.uniqkey'].strip('') == ''): raise action_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], cmd), options) rollback_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_DELETE_GUEST), rollback_options) _jobgroup = JobGroup(cmdname[0], karesansui.sheconf['env.uniqkey']) # create volume job order = 0 if is_create is True: _volume_job = make_storage_volume_job(options["uuid"], options["storage-volume"], options["storage-pool"], options["disk-format"], options["disk-size"], options["disk-size"], 'M', order ) order += 1 _jobgroup.jobs.append(_volume_job) _job = Job('%s command' % cmdname[1], order, action_cmd) _job.rollback_command = rollback_cmd _jobgroup.jobs.append(_job) # GuestOS INSERT try: m_save(obj.orm, _guest) obj.orm.commit() except: obj.logger.error('Failed to register the Guest OS. #1 - guest name=%s' \ % _guest.name) raise # throw # JobGroup INSERT try: jg_save(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(machine) obj.logger.error('Failed to register the JobGroup. #2 - jobgroup name=%s' \ % _jobgroup.name) try: m_delete(obj.orm, _guest) obj.orm.commit() obj.logger.error('#3 Rollback successful. - guest id=%d' % _guest.id) except: obj.logger.critical('#4 Rollback failed. - guest id=%d' % _guest.id) raise raise # throw # Machine2JobGroup INSERT try: _m2j = m2j_new(machine=_guest, jobgroup_id=_jobgroup.id, uniq_key=karesansui.sheconf['env.uniqkey'], created_user=obj.me, modified_user=obj.me, ) m2j_save(obj.orm, _m2j) obj.orm.commit() except: # rollback(machine, jobgroup) try: m_delete(obj.orm, _guest) obj.orm.commit() except: # rollback(machine) obj.logger.critical('Failed to register the Machine. #5 - guest id=%d' \ % _guest.id) try: jg_delete(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(jobgroup) obj.logger.critical('Failed to register the JobGroup. #6 - jobgroup id=%d' \ % _jobgroup.id) raise # throw return True
def exec_replicate_guest(obj, _guest, icon_filename, cmdname, guest_job, disk_jobs, volume_jobs): if icon_filename: _guest.icon = icon_filename if (karesansui.sheconf.has_key('env.uniqkey') is False) \ or (karesansui.sheconf['env.uniqkey'].strip('') == ''): raise _jobgroup = JobGroup(cmdname, karesansui.sheconf['env.uniqkey']) _jobgroup.jobs.extend(volume_jobs) _jobgroup.jobs.append(guest_job) _jobgroup.jobs.extend(disk_jobs) # GuestOS INSERT try: m_save(obj.orm, _guest) obj.orm.commit() except: obj.logger.error('Failed to register the Guest OS. #1 - guest name=%s' \ % _guest.name) raise # throw # JobGroup INSERT try: jg_save(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(machine) obj.logger.error('Failed to register the JobGroup. #2 - jobgroup name=%s' \ % _jobgroup.name) try: m_delete(obj.orm, _guest) obj.orm.commit() obj.logger.error('#3 Rollback successful. - guest id=%d' % _guest.id) except: obj.logger.critical('#4 Rollback failed. - guest id=%d' % _guest.id) raise raise # throw # Machine2JobGroup INSERT try: _m2j = m2j_new(machine=_guest, jobgroup_id=_jobgroup.id, uniq_key=karesansui.sheconf['env.uniqkey'], created_user=obj.me, modified_user=obj.me, ) m2j_save(obj.orm, _m2j) obj.orm.commit() except: # rollback(machine, jobgroup) try: m_delete(obj.orm, _guest) obj.orm.commit() except: # rollback(machine) obj.logger.critical('Failed to register the Machine. #5 - guest id=%d' \ % _guest.id) try: jg_delete(obj.pysilhouette.orm, _jobgroup) obj.pysilhouette.orm.commit() except: # rollback(jobgroup) obj.logger.critical('Failed to register the JobGroup. #6 - jobgroup id=%d' \ % _jobgroup.id) raise # throw return True