通过cm接口获取集群上所有的队列

CDH升级CDP以后,从cm页面上查询用户的队列,总感觉没有以前方便。现在搜索列队名,符合条件的队列会高亮显示,但是如果符合条件的队列不在当前页,你就得一直点那个More Queues,总之用着没有以前顺手了。
因为工作的需要,我查看和修改yarn 队列资源比较频繁,每次通过页面操作多个用户的资源时,我都有一种要砸键盘的冲动。懒,是更新生产力的重要推动力。于是乎,决定动手写一个python脚本,希望借助先进生产力,解放自己的双手……
通过Python的requests模块实现,没有安装的先自行安装。

import requests

确定cm的ip,端口,用户名,密码,集群名称和接口地址。可以用抓包工具获取接口地址,首先定义个queues的类,初始化以上参数

class queues:
#初始化配置
    def __init__(self):
        self.ip = "192.168.0.1"
        self.port = "7180"
        self.username = "admin"
        self.passwd = "admin123"
        self.cluster_name = "Cluster"
        self.login_api = "/cm/login"
        self.login_url = f"http://{self.ip}:{self.port}{self.login_api}"
        self.queue_api = f"/cm/clusters/{self.cluster_name}"
        self.queue_url = f"http://{self.ip}:{self.port}{self.queue_api}"
        self.data = {"username": self.username, "password": self.passwd}
        self.session = requests.Session()
        self.login()

初始化相关参数,接下来就是登录,为了请求之间保持状态,使用了session机制。

def login(self):
    res = self.session.post(self.login_url, data = self.data)
    if res.ok:
        print("Login success")
    else:
        exit("Failed login,check your username or passwd!")

def write_ini(self, file_path, ini_msg, type):
    self.path = file_path
    self.ini_msg = ini_msg
    self.type = type
    with open(f"{self.path}", self.type) as fs:
        fs.write(f"{self.ini_msg}")

登录成功后,我们就可以调用queue接口获取所有的队列,因为我把用户的队列都建在了父队列,也就是root的下面,所以每个用户的队列都是root队列的子队列。

def get_queues(self):
    res = self.session.get(self.queue_url)
    if res.ok:
        data_js = res.json()
        sub_queues = data_js["queues"]
        return sub_queues
def get_users_queue(self, data_js):
    self.data_js = data_js
    queues_data = []
    #清空文件
    self.write_ini(self.data_js, "", "w")
    for i in range(len(self.data_js)):
        if self.data_js[i]["parentQueueName"] == "root":
            queue_name = f"[yarn_{data_js[i]['name'].strip()}]"
            properties = self.data_js[i]["properties"]
            name = self.data_js[i]['queuePath'].strip()
            max_cores = self.data_js[i]['configuredMaxResource']['vcores']
            max_memory = self.data_js[i]['configuredMaxResource']['memory_mb']
            if properties['queueAcls.ADMINISTER_QUEUE'] != " ":
                admin_group = properties['queueAcls.ADMINISTER_QUEUE'].strip()
            else:
                user = self.data_js[i]['name'].split("_")[0].strip()
                admin_group = f"{user}_g"
            if properties['queueAcls.SUBMIT_APP'] != " ":
                submit_group = properties['queueAcls.SUBMIT_APP'].strip()
            else:
                user = self.data_js[i]['name'].split("_")[0].strip()
                submit_group = f"{user}_g"
            #生成写入ini文件的相关内容
            ini_msg = f"{queue_name}\n" \
                      f"name = {name}\n" \
                      f"min_cores = {min_cores}\n" \
                      f"min_memory = {min_memory}\n" \
                      f"max_cores = {max_cores}\n" \
                      f"max_memory = {max_memory}\n" \
                      f"admin_group = {admin_group}\n" \
                      f"submit_group = {submit_group}\n"
            print(f"开始写入{queue_name}")
            self.write_ini(self.file_path, ini_msg, "a")
                     

                

以上的登录接口和queues 接口可以在登录和操作queues的时候用抓包工具抓取。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值