#! /usr/bin/env python2
import json
import argparse

def gen_config(args):
    confobj = {}
    storageips = args.storagehosts.split(",")
    serverips = args.serverhosts.split(",")
    xpanelip = args.xpanelhost
    version = args.product_version
    machines = []
    for ip in storageips:
        machines.append({"ip":ip, "basedir":args.defbase, "user":args.defuser})
    for ip in serverips:
        machines.append({"ip":ip, "basedir":args.defbase, "user":args.defuser})
    machines.append({"ip":xpanelip, "basedir":args.defbase, "user":args.defuser})
    nodemgr_nodes = []
    for ip in storageips:
        nodemgr_nodes.append({
                "ip": ip, 
                "nodetype" : "storage",
                "storage_datadirs": "/data1/storage_datadir",
                "storage_logdirs": "/data1/storage_logdir",
                "storage_waldirs": "/data1/storage_waldir"
                })
    for ip in serverips:
        nodemgr_nodes.append({"ip": ip, "nodetype":"server"})
    clustermgr_nodes = []
    meta_nodes = []
    i = 0
    for ip in storageips:
        clustermgr_nodes.append({"ip": ip})
        meta_nodes.append({"ip":ip})
        i += 1
        if i >= 3:
            break
    i = 0
    confobj = {
            "machines": machines,
            "meta": {
                    "ha_mode": "rbr",
                    "nodes": meta_nodes
                },
            "cluster_manager": { "nodes": clustermgr_nodes},
            "node_manager": {"nodes": nodemgr_nodes},
            "xpanel": {
                    "ip": xpanelip,
                    "image": "kunlun-xpanel:%s" % version,
                    "imageType": "file",
                    "imageFile": "kunlun-xpanel-%s.tar.gz" % version
                },
            "elasticsearch": {
                "ip": xpanelip
                }
            }
    outf = open(args.output, 'w')
    json.dump(confobj, outf, indent=4)

if  __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Specify the arguments.')
    parser.add_argument('--storagehosts', type=str, help="The storage hosts list", required=True)
    parser.add_argument('--serverhosts', type=str, help="The server hosts list", required=True)
    parser.add_argument('--xpanelhost', type=str, help="The xpanel host", required=True)
    parser.add_argument('--defuser', type=str, help="the default user", default='klbase')
    parser.add_argument('--defbase', type=str, help="the default basedir", default='/home/klbase/kunlunbase')
    parser.add_argument('--serverport', type=int, help="the default server port", default=5432)
    parser.add_argument('--output', type=str, help='the output file path', default='aliyun.json')
    parser.add_argument('--product_version', type=str, help="kunlun version", default='1.1.1')

    args = parser.parse_args()
    if not args.defbase.startswith('/'):
        raise ValueError('Error: the default basedir must be absolute path!')
    gen_config(args)

