package k8s import ( "fmt" v1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" "github.com/spf13/cast" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/constant" "k8s.io/apimachinery/pkg/util/intstr" "log" "testing" "time" ) var svc PrometheusRule var obj v1.PrometheusRule var AlertDefLabels = map[string]string{ "app": "prometheus", "app.bd-apaas.com/cluster-component": "monitoring", "prometheus-operator": "monitoring", "release": "beagle-prometheus", } func init() { conf.Options = &conf.Config{} conf.Options.AweRestURL = "https://cloud.wodcloud.com/awecloud/rest" conf.Options.KubernetesToken = "380e3557499a13c4ec4aa11d7456bb45ef2303c1" header := make(map[string]string) header["Authorization"] = "Bearer " + conf.Options.KubernetesToken svc = PrometheusRule{Header: header} obj = v1.PrometheusRule{} obj.Name = "beagle-prometheus-operation-api-rules-101" obj.Namespace = "beagle-monitoring" obj.Labels = AlertDefLabels } func TestRule(t *testing.T) { group := v1.RuleGroup{} group.Name = "demo-group-1m" rule := v1.Rule{} rule.Alert = "kubernetes启动状态" rule.Annotations = make(map[string]string) rule.Annotations["value"] = "{{ $value }}" rule.Annotations["message"] = "启动了" rule.Expr = intstr.FromString(`up{endpoint="https", instance="192.168.1.244:6443", job="apiserver", namespace="default", service="kubernetes"} == 1`) ruleFor := v1.Duration("1m") rule.For = &ruleFor rule.Labels = make(map[string]string) rule.Labels["severity"] = "warning" rule.Labels["severity_name"] = "一般风险" rule.Labels["risk_level"] = cast.ToString(constant.RiskLevelLow) rule.Labels["source"] = "so-operation-api" rule.Labels["alert_id"] = "101" group.Rules = append(group.Rules, rule) obj.Spec.Groups = append(obj.Spec.Groups, group) err := svc.Create(&obj) if err != nil { fmt.Println("添加失败" + err.Error()) } else { fmt.Println("添加成功") } } func TestGet(t *testing.T) { // 获取对象 ruleObj, err := svc.Get(obj.Namespace, obj.Name) if err != nil { fmt.Println("获取失败" + err.Error()) } else { fmt.Println("获取成功") } log.Printf("ruleObj:%+v\n", ruleObj) } func TestUpdate(t *testing.T) { ruleObj, err := svc.Get(obj.Namespace, obj.Name) if err != nil { fmt.Println("获取失败" + err.Error()) } else { fmt.Println("获取成功") } // 更新 ruleObj.Name = "galileo-101" ruleObj.Spec.Groups[0].Rules[0].Alert = "请求次数大于10" ruleObj.Spec.Groups[0].Name = "2分钟组" ruleFor := v1.Duration("2m") ruleObj.Spec.Groups[0].Rules[0].For = &ruleFor ruleObj.Spec.Groups[0].Rules[0].Expr = intstr.FromString(`up{endpoint="https", instance="192.168.1.244:6443", job="apiserver", namespace="default", service="kubernetes"} == 0`) err = svc.Update(ruleObj) if err != nil { fmt.Println("更新失败" + err.Error()) } else { fmt.Println("更新成功") } } func TestDelete(t *testing.T) { // 删除 time.Sleep(time.Second * 10) err := svc.Delete(obj.Namespace, obj.Name) if err != nil { fmt.Println("删除失败" + err.Error()) } else { fmt.Println("删除成功") } }