示例#1
0
def change_kube_service(config, args, operation, service_list):
    assert operation in ["start", "stop"
                         ] and "you can only start or stop a service"
    kubectl_action = "create" if operation == "start" else "delete"
    if operation == "start":
        render_services(config, service_list)
        remote_config_update(config, args)
    elif not os.path.exists("./deploy/services"):
        utils.render_template_directory("./services/", "./deploy/services/",
                                        config)
    service2path = update_service_path()
    for service_name in service_list:
        fname = service2path[service_name]
        dirname = os.path.dirname(fname)
        if os.path.exists(os.path.join(
                dirname, "launch_order")) and "/" not in service_name:
            with open(os.path.join(dirname, "launch_order"), 'r') as f:
                allservices = f.readlines()
                if operation == "stop":
                    allservices = reversed(allservices)
                for filename in allservices:
                    # If this line is a sleep tag (e.g. SLEEP 10), sleep for given seconds to wait for the previous service to start.
                    if filename.startswith("SLEEP"):
                        if operation == "start":
                            time.sleep(int(filename.split(" ")[1]))
                        else:
                            continue
                    filename = filename.strip('\n')
                    run_kubectl(config, args, [
                        "{} -f {}".format(kubectl_action,
                                          os.path.join(dirname, filename))
                    ])
        else:
            run_kubectl(config, args,
                        ["{} -f {}".format(kubectl_action, fname)])
示例#2
0
def render_services(config, service_list):
    '''render services, ./ctl.py svc render <service name, e.g. monitor>'''
    for svc in service_list:
        if not os.path.exists("./services/{}".format(svc)):
            print(
                "Warning: folder of service {} not found under ./services directory"
            )
            continue
        utils.render_template_directory("./services/{}".format(svc),
                                        "./deploy/services/{}".format(svc),
                                        config)
def render_kube_services(config):
    """overwrite config['kubelables'] if want to change node type for certain services"""
    """prepare /etc/kubernetes/kubelet.service for nodes by roles"""
    utils.render_template_directory("./services/", "./deploy/services/",
                                    config)
    config['labels'] = ["{{cnf['labels'] | join(',')}}"]
    for role in ["infra", "worker"]:
        utils.render_template(
            "template/cloud-config/{}.kubelet.service.template".format(role),
            "./deploy/cloud-config/{}.kubelet.service.template".format(role),
            config)
示例#4
0
def render_template_or_dir(config, args):
    nargs = args.nargs
    # no destination, then mirror one in ./deploy folder
    src = nargs[0]
    if len(nargs) == 1:
        dst = os.path.join("deploy", src.split("template/")[1])
    else:
        dst = nargs[1]
    if os.path.isdir(src):
        utils.render_template_directory(src, dst, config)
    else:
        utils.render_template(src, dst, config)
def render_for_worker_generic(config, args):
    # TODO: split into generic + specific node for options.env and worker-kubeconfig.yaml
    config["etcd_endpoints"] = "$ETCD_ENDPOINTS"
    orig_api_servers = config["api_servers"] if "api_servers" in config else ''
    config["api_servers"] = "$KUBE_API_SERVER"
    utils.render_template_directory("template/kubelet", "deploy/kubelet",
                                    config)
    utils.render_template("template/cloud-config/worker.upgrade.list",
                          "./deploy/cloud-config/worker.upgrade.list", config)
    utils.render_template("template/cloud-config/worker_fallback.sh.template",
                          "./deploy/cloud-config/worker_fallback.sh", config)
    if orig_api_servers:
        config["api_servers"] = orig_api_servers
