Example #1
0
def mobile_static_resources(game, region, component, game_env):
    """
    总的调度函数,负责读取一些参数,然后传给prod或test的函数

    """

    conf = ConfigReader(game, region)

    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")
        if port:
            ip = '{}:{}'.format(ip, port)

    if game_env == 'test':
        root_dir = conf.get("mobile_www_root_test")
        test_env_mobile_static_resources(game, region, component, root_dir, ip)
    elif game_env == 'prod':
        root_dir_prod = conf.get("mobile_www_root")
        root_dir_test = conf.get("mobile_www_root_test")
        prod_env_mobile_static_resources(game, region, component,
                                         root_dir_prod, root_dir_test, ip)
def mobile_static_resources(game, region, component, game_env):
    """
    总的调度函数,负责读取一些参数,然后传给prod或test的函数

    """

    conf = ConfigReader(game, region)

    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")     
        if port:
            ip = '{}:{}'.format(ip, port)

    if game_env == 'test':
        root_dir = conf.get("mobile_www_root_test")
        test_env_mobile_static_resources(game, region, component, root_dir, ip)
    elif game_env == 'prod':
        root_dir_prod = conf.get("mobile_www_root")
        root_dir_test = conf.get("mobile_www_root_test")
        prod_env_mobile_static_resources(game, region, component, root_dir_prod, root_dir_test, ip)
def modify_mobile_www_config(game, region, scopes, filename, option_name,
                             option_value):

    conf = ConfigReader(game, region)
    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")
        if port:
            ip = '{}:{}'.format(ip, port)

    root_dir = conf.get("mobile_www_root_test")

    @hosts(ip)
    def _modify_mobile_www_config():
        for each_scope in scopes:
            with cd(root_dir):
                _filename = '{}/{}'.format(each_scope, filename)
                config_file = MConfig(_filename)
                config_file.modify(key=option_name, value=option_value)

    execute(_modify_mobile_www_config)
Example #4
0
def sync(game, region):
    """
    强行使测试环境目录与正式环境同步
    """
    conf = ConfigReader(game, region)
    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")
        if port:
            ip = '{}:{}'.format(ip, port)

    root_dir_prod = conf.get("mobile_www_root")
    root_dir_test = conf.get("mobile_www_root_test")

    exclude_files = ['proxy.lua', 'lyServers']

    exclude_param = ' '.join(
        ['--exclude={}'.format(each) for each in exclude_files])

    with settings(host_string=ip):
        run('''rsync -aqP --delete {exclude} {root_dir_prod}/ {root_dir_test}/'''
            .format(exclude=exclude_param,
                    root_dir_prod=root_dir_prod,
                    root_dir_test=root_dir_test))
Example #5
0
def mobile_www_release(game, region, version, scopes, game_env, mode=1):
    """
    总的调度函数,负责读取一些参数,然后传给prod或test的函数

    目前打包任何.zip文件的时候,都同时copy出一份不带zip的压缩包。目的是防止一些小的电信运营商(如长城宽带)缓存.zip文件。
    """

    version_regex_check(version)

    conf = ConfigReader(game, region)

    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")     
        if port:
            ip = '{}:{}'.format(ip, port)

    if conf.has_option("gateway"):
        """
        配置gateway
        """
        env.gateway = conf.get("gateway")

    if conf.has_option("mobile_www_start_zip_version"):
        start_zip_version = conf.get("mobile_www_start_zip_version")
    else:
        start_zip_version = "0.0.0.0"

    if game_env == 'test':
        root_dir = conf.get("mobile_www_root_test")
        test_env_mobile_www_release(game, region, version, scopes, root_dir, ip, start_zip_version=start_zip_version, mode=mode)
    elif game_env == 'prod':
        root_dir_prod = conf.get("mobile_www_root")
        root_dir_test = conf.get("mobile_www_root_test")
        prod_env_mobile_www_release(game, region, version, scopes, root_dir_prod, root_dir_test, ip, start_zip_version=start_zip_version, mode=mode)
def modify_mobile_www_config(game, region, scopes, filename, option_name, option_value):

    conf = ConfigReader(game, region)
    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")     
        if port:
            ip = '{}:{}'.format(ip, port)

    root_dir = conf.get("mobile_www_root_test")

    @hosts(ip)
    def _modify_mobile_www_config():
        for each_scope in scopes:
            with cd(root_dir):
                _filename = '{}/{}'.format(each_scope, filename)
                config_file = MConfig(_filename)
                config_file.modify(key=option_name, value=option_value)

    execute(_modify_mobile_www_config)
