Example #1
0
def _get_stack_id(stack_name):
    url = str.format('http://{}/v2-beta/projects/{}/stacks', conf().RANCHER_ADDRESS, conf().PROJECT_ID)
    res = json_util.un_marshal(request_util.get(url))
    services = res.get('data')
    for service in services:
        if service.get('name') == stack_name:
            return service.get('id')
Example #2
0
def _distribute_file(ip, source_dir, target_dir):
    logger.info('开始分发配置文件: ' + ip)
    # 发送文件
    send_cmd = str.format('scp {} -r {} {}@{}:{}',
                          conf().IDENTITY, source_dir,
                          conf().USER_NAME, ip, target_dir)
    send_del = shell_util.exec_cmd(send_cmd)
    logger.info('发送: ' + str(send_del))
Example #3
0
def delete_service(service_name):
    url = str.format('http://{}/v2-beta/projects/{}/services',
                     conf().RANCHER_ADDRESS,
                     conf().PROJECT_ID)
    service_id = _get_service_id(service_name)
    url = str.format(url + '/{}', service_id)
    res = request_util.delete(url)
    logger.info("节点删除中: " + res)
Example #4
0
def _delete_file(ip, target_dir):
    logger.info('开始删除目录: ' + ip)
    del_str = 'ls'
    if target_dir and '/home/centos/' in target_dir:
        del_str = 'rm -rf ' + target_dir
    # 删除文件
    del_cmd = str.format('ssh {} {}@{} sudo {}',
                         conf().IDENTITY,
                         conf().USER_NAME, ip, del_str)
    res_del = shell_util.exec_cmd(del_cmd)
    logger.info('删除: ' + str(res_del))
Example #5
0
def create_service(service_name, neighbors):
    url = str.format('http://{}/v2-beta/projects/{}/services',
                     conf().RANCHER_ADDRESS,
                     conf().PROJECT_ID)
    # 读取配置文件
    args_str = file_util.read(conf().RANCHER_TEMPLATE_PATH)

    # 设置参数
    args = _set_docker_config(args_str, service_name, neighbors)

    logger.info(url)

    res = request_util.post(url, args)
    logger.info('节点创建成功: ' + res)
Example #6
0
def _set_docker_config(args_str, service_name, neighbors):
    args = json_util.un_marshal(args_str)
    peer_dir = os.path.join(conf().NODE_DIR, service_name)
    args['stackId'] = _get_stack_id(conf().STACK_NAME)
    args['name'] = service_name
    args['launchConfig']['hostname'] = service_name
    args['launchConfig']['dataVolumes'] = [str.format('/root/NFS500/test/{}/config:/tendermint/config', service_name)]
    args['launchConfig']['imageUuid'] = conf().IMAGE_ID
    p2p_str = ''
    if neighbors:
        p2p_str = '--p2p.persistent_peers=' + neighbors
    entry_point = ['sh', '-c', str.format('tendermint node {} --proxy_app=persistent_kvstore', p2p_str)]
    args['launchConfig']['entryPoint'] = entry_point
    print(args)
    return args
Example #7
0
def _update_genesis(old_name, new_name, genesis):
    # 节点目录为 数据根目录 加上 节点名称,  bak后缀为副本
    old_dir = os.path.join(conf().NODE_DIR, old_name + '-bak')
    new_dir = os.path.join(conf().NODE_DIR, new_name)

    genesis_path = os.path.join(old_dir, 'config/genesis.json')
    # 更新genesis.json文件
    if isinstance(genesis, str):
        genesis = json_util.un_marshal(genesis)
    file_util.write_json(genesis, genesis_path)

    # 移动本地目录到新目录
    file_util.move_dir(old_dir, new_dir)

    # 分发节点目录
    for ip in conf().MACHINE_IPS:
        _distribute_file(ip, new_dir, new_dir)
