def __init__(self, oper_type, _type, unique_data, email): """ common_data 任务的公共数据; unique_data 每个宿主机任务的数据; code 装机任务返回值, 0 表示任务执行并成功, -1 表示任务未执行, 1表示任务执行但失败; error_message 表示失败信息. 对于每个宿主机上的任务, 也有 code 和 error_message, 0 表示成功, 1 表示失败. """ self.oper_type = oper_type self.type = _type self.unique_data = unique_data self.email = email self.logger = log.LogHandler().logger # 初始化任务的 code 和 error_message. self.code = 0 self.error_message = None # 对操作类型定义中文, 为了发邮件. if self.oper_type == "delete": self.oper_type_cn = u"删除" elif self.oper_type == "reboot": self.oper_type_cn = u"重启" elif self.oper_type == "shutdown": self.oper_type_cn = u"关机" else: raise Exception("oper_type not correct")
def __init__(self, area, _type, wmi_id, auto_vmhs, vmhs, num, version, vcpu, mem, data_size, idc, usage, user_data, email): """ common_data 任务的公共数据; unique_data 每个宿主机任务的数据; code 装机任务返回值, 0 表示任务执行并成功, -1 表示任务未执行, 1表示任务执行但失败; error_message 表示失败信息. 对于每个宿主机上的任务, 也有 code 和 error_message, 0 表示成功, 1 表示失败. """ self.area = area self.type = _type self.wmi_id = wmi_id self.auto_vmhs = auto_vmhs self.vmhs = vmhs self.num = num self.version = version self.vcpu = vcpu self.mem = mem * 1024 # 这里以 M 计算. self.data_size = data_size self.idc = idc self.usage = usage self.user_data = user_data self.email = email self.vm_areas = VM_AREAS self.os_size = OS_SIZE self.locations = LOCATIONS self.kss = KSS self.network = NETMASK_DEFAULT self.bridge = BRIDGE_DEFAULT self.logger = log.LogHandler().logger self.client = redisoj.RedisClient().get(REDIS_DB_VM) self.client_user_data = redisoj.RedisClient().get(REDIS_DB_COMMON) # 初始化任务的 code 和 error_message. self.code = 0 self.error_message = None
def __init__(self, _type, wmi_name, hostname, vmh, vmname, excludes, email): """ data 任务的公共数据; unique_data 每个宿主机任务的数据; code 装机任务返回值, 0 表示任务执行并成功, -1 表示任务未执行, 1表示任务执行但失败; error_message 表示失败信息. """ self.type = _type self.wmi_name = wmi_name self.hostname = hostname self.vmh = vmh self.vmname = vmname self.excludes = excludes self.email = email self.logger = log.LogHandler().logger self.client = redisoj.RedisClient().get(REDIS_DB_VM) # 初始化任务的 code 和 error_message. self.code = 0 self.error_message = None
""" import time import sys import os from multiprocessing.dummy import Pool as ThreadPool import ujson as json from web.const import (MAX_THREAD_NUM, PXELINUX_CFGS, REDIS_DB_PM, REDIS_DB_COMMON) from libs import redisoj, log, mail, asset_utils, dns_utils from libs import utils as common_utils from pm.libs import utils logger = log.LogHandler().logger client = redisoj.RedisClient().get(REDIS_DB_PM) client_user_data = redisoj.RedisClient().get(REDIS_DB_COMMON) def multi(common_data, email): # 取一个列表的 type 和 version, 一批机器的 type 和 version 相同. _type = common_data[0]["type"] version = common_data[0]["version"] # 因为手动安装是使用一个默认的配置文件, 如果多组机器同时安装, 配置文件需要在 # 所有的机器都安装完成之后删除, 所以用一个队列来保存正在安装的任务. default_key = "default:{type}:{version}".format(type=type, version=version) client.lpush(default_key, "") # 拷贝默认配置文件.