公司阿里云迁移华为云,接口调用员老叶重新对接了下,用于jenkisn系统启停负载均衡器,实现滚动更新,就这样用吧。
传入IP就是修改传入IP在负载均衡的权重,不传就获取本机eth0的ip
权重阿里默认是100 华为是给1 刚好迁移过来就用100了
- start 设置权重100
- deploy 设置权重10 用于小量测试权重想怎么改都行
- stop 设置权重为0 没请求开始更新应用
- status 查询本机或者其他机子 不传IP查询本机所在后端服务区组的信息
使用效果截图:
查询当前主机所属组的状态 故障在ecs停负载均衡更方便
安装华为的依赖包:
pip3 install huaweicloudsdkelb
# coding: utf-8
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkelb.v2.region.elb_region import ElbRegion
from huaweicloudsdkelb.v2 import *
import json
import sys
import netifaces
#填写Access Key Id和Secret Access Key
ak = ""
sk = ""
credentials = BasicCredentials(ak, sk)
def modify(ip, weight):
client = ElbClient.new_builder() \
.with_credentials(credentials) \
.with_region(ElbRegion.value_of("cn-south-1")) \
.build()
request = ListPoolsRequest()
response = client.list_pools(request)
for info in json.loads(str(response))["pools"]:
pool_id = info['id']
pool_name = info['name']
try:
request = ListMembersRequest()
request.pool_id = pool_id
response = client.list_members(request)
for info in json.loads(str(response))['members']:
members_ip = info['address']
member_id = info['id']
member_weight = info['weight']
if members_ip == ip:
try:
request = UpdateMemberRequest()
request.member_id = member_id
request.pool_id = pool_id
memberUpdateMemberReq = UpdateMemberReq(
admin_state_up=True,
weight=weight
)
request.body = UpdateMemberRequestBody(
member=memberUpdateMemberReq
)
response = client.update_member(request)
members_ip = json.loads(str(response))[
'member']["address"]
new_weight = json.loads(str(response))[
'member']["weight"]
print(
f"GroupName:{pool_name} Ipaddr:{members_ip} Weight:{member_weight} -> {new_weight}")
except exceptions.ClientRequestException as e:
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
sys.exit(1)
except exceptions.ClientRequestException as e:
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
sys.exit(1)
def status(ip):
client = ElbClient.new_builder() \
.with_credentials(credentials) \
.with_region(ElbRegion.value_of("cn-south-1")) \
.build()
request = ListPoolsRequest()
response = client.list_pools(request)
for info in json.loads(str(response))["pools"]:
pool_id = info['id']
pool_name = info['name']
pool_info = []
try:
request = ListMembersRequest()
request.pool_id = pool_id
response = client.list_members(request)
for info in json.loads(str(response))['members']:
members_ip = info['address']
member_weight = info['weight']
if ip == members_ip:
print(
f"GroupName:{pool_name} Ipaddr:{members_ip} Weight:{member_weight}")
except exceptions.ClientRequestException as e:
print(e.status_code)
print(e.request_id)
print(e.error_code)
print(e.error_msg)
sys.exit(1)
def main():
try:
if sys.argv[1] in ['status', 'Status', 'STATUS']:
try:
ip = sys.argv[2]
status(ip)
except IndexError:
ip = netifaces.ifaddresses(
'eth0')[netifaces.AF_INET][0]['addr']
status(ip)
elif sys.argv[1] in ['start', 'Start', 'START', 'deploy']:
if sys.argv[1] == 'deploy':
try:
ip = sys.argv[2]
except IndexError:
ip = netifaces.ifaddresses(
'eth0')[netifaces.AF_INET][0]['addr']
weight = 10
modify(ip, weight)
else:
try:
ip = sys.argv[2]
except IndexError:
ip = netifaces.ifaddresses(
'eth0')[netifaces.AF_INET][0]['addr']
weight = 100
modify(ip, weight)
elif sys.argv[1] in ['stop', 'Stop', 'STOP']:
try:
ip = sys.argv[2]
except IndexError:
ip = netifaces.ifaddresses(
'eth0')[netifaces.AF_INET][0]['addr']
weight = 0
modify(ip, weight)
else:
print(
"The 'start' localhost loadbalance Weight set to 100\nThe 'deploy' localhost loadbalance Weight set to 10\nThe 'stop' localhost loadbalance set to 0\n\nExamples:\npython3 huawei_elb.py status|start|deploy|stop\nOperation on other examples:\npython3 huawei_elb.py start|stop 192.168.*.*")
except IndexError:
print(
"The 'start' localhost loadbalance Weight set to 100\nThe 'deploy' localhost loadbalance Weight set to 10\nThe 'stop' localhost loadbalance set to 0\n\nExamples:\npython3 huawei_elb.py status|start|deploy|stop\nOperation on other examples:\npython3 huawei_elb.py start|stop 192.168.*.*")
if __name__ == "__main__":
main()