头图

jumpserver api创建资产

jumpserver api

domain+/api/docs

image.png

image.png

python

import requests, json

jms_url = 'http://jumpserver.xixxxshu.com'
token = 'exxxxxxxxxxxxxxxxxxxxxxxxx'


headers = {
    "Authorization": 'Token ' + token,
    "Content-Type": "application/json",
    "Accept": "application/json",
    'X-JMS-ORG': '4xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}


# 获取所有用户
def get_user_all():
    url = jms_url + '/api/v1/users/users/'
    response = requests.get(url, headers=headers)
    user_list = json.loads(response.text)
    count = 1
    # print(user_list)
    for i in user_list:
        count += 1
        print(i)
    print(count)


#
# # 获取监控指标
# def get_prometheus_metric():
#     url = jms_url + "/api/v1/prometheus/metrics/"
#     response = requests.get(url, headers=headers)
#     print(response.text)
#     return response.text


# 获取所有资产节点
def get_node_all():
    url = jms_url + "/api/v1/assets/nodes/"
    response = requests.get(url, headers=headers)
    node_list = json.loads(response.text)
    count = 1
    for i in node_list:
        count += 1
        print(i)
    print(count)
    return response.json()


# 查看当前token(即admin)的所有资产
def get_asset_all():
    url = jms_url + "/api/v1/assets/assets/"
    response = requests.get(url, headers=headers)
    node_list = json.loads(response.text)
    count = 1
    for i in node_list:
        count += 1
        print(i)
    print(count)
    return response.json()


###################################################################################################
# 创建资产节点
def assets_nodes_create(node_name):
    node_data = {
        "value": node_name
    }
    url = jms_url + "/api/v1/assets/nodes/"
    node_info = get_node_info(node_name)
    if node_info:  # 根据node_name去查询,如果查到了说明已经有了。
        print("{name}已存在, id: {id}".format(name=node_name, id=node_info[0]["id"]))
    else:
        data = json.dumps(node_data)
        resp = requests.post(url, headers=headers, data=data)
        return resp.json()


def get_assets_list_by_ip(ip):
    url = jms_url + "/api/v1/assets/assets/"
    response = requests.get(url, headers=headers, params={
        "ip": ip
    })
    return response.json()


# 查看资产节点信息
def get_node_info(node_name):
    url = jms_url + "/api/v1/assets/nodes/"
    response = requests.get(url, headers=headers, params={
        "value": node_name
    })
    print(response.text)
    return response.json()


def asset_create(ip, hostname, node_id, comment):
    asset_Data = {
        "ip": ip,
        "hostname": hostname,
        "platform": "Linux",
        "protocol": "ssh",
        "port": 22,
        "is_active": True,
        "nodes": [
            node_id
        ],
        "org_id": "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "org_name": "Ownerx辰",
        "comment": comment
    }
    url = jms_url + "/api/v1/assets/assets/"
    data = json.dumps(asset_Data)
    response = requests.post(url, headers=headers, data=data)
    print(json.loads(response.text))


# 运行创建服务器资产
def run_create_assets(node_name, project_name, ip, comment):
    # 节点id,无节点时创建节点
    node_info = get_node_info(node_name)
    if len(node_info) == 0:
        node_id = assets_nodes_create(node_name)
    else:
        node_id = node_info[0]["id"]

    # 管理用户 id
    hostname = "{ip}_{project_name}".format(ip=ip, project_name=project_name)

    # 查IP,创建资产
    ip_info = get_assets_list_by_ip(ip)
    if ip_info:
        print("%s 已存在,nodes: %s" % (ip_info[0]["ip"], ip_info[0]["nodes"]))
    else:
        asset_create(ip, hostname, node_id, comment)

#run_create_assets("Ownerx辰", "xxxx", "10xx.xx.xx9", "测试")
def get_org_info():
    url = jms_url + "/api/v1/orgs/orgs/"
    response = requests.get(url, headers=headers)
    org_list = response.text
    print(org_list)
    for i in org_list.split("id"):
        print(i)

    return response.json()


def get_user_gorup():
    url = jms_url + "/api/v1/xpack/cloud/accounts/"
    response = requests.get(url, headers=headers)
    for i in response.text.split(","):
        print(i)
    # print(response.text)
    return response.json()




GO


package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

const (
    JmsServerURL = "http://juxxxxxxxxxxxxxxngshu.com"
    JMSToken     = "exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
    ORG          = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx96" // ORG myself
)

type JumpServerCreateJson struct {
    Ip       interface{}   `json:"ip"`
    Hostname interface{}   `json:"hostname"`
    Platform string        `json:"platform"`
    Protocol string        `json:"protocol"`
    Port     int           `json:"port"`
    IsActive interface{}   `json:"is_active"`
    Nodes    []interface{} `json:"nodes"`
    OrgId    string        `json:"org_id"`
    OrgName  string        `json:"org_name"`
    Comment  interface{}   `json:"comment"`
}

func GetOrgList(jmsurl, token string) {
    url := jmsurl + "/api/v1/orgs/orgs/"
    client := &http.Client{}
    req, err := http.NewRequest("GET", url, nil)
    req.Header.Add("Authorization", "Token "+token)
    req.Header.Add("X-JMS-ORG", ORG)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(body))
}