Example #8
0
def do_delete(service_name):
    # 删除rancher服务
    rancher_service.delete_service(service_name)
    # 节点目录为 数据根目录 加上 节点名称
    peer_dir = os.path.join(conf().NODE_DIR, service_name)
    data_dir = os.path.join(peer_dir, 'data')
    # 删除data文件
    file_util.remove(data_dir)
    # 创建data目录并放入 配置文件
    file_util.make_dir(data_dir)
    file_util.copy(conf().VALIDATOR_STATE_PATH, data_dir)

    # bak后缀为副本
    file_util.move_dir(peer_dir, peer_dir + '-bak')

    # 删除其余所有节点的该目录
    for ip in conf().MACHINE_IPS:
        _delete_file(ip, peer_dir)
Example #9
0
                'max_age': '100000'
            },
            'validator': {
                'pub_key_types': ['ed25519']
            }
        },
        'validators': [{
            'address': '287CFEDC36CCF61AAA8A6A537BA173F0DF6878E3',
            'pub_key': {
                'type': 'tendermint/PubKeyEd25519',
                'value': '+RWAVtjj5uBSPjbp55nulXAcgxQXInxw9lu7CjrbM7U='
            },
            'power': '1000',
            'name': 'tm_node1'
        }],
        'app_hash':
        ''
    }
    genesis_str = json_util.marshal(genesis_dict)
    print(genesis_dict)
    # do_move(name, p2p_str, genesis_str)
    peer_source_dir = os.path.join(conf().NODE_DIR, name)
    # _distribute_file('10.77.70.135', peer_source_dir, '/home/centos/zyj/TTANode1')
    do_delete('TTANode3')

    # do_create('TTANode1', 'TTANode2', genesis_dict, p2p_str)
    # 分发免密凭证
    # for count in range(139, 143):
    #     ip = '10.77.70.' + str(count)
    #     _distribute_file(ip, '~/.ssh/id_rsa_768', '/home/centos/.ssh/')
Example #10
0
# 创建flask用用实例
def create_app():
    app = Flask(__name__)
    # 注册蓝本
    app.register_blueprint(tendermint, url_prefix='/api/tendermint')
    app.register_blueprint(system, url_prefix='/api/system')
    app.register_blueprint(rancher, url_prefix='/api/v2/tendermint')
    return app


# 加载环境
def load_env(args):
    env = 'dev'
    if len(args) > 1:
        arg = args[1].split('=')
        if len(arg) > 1 and arg[0] == '--active' and arg[1] == 'prod':
            env = arg[1]
    logger.info('当前环境为: ' + env)
    config.load_config(env)


if __name__ == '__main__':
    # 加载配置
    load_env(sys.argv)
    # 启动服务
    service = create_app()
    service.run(host=config.conf().HOST,
                port=config.conf().PORT,
                threaded=True,
                debug=config.conf().DEBUG)
Example #11
0
def delete_service(service_name):
    # 删除副本操作
    delete_str = "kubectl patch deployment  "+service_name+" -p '{\"spec\":{\"replicas\":0}}' -n "+conf().DEPLOYMENT
    # url = str.format('http://{}/v2-beta/projects/{}/services', conf().RANCHER_ADDRESS, conf().PROJECT_ID)
    os.system(delete_str)
    # service_id = _get_service_id(service_name)
    # url = str.format(url + '/{}', service_id)
    # res = request_util.delete(url)
    logger.info("节点删除中 ")
Example #12
0
def create_service(service_name, neighbors):
    create_str = "kubectl patch deployment  " + service_name + " -p '{\"spec\":{\"replicas\":1}}' -n " + conf().DEPLOYMENT
    os.system(create_str)
    # url = str.format('http://{}/v2-beta/projects/{}/services', conf().RANCHER_ADDRESS, conf().PROJECT_ID)
    # # 读取配置文件
    # args_str = file_util.read(conf().RANCHER_TEMPLATE_PATH)
    #
    # # 设置参数
    # args = _set_docker_config(args_str, service_name, neighbors)
    #
    # logger.info(url)
    #
    # res = request_util.post(url, args)
    logger.info('节点创建成功')