Python3.7调用API批量添加资产主机到Jumpserver

用读取csv的方式批量添加jumpserver中的管理用户、系统用户、资产节点(有节点的资产添加到当前节点)
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import json
import pymysql
import requests
import csv
from itsdangerous import TimedJSONWebSignatureSerializer

token = 'asdfghjklmc9a3901easd678qweasdasdsa'
host = '192.168.8.8'
# secret key
secret_key = '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
# DB
DB_HOST = '192.168.8.8'
DB_PORT = 3306
DB_USER = 'jumpserver'
DB_PASSWORD = 'passwd'
DB_NAME = 'jumpserver'
def dbConn():
    try:
        conn = pymysql.connect(
            host=DB_HOST,
            port=DB_PORT,
            user=DB_USER,
            passwd=DB_PASSWORD,
            db=DB_NAME,
            charset='utf8',
        )
    except Exception as e:
        print(e)
    return conn
# jumpserver 管理用户,系统用户加密方法
def sign_t(value, expires_in=3600):
    s = TimedJSONWebSignatureSerializer(secret_key, expires_in=expires_in)
    return str(s.dumps(value), encoding="utf8")
headers = {'Authorization': 'token ' + token, 'content-type': "application/json"}
#添加系统用户API
system_userurl = "http://{host}/api/assets/v1/system-user/".format(host=host)
#添加管理用户API
admin_userurl = "http://{host}/api/assets/v1/admin-user/".format(host=host)
#添加资产/用户节点API
nodesurl = "http://{host}/api/assets/v1/nodes/".format(host=host)
#添加资产/主机API
assetsBulkurl = "http://{host}/api/assets/v1/assets-bulk/".format(host=host)
for data_options in csv.reader(open("/data/host.csv")):
    print(data_options[3])
    # 可显示的管理、系统用户名字
    sysname = data_options[0] + '_baseuser'
    adminname = data_options[0] + '_root'
    # 添加系统用户
    system_userData = {
        "name": sysname,
        "username": 'baseuser',
        "priority": 10,
        "protocol": "ssh",
        "become": 'true',
        "auto_push": 'false',
        "sudo": "/bin/whoami",
        "shell": "/bin/bash",
        "password": data_options[2]
    }
    # 添加管理用户
    admin_userData = {
        "name": adminname,
        "username": 'root',
        "comment": "string",
        "created_by": "string",
        "become": 'true',
        "become_method": "sudo",
        "become_user": "root",
        "password": data_options[1]
    }
    # 管理用户、系统用户
    conn = dbConn()
    cursor = conn.cursor()
    system_userData = json.dumps(system_userData)
    admin_userData = json.dumps(admin_userData)
    sqladminname = data_options[0] + '_root'
  #判断管理用户是否存在
    sql_ifadminuser = ('SELECT name FROM jumpserver.assets_adminuser WHERE name = %s')
    cursor.execute(sql_ifadminuser, (sqladminname))
    if cursor.rowcount == 0:
        admin_userreq = requests.post(admin_userurl, headers=headers, data=admin_userData)
        admin_userreq = json.loads(admin_userreq.text)
        print(admin_userreq)
    else:
        print(adminname+' 管理用户已存在,跳过')
  #判断系统用户是否存在
    sql_ifsysuser = ('SELECT name FROM jumpserver.assets_adminuser WHERE name = %s')
    cursor.execute(sql_ifsysuser, (sysname))
    if cursor.rowcount == 0:
        system_userreq1 = requests.post(system_userurl, headers=headers, data=system_userData)
        system_userreq = json.loads(system_userreq1.text)
        print(system_userreq)
    else:
        print(sysname+' 系统用户已存在,跳过')
    conn.commit()
    # 打印密码
    print(data_options[1], data_options[2])
  
    adminUserPasswd = data_options[1]
    admin_passwordValue = sign_t(adminUserPasswd)
    admin_nameValue = adminname
    sysUserPasswd = data_options[2]
    sys_passwordValue = sign_t(sysUserPasswd)
    sys_nameValue = sysname
    # 判断节点是否存在
    conn = dbConn()
    cursor = conn.cursor()
    sql_adminid = ('select id from jumpserver.assets_adminuser where name = %s')
    cursor.execute(sql_adminid, (adminname))
    adminID = cursor.fetchall()[0][0]
    print(adminID)
    print('--------------')
    # 查找用户节点ID,判断节点是否存在
    datausrname = data_options[3]
    user = '%' + datausrname + '%'
    sql_FindNodeID = ('select id from jumpserver.assets_node where value like %s')
    cursor.execute(sql_FindNodeID, (user))
    sql_UserNodeID = cursor.fetchall()
    if cursor.rowcount == 0:
        print(data_options[3] + ' —— 用户节点不存在,创建新的节点')
        nodename = '生产-' + data_options[3] + '资产'
        # 添加节点信息
        nodesData = {
            "key": '0:179:',
            "value": nodename
        }
        nodesData = json.dumps(nodesData)
        nodesreq = requests.post(nodesurl, headers=headers, data=nodesData)
        nodesreq = json.loads(nodesreq.text)
        print(nodesreq)
        print(data_options[3])
        conn = dbConn()
        cursor = conn.cursor()
        # 获取nodeID
        datausrname = data_options[3]
        nameusernodeid = '%' + datausrname + '%'
        sql_nodeid = ('select id from jumpserver.assets_node where value like %s')
        cursor.execute(sql_nodeid, (nameusernodeid))
        nodeID = cursor.fetchall()[0][0]
        print(cursor.rowcount)
        print('---------------')
        HostIP = data_options[0]
        sql_hostid = ('select id from jumpserver.assets_asset where ip = %s')
        cursor.execute(sql_hostid, (HostIP))
        print('打印HOSTIP')
        print(cursor.rowcount)
        HostID = cursor.fetchall()
        if cursor.rowcount == 0:
            print(data_options[0] + ' 在jumpserver中不存在,添加资产')
            bulkData = {
                "ip": data_options[0],
                "hostname": data_options[0],
                "port": 22,
                "is_active": '1',
                "admin_user": adminID,
                "nodes": [
                    nodeID
                ]
            }
            # 添加资产/添加主机
            bulkData = json.dumps(bulkData)
            assetsBulkreq = requests.post(assetsBulkurl, headers=headers, data=bulkData)
            assetsBulkreq = json.loads(assetsBulkreq.text)
            print(assetsBulkreq)
            print(data_options[1], data_options[3])
        else:
            print(data_options[0] + ' 已存在,添加已有资产到用户节点')
            UseHostID = HostID[0][0]
            print(UseHostID)
            sql_InsertHost = ('INSERT INTO jumpserver.assets_asset_nodes (asset_id,node_id) VALUE (%s,%s)')
            cursor.execute(sql_InsertHost, (UseHostID, nodeID))
            print(cursor.rowcount)
    else:
        print(data_options[3] + ' —— 用户节点已存在,取现有节点创建')
        HostIP = data_options[0]
        sql_hostid = ('select id from jumpserver.assets_asset where ip = %s')
        cursor.execute(sql_hostid, (HostIP))
        print('打印HostIP--------')
        print(cursor.rowcount)
        HostID = cursor.fetchall()
        if cursor.rowcount == 0:
            print(data_options[0] + ' 在jumpserver中不存在,添加资产')
            datausrname = data_options[3]
            nameusernodeid = '%' + datausrname + '%'
            print(nameusernodeid)
            sql_nodeid = ('select id from jumpserver.assets_node where value like %s')
            cursor.execute(sql_nodeid, (nameusernodeid))
            nodeID2 = cursor.fetchall()[0][0]
            print(cursor.rowcount)
            print(nodeID2)
            print('---------------')
            bulkData = {
                "ip": data_options[0],
                "hostname": data_options[0],
                "port": 22,
                "is_active": '1',
                "admin_user": adminID,
                "nodes": [
                    nodeID2
                ]
            }
            # 添加资产/添加主机
            bulkData = json.dumps(bulkData)
            assetsBulkreq = requests.post(assetsBulkurl, headers=headers, data=bulkData)
            assetsBulkreq = json.loads(assetsBulkreq.text)
            print(assetsBulkreq)
            print(data_options[1], data_options[3])
        else:
            print(data_options[0] + ' 已存在,添加已有资产到用户节点')
            # 获取nodeID
            datausrname = data_options[3]
            nameusernodeid = '%' + datausrname + '%'
            sql_nodeid = ('select id from jumpserver.assets_node where value like %s')
            cursor.execute(sql_nodeid, (nameusernodeid))
            NodeID3 = cursor.fetchall()
            print(cursor.rowcount)
            UseHostID = HostID[0][0]
            UseNodeID = NodeID3[0][0]
            print(UseHostID,UseNodeID)
            sql_InsertHost = ('INSERT INTO jumpserver.assets_asset_nodes (asset_id,node_id) VALUE (%s,%s)')
            cursor.execute(sql_InsertHost, (UseHostID, UseNodeID))
            print(cursor.rowcount)
    print('--------用户节点ID-------')
    print(sql_UserNodeID)
    print(user)
    print('------------------------')
    conn.commit()
    # 添加管理用户密码
    sql_adminUpdate = ('update jumpserver.assets_adminuser set _password = %s where name = %s')
    cursor.execute(sql_adminUpdate, (admin_passwordValue, admin_nameValue))
    print(cursor.rowcount)
    # 添加系统用户密码
    sql_sysUpdate = ('update jumpserver.assets_systemuser set _password = %s where name = %s')
    cursor.execute(sql_sysUpdate, (sys_passwordValue, sys_nameValue))
    print(cursor.rowcount)
    conn.commit()
cursor.close()
conn.close()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容