Example #1
0
    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")
Example #2
0
    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
Example #3
0
    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
Example #4
0
"""

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, "")

    # 拷贝默认配置文件.