使用CDH的api接口对cdh服务进行滚动重启

因为企业版的licence的过期了。无法在界面上滚动重启。同时cdh的大数据服务对用户都是黑盒。无法直接操作。写了个py脚本实现此功能

import time
import requests
import json
import sys
#可操作的服务列表
server_list=['hdfs','yarn','zookeeper','hbase','spark_on_yarn','hive','impala','sentry','hue','kafka','solr']
#可操作的动作
operator_list=['start','stop','restart']
#服务器id
hostid = []
#服务器上的角色
host_role = []
#用户名
user = 'admin'
#密码
passwd = 'admin'
urls = 'http://192.168.1.1:7180'
#集群名称
cluster = 'TEST_pro'
#执行脚本跟随的第一个选项,在可操作的服务列表选择
role_name=sys.argv[1]
if role_name not in server_list:
    print('能操作的服务不存在,只能在'+server_list+'中选择')
    exit()
#执行脚本跟随的第一个选项,在可操作的动作列表选择
command=sys.argv[2]
if command not in operator_list:
    print('能操作的动作不存在,只能在'+operator_list+'中选择')
    exit()
#用来匹配状态
if operator_list =='start':
    operator_status='STARTED'
if operator_listl == 'restart':
    operator_status = 'STARTED'
if operator_list == 'stop':
    operator_status = 'STOPPED'

all_info = requests.get(urls + '/api/v33/hosts', auth=(user, passwd))
hosts = json.loads(all_info.text)
f = dict(hosts)
f2 = f['items']
# 取到所有的主机id,用主机id获取role_id
for i in f2:
    hostid.append(i['hostId'])
for server in hostid:
    roles = requests.get(urls+'/api/v33/hosts/'+server, auth=(user, passwd))
    role = json.loads(roles.text)
    f = dict(role)
    f2 = f['roleRefs']
    for i in f2:
        host_role.append(i['roleName'])

character ='GATEWAY'
# 去掉gateway
host_role = [item for item in host_role if character not in item]
#取出需要的服务role
use_role= [item for item in host_role if role_name in item]
print(role_name+'有'+str(len(use_role))+'个节点')

for service in use_role:
    service =[service]

    def restart():
        print('正在操作'+str(service))
        url = urls + '/api/v33/clusters/' + cluster + '/services/'+ role_name + '/roleCommands/'+ command
        header ={
            'Content-Type' : 'application/json',
            'Accept' : 'application/json'
        }
        auth =(user, passwd)
        payload = {
            'items': service
        }
        response = requests.post(
            url=url,
            headers=header,
            auth=auth,
            data=json.dumps(payload)
        ).json()

    restart()
    service = str(service[0])

    def status_check():
        role_status = requests.get(
            urls + '/api/v33/clusters/'+ cluster + '/services/'+ role_name + '/roles/'+ service,auth=(user,passwd))
        role_status = json.loads(role_status.text)
        role_status = dict(role_status)
        return (role_status['roleState'])

    while status_check() != operator_status:
        time.sleep(30)
    else:
        continue

相关推荐

  1. 使用CDHapi接口cdh服务进行滚动

    2024-01-24 00:30:03       59 阅读
  2. CDH装Kafka

    2024-01-24 00:30:03       38 阅读
  3. CDN加速:社会服务必备利器

    2024-01-24 00:30:03       58 阅读
  4. 监控服务进程并自动 monitor

    2024-01-24 00:30:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 00:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 00:30:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 00:30:03       82 阅读
  4. Python语言-面向对象

    2024-01-24 00:30:03       91 阅读

热门阅读

  1. 玩转正则表达式

    2024-01-24 00:30:03       54 阅读
  2. python学习笔记10(循环结构2)

    2024-01-24 00:30:03       66 阅读
  3. 【AI】深度学习在编码中的应用(7)

    2024-01-24 00:30:03       58 阅读
  4. Qt系统托盘的学习

    2024-01-24 00:30:03       65 阅读
  5. 第三章:交换两个变量的值

    2024-01-24 00:30:03       49 阅读
  6. LeetCode-题目整理【3】:买卖股票的最佳时机

    2024-01-24 00:30:03       49 阅读
  7. 【面试】-科大讯飞日常实习面试

    2024-01-24 00:30:03       54 阅读
  8. ImageMagick使用手册

    2024-01-24 00:30:03       64 阅读