def sync(game, region):
    """
    强行使测试环境目录与正式环境同步
    """
    conf = ConfigReader(game, region)
    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")     
        if port:
            ip = '{}:{}'.format(ip, port)

    root_dir_prod = conf.get("mobile_www_root")
    root_dir_test = conf.get("mobile_www_root_test")

    exclude_files = ['proxy.lua', 'lyServers']

    exclude_param = ' '.join(['--exclude={}'.format(each) for each in exclude_files])

    with settings(host_string=ip):
        run('''rsync -aqP --delete {exclude} {root_dir_prod}/ {root_dir_test}/'''.format(exclude=exclude_param, root_dir_prod=root_dir_prod, root_dir_test=root_dir_test))
Example #8
0
 def mobile_entrance_mode(self):
     conf = ConfigReader(self.game, self.region)
     if conf.has_option('mobile_entrance_mode'):
         return conf.getint('mobile_entrance_mode')
     else:
         return 1
Example #9
0
        ssh_ip, region, port, mixed_server = get_opstree(game_server)
        logger.info('server staus is {}'.format(mixed_server))
        if mixed_server == 0:
            game = game_server.split('_')[0]
            logger.info('game = {}, ssh_ip = {}, region = {}, port = {}'.format(
                game, ssh_ip, region, port))

            # 读取配置
            conf = ConfigReader(game, region)
            if conf.has_option("gateway"):
                """
                配置gateway
                """
                env.gateway = conf.get("gateway")
                if conf.has_option("gateway_port"):
                    gateway_port = conf.getint("gateway_port")
                    env.gateway = '{}:{}'.format(env.gateway, gateway_port)

            # 连接机器处理 coredump 进程
            html = coredump_task(logger, ssh_ip, game_server, port)
            send_email(game_server, html)

            # 去掉 gateway
        # 消费端假死问题,强制重新连接
        # async_task.reconnect()

    # 获取消息队列

    # 查询服务树,获取信息

Example #10
0
def clean_up_diff_packages(game, region):
    """
    清理动更差异包
    """
    conf = ConfigReader(game, region)
    ip = conf.get("mobile_www_ip")

    if conf.has_option("mobile_www_port"):
        """
        如果前端资源服务器限制了ssh连接端口的话,修改Fabric的连接到该host的端口
        """
        port = conf.getint("mobile_www_port")
        if port:
            ip = '{}:{}'.format(ip, port)

    if conf.has_option("mobile_www_start_zip_version"):
        start_zip_version = conf.get("mobile_www_start_zip_version")
    else:
        start_zip_version = ""

    if conf.has_option("clean_30lv_diff_packages"):
        clean_30lv_diff_packages = conf.getboolean("clean_30lv_diff_packages")
    else:
        clean_30lv_diff_packages = False

    root_dir_prod = conf.get("mobile_www_root")
    root_dir_test = conf.get("mobile_www_root_test")

    @hosts(ip)
    def _do_clean_job(root_dir):
        need_scan_versions = filter_need_diff_versions(root_dir,
                                                       start_zip_version,
                                                       reverse=False)
        platforms = list_platforms(root_dir)

        _versions_in_use = []

        for each_platform in platforms:
            _version = platform_version(root_dir, each_platform)
            _versions_in_use.append(_version)

        versions_in_use = list(set(_versions_in_use))

        min_version = sorted_versions(versions_in_use)[0]  #算出目前在用的最小的version

        for each_version_dir in need_scan_versions:
            _each_version_dir = "{}/{}".format(root_dir, each_version_dir)
            existed_diff_packages = sorted_versions(
                list_existed_diff_packages(_each_version_dir))

            #保留最近3个差异动更包
            for each_package in existed_diff_packages[0:-3]:
                #if version_tuple(each_package) < version_tuple(min_version):
                if each_package not in versions_in_use:
                    if clean_30lv_diff_packages:  #目前只有gcmob需要清理30lv的差异包
                        _packages = '{0}/{1},{0}/{1}_preview,{0}/{1}_30lv'.format(
                            _each_version_dir, each_package).split(',')
                    else:
                        _packages = '{0}/{1},{0}/{1}_preview'.format(
                            _each_version_dir, each_package).split(',')

                    for each in _packages:
                        delete_package(each)

    #for each_root_dir in [root_dir_test]:
    for each_root_dir in [root_dir_test, root_dir_prod]:
        print('开始清理{}下的差异包...'.format(each_root_dir))
        execute(_do_clean_job, each_root_dir)