package main import ( "encoding/json" // "flag" //"fmt" "strconv" "html/template" "time" // "log" "strings" "net/http" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" ) type microservice_details struct{ Deployment_name string `json:"Deployment_name"` Namespace string `json:"Namespace"` Image_tag string } type namespace_details struct { Namespace []string } var templates = template.Must(template.ParseGlob("./*.html")) var label_name string var namespace string var microservice ="/microservice/" var detailed_view="/detailed/" var kube_config_path="/home/saivamsi/.kube/config" var config, _ = clientcmd.BuildConfigFromFlags("", kube_config_path) var clientset, _ = kubernetes.NewForConfig(config) func main() { templates = template.Must(template.ParseGlob("./*.html")) http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("css")))) http.Handle("/jpeg/", http.StripPrefix("/jpeg/", http.FileServer(http.Dir("css")))) http.HandleFunc("/", homepage) http.HandleFunc(microservice, Deployment) http.ListenAndServe(":8801",nil) } func homepage(w http.ResponseWriter, r *http.Request){ namespace,_:=clientset.CoreV1().Namespaces().List(v1.ListOptions{}) namespace_tmp := namespace_details{} for _,s := range namespace.Items{ namespace_tmp.Namespace = append(namespace_tmp.Namespace,s.Name) } templates.ExecuteTemplate(w,"homepage2.html",namespace_tmp) } func Deployment(w http.ResponseWriter, r *http.Request){ name := r.URL.Path[len(microservice):] var array2 []microservice_details deploy,_ := clientset.AppsV1().Deployments(name).List(v1.ListOptions{}) microservice_tmp := microservice_details{} microservice_tmp.Namespace=name for _, d := range deploy.Items { microservice_tmp.Deployment_name =d.Name for _, deployment_containers := range d.Spec.Template.Spec.Containers {
image_tag:= deployment_containers.Image [strings.IndexByte(deployment_containers.Image':')+ 1:]microservice_tmp.Image_tag =图像标签}array2 = append(array2,microservice_tmp)}b,_:= json.Marshal(array2)json.Unmarshal([] byte(b),&array2)
templates.ExecuteTemplate(w ,"microservices2.html",array2) }
如何在部署中使用主页功能的命名空间变量功能。我需要在go模板中使用它们。
我必须在microservices.html中使用该命名空间。我尝试了很多东西,但没有用。
Go is lexically scoped使用块。这意味着在函数ABC()
中声明的任何变量都无法从其他函数Xyz()
中访问。
如果需要这种“共享”,则必须在namespace
的全局范围内定义homepage
变量,或先通过引用homepage
然后再通过deployment
进行传递。