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)])
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)
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)