# -*- coding:utf-8 -*-

import os
import re

if __name__ == '__main__':
    # 同步配置nginx配置
    app_conf_path = '/huansi/upgrade/app.conf'
    rpc_conf_path = '/huansi/upgrade/rpc.conf'
    compose_path = '/huansi/upgrade/docker-compose.yml'

    with open(compose_path, 'r') as f:
        compose_content = f.read()

    # 取出内容中ip " # ip: "192.168.0.1" "
    ip_str_list = re.findall('# ip: "(.*)"', compose_content)
    if not ip_str_list:
        raise RuntimeError('未在docker-compose.yml找到ip的配置')
    ip = str(ip_str_list[0])

    os.system('mkdir -p /data/nginx/conf/')
    if os.path.exists(app_conf_path):
        with open(app_conf_path, 'r')as f:
            app_conf_content = f.read()

        app_conf_content = app_conf_content.replace('$service_ip', ip)

        with open('/data/nginx/conf/app.conf', 'w')as f:
            f.write(app_conf_content)

    if os.path.exists(rpc_conf_path):
        with open(rpc_conf_path, 'r')as f:
            rpc_conf_content = f.read()

            rpc_conf_content = rpc_conf_content.replace('$service_ip', ip)

        with open('/data/nginx/conf/rpc.conf', 'w')as f:
            f.write(rpc_conf_content)

    with os.popen('ls | grep .tar') as f:
        cmd_txt = f.read()

    if not cmd_txt:
        raise RuntimeError('请检查文件,tar文件为空')

    app_name_list = cmd_txt.split('\n')

    for app_name in app_name_list:
        if not app_name:
            continue
        print('加载镜像:{}'.format(app_name[:-4].replace('___', "/").replace("__", ":")))
        cmd_res = os.system('docker load -i {}'.format(app_name))
        if cmd_res == 1:
            raise RuntimeError('加载失败')

    print('镜像加载完毕')
    print('开始升级程序')

    app_list_str = re.findall('# app_list: ".*"', compose_content)
    if app_list_str:
        app_list_str = app_list_str[0]
    else:
        raise RuntimeError('未设置app_list')

    app_str = app_list_str[len('# app_list: "'):-1]

    if app_str == '*':
        res = os.system('''export HUANSI_REGISTRY_URL=47.110.145.204:8084 &&\
source /huansi/upgrade/huansi.sh &&\
docker-compose -p deploy up -d --force-recreate''')
    else:
        res = os.system('''export HUANSI_REGISTRY_URL=47.110.145.204:8084 &&\
source /huansi/upgrade/huansi.sh &&\
docker-compose -p deploy up -d --force-recreate --no-deps {}'''.format(app_str))

    if res == 1: raise RuntimeError('程序升级失败')