python 修改华为云负载均衡权重

公司阿里云迁移华为云,接口调用员老叶重新对接了下,用于jenkisn系统启停负载均衡器,实现滚动更新,就这样用吧。

传入IP就是修改传入IP在负载均衡的权重,不传就获取本机eth0的ip
权重阿里默认是100 华为是给1 刚好迁移过来就用100了

  1. start 设置权重100
  2. deploy 设置权重10 用于小量测试权重想怎么改都行
  3. stop 设置权重为0 没请求开始更新应用
  4. 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值