func GetNodeInfo(jmsUrl string, token string, nodeName string, org string) {
    uri := jmsUrl + "/api/v1/assets/nodes/?value=" + nodeName
    client := &http.Client{}
    req, err := http.NewRequest("GET", uri, nil)
    req.Header.Add("Authorization", "Token "+token)
    req.Header.Add("X-JMS-ORG", org)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(body))
}

func GetAssetsInfo(jmsUrl string, token string, ip string) {
    uri := jmsUrl + "/api/v1/assets/assets/?ip=" + ip
    client := &http.Client{}
    req, err := http.NewRequest("GET", uri, nil)
    req.Header.Add("Authorization", "Token "+token)
    req.Header.Add("X-JMS-ORG", ORG)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(body))
}

func CreateAsset(jmsUrl string, token string, ip string, homeName string, comment string, platform string, nodeId string, orgId string, orgName string) {
    bodyJson := `{
        "ip": "10.2x3.1x.2x1",
        "hostname": "hostname",
        "platform": "Linux",
        "protocol": "ssh",
        "port": 22,
        "is_active": True,
        "nodes": [
            "node_id"
        ],
        "org_id": "4xxxxxxxxxxxxxxxxxxxxxx6",
        "org_name": "Ownxxxx",
        "comment": "comment"
    }`
    var j JumpServerCreateJson
    err := json.Unmarshal([]byte(bodyJson), &j)
    if err != nil {
        fmt.Println("err is %v: ", err)
    }
    j.Ip = ip
    j.OrgId = orgId
    j.Comment = comment
    j.Hostname = homeName
    j.OrgName = orgName
    j.Nodes = []interface{}{nodeId}
    if platform == "Linux" {
        fmt.Println("Linux ,body Wie ist")
    } else {
        j.Port = 3389
        j.Protocol = "rdp"
        j.Platform = "Windows"
        fmt.Println("Windows ,body change")
    }
    data, err := json.Marshal(j)
    if err != nil {
        fmt.Println("err was %v", err)
    }
    fmt.Println(string(data))

    reader := bytes.NewReader(data)
    uri := jmsUrl + "/api/v1/assets/assets/"
    client := &http.Client{}
    req, err := http.NewRequest("POST", uri, reader)
    req.Header.Add("Authorization", "Token "+token)
    req.Header.Add("X-JMS-ORG", orgId)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(body))
}

func main() {
    //GetOrgList(JmsServerURL, JMSToken)
    //GetNodeInfo(JmsServerURL, JMSToken, "Ownxxx", "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxe")
    //GetAssetsInfo(JmsServerURL, JMSToken, "10.2x.1x1.xx9")
}

这个人很懒,没有什么说的。

89 声望
17 粉丝
0 条评论
推荐阅读
prometheus结合consul+confd实现动态注册服务和动态更新配置告警规则
如上配置的缺点是,所有的注册节点都会归类到consul-node-exporter这个工作类别下面,有时候想对注册的服务进行分类,比如mysql为一类,oracle为一类,就要修改配置为:

台湾省委书记阅读 223

封面图
又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。

良许6阅读 1.9k

「刷起来」Go必看的进阶面试题详解
逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分配和垃圾回收的开销,从而提高程序的性能。下面是一道涉及逃逸分析的面试题及其详解。

王中阳Go4阅读 2k评论 1

封面图
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.8k评论 2

封面图
一分钟搞明白!快速掌握 Go WebAssembly
最近因为各种奇怪的原因,更多的接触到了 WebAssembly。虽然之前很多博客也翻过写过各种文章,但总感觉欠些味道。于是今天梳理了一版,和大家一起展开学习。

煎鱼4阅读 2.3k

go 协程操作map导致的数据竞争及解决方法
有个查询结果集的操作,无可避免的需要在循环获取数据,然后将结果集放到 map 中,这个操作在压测的时候,没出现问题,发布到生产环境之后,开始偶现 fatal error: concurrent map read and map write 错误,导致...

hxd_5阅读 872评论 4

Linux终端居然也可以做文件浏览器?
大家好,我是良许。在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在【笑脸】最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码。当然我不懂 Java 后端,因此就写写自己擅长的 Shell 脚本。但...

良许1阅读 2.1k

这个人很懒,没有什么说的。

89 声望
17 粉丝
宣传栏