panwang 2 lat temu
rodzic
commit
25bf2da8e2
1 zmienionych plików z 145 dodań i 0 usunięć
  1. 145 0
      longvideoapi/client/slb.go

+ 145 - 0
longvideoapi/client/slb.go

@@ -0,0 +1,145 @@
+package main
+
+import (
+	"fmt"
+	"net"
+    // "os"
+    "encoding/json"
+    "github.com/aliyun/alibaba-cloud-sdk-go/services/slb"
+    "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
+
+
+   
+)
+
+const accessKeyId = "LTAIuPbTPL3LDDKN"
+const accessSecret = "ORcNedKwWuwVtcq4IRFtUDZgS0b1le"
+
+
+
+func GetOutBoundIP()(ip string, err error)  {
+    addrs, err := net.InterfaceAddrs()
+    if err != nil {
+        fmt.Println(err)
+    }
+    for _, address := range addrs {
+
+        // 检查ip地址判断是否回环地址
+        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+            if ipnet.IP.To4() != nil {
+                ip = ipnet.IP.String()
+            }
+
+        }
+    }
+    return  ip, err
+
+}
+
+func GetInstancdFromSlb() (res [] string, err  error) {
+    client, err := slb.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
+    request := slb.CreateDescribeLoadBalancersRequest()
+    request.Scheme = "https"
+    request.Tags = "[{\"tagKey\":\"app\",\"tagValue\":\"longvideoapi\"}]"
+    response, err := client.DescribeLoadBalancers(request)
+
+	if err != nil {
+		fmt.Println(err.Error())       
+        
+	}
+    loadBalancers := response.LoadBalancers.LoadBalancer
+    for i := 0; i < len(loadBalancers); i++ {
+        var loadBalancer = loadBalancers[i].LoadBalancerId
+        res = append(res, loadBalancer)
+    }
+    // loadBalancer := responres  []string,se.DescribeLoadBalancersResponse
+    // res = loadBalancer.String()
+    return   res , err
+}
+
+func GetInastanceNameFromEcs(ipaddrs string)(name string , err error) {
+    client, err := ecs.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
+
+    request := ecs.CreateDescribeInstancesRequest()
+    request.Scheme = "https"
+    fmt.Println("['" + ipaddrs + "'']")
+
+    request.PrivateIpAddresses = "['" + ipaddrs + "']"
+
+    response, err := client.DescribeInstances(request)
+    if err != nil {
+        fmt.Print(err.Error())
+    }
+    if  len(response.Instances.Instance) >0 {
+        name= response.Instances.Instance[0].InstanceId
+
+    } else {
+        name = "Noname"
+    }
+
+    return name ,err 
+}
+
+func SetBackendServers(loadbalancer, backendServices string) (res string, err error) {
+
+
+    client, err := slb.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
+    request := slb.CreateSetBackendServersRequest()
+    request.Scheme = "https"
+
+    request.LoadBalancerId = loadbalancer
+    request.BackendServers = backendServices
+    response, err := client.SetBackendServers(request)
+
+
+    if err != nil {
+        fmt.Print(err.Error())
+    }
+    fmt.Printf("response is %#v\n", response)
+
+    return
+
+}
+
+func  main(){
+	ipaddr, err := GetOutBoundIP()
+    if err != nil {
+        fmt.Println(err)
+    }
+
+    LoadbalancersIDs, err:= GetInstancdFromSlb()
+    InstanceID , err := GetInastanceNameFromEcs(ipaddr)
+
+    backendServices := make(map[string]string)
+    backendServices["ServerId"] = InstanceID
+    backendServices["Weight"] = "100"
+    backend_json, _ := json.Marshal(backendServices)
+    backend_string := "[" + string(backend_json) + "]"
+
+    fmt.Printf(backend_string)
+
+    if len(LoadbalancersIDs) >0 {
+
+        for _, LoadbalancersID := range LoadbalancersIDs {
+            _, err = SetBackendServers(LoadbalancersID, backend_string)
+
+            if err != nil {
+            fmt.Print(err.Error())
+            }
+
+
+        }
+    }
+
+
+
+
+
+
+
+
+
+    // fmt.Println(response)
+
+
+}