slb_scan.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import sys
  4. import socket
  5. import json
  6. import docker
  7. import time
  8. from aliyunsdkcore.client import AcsClient
  9. from aliyunsdkcore.acs_exception.exceptions import ClientException
  10. from aliyunsdkcore.acs_exception.exceptions import ServerException
  11. from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
  12. from aliyunsdkslb.request.v20140515.AddBackendServersRequest import AddBackendServersRequest
  13. AccessKey = 'LTAIuPbTPL3LDDKN'
  14. AccessSecret = 'ORcNedKwWuwVtcq4IRFtUDZgS0b1le'
  15. RegionId = 'cn-hangzhou'
  16. client = AcsClient (AccessKey, AccessSecret, RegionId)
  17. Host = socket.gethostname ()
  18. slb_id = {
  19. 'test':'lb-bp1r9duz4k7z0riz9zs3n'
  20. }
  21. docker_name = {'test':'vlogapi',
  22. 'vlogapi':'vlogapi',
  23. 'longvideoapi':'vlogapi',
  24. 'commonapi':'commonapi'
  25. }
  26. health_check_name = {'test':'longvideoapi',
  27. 'vlogapi':'longvideoapi',
  28. 'longvideoapi':'longvideoapi',
  29. 'commonapi':'commonapi'
  30. }
  31. def getIpaddr():
  32. try:
  33. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  34. s.connect(('8.8.8.8', 80))
  35. ipaddr = s.getsockname()[0]
  36. finally:
  37. s.close()
  38. return ipaddr
  39. def getTag():
  40. ipadd = []
  41. ipadd.append(getIpaddr())
  42. request = DescribeInstancesRequest()
  43. request.set_accept_format('json')
  44. request.set_PrivateIpAddresses(ipadd)
  45. response = client.do_action_with_exception(request)
  46. print(str(response, encoding='utf-8'))
  47. res = json.loads(response)
  48. tag = res["Instances"]["Instance"][0]["Tags"]["Tag"][0]["TagValue"]
  49. return tag
  50. def run(apps):
  51. i_name = docker_name.get(apps)
  52. images = "registry-vpc.cn-hangzhou.aliyuncs.com/stuuudy/" + i_name + ":latest"
  53. client = docker.DockerClient(base_url='tcp://localhost:2375' ,timeout=60 )
  54. c_name = docker_name.get(apps)
  55. try:
  56. client.containers.run(images,restart_policy={"Name": "always", "MaximumRetryCount": 5},name=c_name,cap_add="SYS_PTRACE",network_mode="host")
  57. except Exception as e:
  58. print(e)
  59. def healthCheck(apps):
  60. healcheck_apps = health_check_name.get(apps)
  61. health_url = 'http://localhost:8182/%s/test' %(healcheck_apps)
  62. print(health_url)
  63. try:
  64. http_code = requests.get(health_url).status_code
  65. return http_code
  66. except Exception as e:
  67. print(e)
  68. def getInstanceId():
  69. request = DescribeInstancesRequest()
  70. request.set_accept_format('json')
  71. ipaddr = []
  72. request.set_PrivateIpAddresses(ipaddr.append(getIpaddr()))
  73. response = client.do_action_with_exception(request)
  74. result = json.loads(response)
  75. instanceId = result["Instances"]["Instance"][0]["InstanceId"]
  76. return instanceId
  77. def addBackendServers(apps):
  78. request = AddBackendServersRequest()
  79. request.set_accept_format('json')
  80. ipaddr = getIpaddr()
  81. instanceId = getInstanceId()
  82. slb = slb_id.get(apps)
  83. request.set_LoadBalancerId(slb)
  84. request.set_BackendServers([{ "ServerId": instanceId, "Weight": "100", "Type": "ecs", "ServerIp": ipaddr}])
  85. response = client.do_action_with_exception(request)
  86. print(str(response, encoding='utf-8'))
  87. if __name__ == "__main__":
  88. apps = getTag()
  89. run(apps)
  90. time.sleep(60)
  91. while times < 30:
  92. try:
  93. http_code = healthCheck(apps)
  94. if http_code == 200:
  95. break
  96. else:
  97. time.sleep(2)
  98. times += 1
  99. except Exception as e:
  100. print(e)