class KuberneteController < ApplicationController require 'open3' layout "base_edu" RC_PATH = "files/k8s/webssh/controller.yaml" SVC_PATH = "files/k8s/webssh/service.yaml" SERVER_URL = "https://106.75.96.108:6443" TOKEN = "c7dd73a7c86992fb" # YAML.load(File.open(rc_PATH)) # REDO:销毁的时候文件一并要销毁 def exec_pod # 生成ymal文件 nod_name = params[:name] path_type = params[:type] rc = YAML.load(File.open(RC_PATH)) svc = YAML.load(File.open(SVC_PATH)) File.new(File.join("files/k8s/#{path_type}", "controller-#{nod_name}.yaml"),"w+") File.new(File.join("files/k8s/#{path_type}", "service-#{nod_name}.yaml"),"w+") rc = change_yaml_info(rc, nod_name, "rc") svc = change_yaml_info(svc, nod_name, "svc") current_rc_path = "files/k8s/#{path_type}/controller-#{nod_name}.yaml" current_svc_path = "files/k8s/#{path_type}/service-#{nod_name}.yaml" open(current_rc_path, 'w') { |f| YAML.dump(rc, f) } open(current_svc_path, 'w') { |f| YAML.dump(svc, f) } # 启动容器 # 删除容器命令 # 如果连接到其它服务器可以使用ssh -t kubenete_rc = "kubectl --server='" + SERVER_URL + "' --token='" + TOKEN + "' --insecure-skip-tls-verify=true " + "create -f " + current_rc_path kubenete_svc = "kubectl --server='" + SERVER_URL + "' --token='" + TOKEN + "' --insecure-skip-tls-verify=true " + "create -f " + current_svc_path logger.info("webss kubenete_rc is" + kubenete_rc) logger.info("webss kubenete_svc is" + kubenete_svc) # stdin, stdout, stderr, wait_thr = Open3.popen3([env,] cmd... [, opts]) # 可以多少秒以后执行 stdin, stdout, stderr = Open3.popen3(kubenete_rc) logger.info("Open3 result is ###"+ stdout.gets) stdin2, stdout2, stderr2 = Open3.popen3(kubenete_svc) logger.info("Open3 result is ###"+ stdout2.gets) render :json => {:status => "good"} end def exec_container pod_name = "webssh-master#{parmas[:myshixun_id]}" git_url = # kubectl exec webssh-master1-gn1ww -c webssh python -v # webssh 容器中执行命令,克隆代码,注意代码存放位置 git_clone = "kubectl --server='#{SERVER_URL}' --token='#{TOKEN}' --insecure-skip-tls-verify=true exec webssh-master1-gn1ww -c webssh clone #{git_url}" stdin, stdout, stderr = Open3.popen3(git_clone) format.js end def new end def create end private # yaml数据处理 # 处理数据类型如下 def change_yaml_info rc, nod_name, type rc['metadata']['name'] = rc['metadata']['name'] + nod_name rc['metadata']['labels']['name'] = rc['metadata']['labels']['name'] + nod_name rc['spec']['selector']['name'] = rc['spec']['selector']['name'] + nod_name if type == "rc" rc['spec']['template']['metadata']['labels']['name'] = rc['spec']['template']['metadata']['labels']['name'] + nod_name elsif type == "svc" rc['spec']['ports'][0]['nodePort'] = rc['spec']['ports'][0]['nodePort'].to_i + nod_name.to_i end return rc end end