slb.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. // "os"
  6. "encoding/json"
  7. "github.com/aliyun/alibaba-cloud-sdk-go/services/slb"
  8. "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
  9. )
  10. const accessKeyId = "LTAIuPbTPL3LDDKN"
  11. const accessSecret = "ORcNedKwWuwVtcq4IRFtUDZgS0b1le"
  12. func GetOutBoundIP()(ip string, err error) {
  13. addrs, err := net.InterfaceAddrs()
  14. if err != nil {
  15. fmt.Println(err)
  16. }
  17. for _, address := range addrs {
  18. // 检查ip地址判断是否回环地址
  19. if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
  20. if ipnet.IP.To4() != nil {
  21. ip = ipnet.IP.String()
  22. }
  23. }
  24. }
  25. return ip, err
  26. }
  27. func GetInstancdFromSlb() (res [] string, err error) {
  28. client, err := slb.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
  29. request := slb.CreateDescribeLoadBalancersRequest()
  30. request.Scheme = "https"
  31. request.Tags = "[{\"tagKey\":\"app\",\"tagValue\":\"longvideoapi\"}]"
  32. response, err := client.DescribeLoadBalancers(request)
  33. if err != nil {
  34. fmt.Println(err.Error())
  35. }
  36. loadBalancers := response.LoadBalancers.LoadBalancer
  37. for i := 0; i < len(loadBalancers); i++ {
  38. var loadBalancer = loadBalancers[i].LoadBalancerId
  39. res = append(res, loadBalancer)
  40. }
  41. // loadBalancer := responres []string,se.DescribeLoadBalancersResponse
  42. // res = loadBalancer.String()
  43. return res , err
  44. }
  45. func GetInastanceNameFromEcs(ipaddrs string)(name string , err error) {
  46. client, err := ecs.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
  47. request := ecs.CreateDescribeInstancesRequest()
  48. request.Scheme = "https"
  49. fmt.Println("['" + ipaddrs + "'']")
  50. request.PrivateIpAddresses = "['" + ipaddrs + "']"
  51. response, err := client.DescribeInstances(request)
  52. if err != nil {
  53. fmt.Print(err.Error())
  54. }
  55. if len(response.Instances.Instance) >0 {
  56. name= response.Instances.Instance[0].InstanceId
  57. } else {
  58. name = "Noname"
  59. }
  60. return name ,err
  61. }
  62. func SetBackendServers(loadbalancer, backendServices string) (res string, err error) {
  63. client, err := slb.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)
  64. request := slb.CreateSetBackendServersRequest()
  65. request.Scheme = "https"
  66. request.LoadBalancerId = loadbalancer
  67. request.BackendServers = backendServices
  68. response, err := client.SetBackendServers(request)
  69. if err != nil {
  70. fmt.Print(err.Error())
  71. }
  72. fmt.Printf("response is %#v\n", response)
  73. return
  74. }
  75. func main(){
  76. ipaddr, err := GetOutBoundIP()
  77. if err != nil {
  78. fmt.Println(err)
  79. }
  80. LoadbalancersIDs, err:= GetInstancdFromSlb()
  81. InstanceID , err := GetInastanceNameFromEcs(ipaddr)
  82. backendServices := make(map[string]string)
  83. backendServices["ServerId"] = InstanceID
  84. backendServices["Weight"] = "100"
  85. backend_json, _ := json.Marshal(backendServices)
  86. backend_string := "[" + string(backend_json) + "]"
  87. fmt.Printf(backend_string)
  88. if len(LoadbalancersIDs) >0 {
  89. for _, LoadbalancersID := range LoadbalancersIDs {
  90. _, err = SetBackendServers(LoadbalancersID, backend_string)
  91. if err != nil {
  92. fmt.Print(err.Error())
  93. }
  94. }
  95. }
  96. // fmt.Println(response)
  97. }