def render_for_infra_generic(config, args):
    gen_new_key = True
    regenerate_key = False
    clusterID = load_cluster_ID()
    config["clusterId"] = clusterID
    if os.path.exists("./deploy/sshkey"):
        if say_yes_for(
                "There is a cluster (ID:{}) deployment in './deploy', do you want to keep \
            the existing ssh key and CA certificates (y/n)?".format(clusterID),
                args.yes):
            gen_new_key = False
            print("use existing ssh key and CA")
        else:
            # Backup old cluster
            utils.backup_keys(config["cluster_name"])
            regenerate_key = True
            print("use regenerate_key")
    if gen_new_key:
        utils.gen_SSH_key(regenerate_key)
        utils.backup_keys(config["cluster_name"])
        config["basic_auth"] = create_basic_auth_4_k8s(regenerate_key)

    config = GetCertificateProperty(config)
    utils.render_template_directory("./template/ssl",
                                    "./deploy/ssl",
                                    config,
                                    verbose=True)

    gen_dns_config_script(config)
    if gen_new_key:
        gen_CA_certificates(config)
        gen_worker_certificates(config)
        gen_master_certificates(config)
        gen_ETCD_certificates(config)
    utils.render_template("./template/cloud-config/file_map.yaml",
                          "./deploy/cloud-config/file_map.yaml", config)
    render_ETCD(config)
    config = render_restfulapi(config)
    render_kubelet(config, args)
    render_dashboard(config)
    render_mount(config, args)
    render_repairmanager(config)
    gen_pass_secret_script(config)
def render_dashboard(config):
    sshUser = config["admin_username"]
    webUIIP = config["kubernetes_master_node"][0]
    dockername = "%s/dlws-webui" % (config["dockerregistry"])
    # write report configuration
    masternodes = config["etcd_node"]
    if ("servers" not in config["Dashboards"]["influxDB"]):
        config["Dashboards"]["influxDB"]["servers"] = masternodes[0]
    if ("servers" not in config["Dashboards"]["grafana"]):
        config["Dashboards"]["grafana"]["servers"] = masternodes[0]

    config["grafana_endpoint"] = "http://%s:%s" % (
        config["Dashboards"]["grafana"]["servers"],
        config["Dashboards"]["grafana"]["port"])
    config["prometheus_endpoint"] = "http://%s:%s" % (
        config["prometheus"]["host"], config["prometheus"]["port"])

    utils.render_template_directory("./template/dashboard",
                                    "./deploy/dashboard", config)
def render_kubelet(config, args):
    config["master_ip"] = "$MASTER_IP"
    config["etcd_endpoints"] = "$ETCD_ENDPOINTS"
    utils.render_template_directory("./template/master", "./deploy/master",
                                    config)
    utils.render_template_directory("./template/kube-addons",
                                    "./deploy/kube-addons", config)
    # temporary hard-coding, will be fixed after refactoring of config/render logic
    utils.render_template_directory("./template/web-docker",
                                    "./deploy/web-docker", config)
    get_kubectl_binary(config, args.force)
    render_kube_services(config)
    # render files for originally "specific" nodes (in v2 we use env vars)
    utils.render_template("./template/master/kube-apiserver.yaml",
                          "./deploy/master/kube-apiserver.yaml", config)
    utils.render_template("./template/master/dns-kubeconfig.yaml",
                          "./deploy/master/dns-kubeconfig.yaml", config)
    utils.render_template(
        "./template/master/" + config["premasterdeploymentscript"],
        "./deploy/master/" + config["premasterdeploymentscript"], config)
    utils.render_template(
        "./template/master/" + config["postmasterdeploymentscript"],
        "./deploy/master/" + config["postmasterdeploymentscript"], config)
def render_repairmanager(config):
    utils.render_template_directory("./template/RepairManager",
                                    "./deploy/RepairManager/", config)
def render_docker_images(config, verbose):
    if verbose:
        print("Rendering docker-images from template ...")
    utils.render_template_directory("../docker-images/",
                                    "./deploy/docker-images", config, verbose)
def render_mount(config, args):
    """temp version, ZX MUST update"""
    utils.render_template_directory("./template/storage/auto_share",
                                    "./deploy/storage/auto_share", config)
    gen_mounting_yaml(config)