jumpserver api创建资产
jumpserver api
domain+/api/docs
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")
}
推荐阅读
prometheus结合consul+confd实现动态注册服务和动态更新配置告警规则
如上配置的缺点是,所有的注册节点都会归类到consul-node-exporter这个工作类别下面,有时候想对注册的服务进行分类,比如mysql为一类,oracle为一类,就要修改配置为:
台湾省委书记阅读 223
又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。
良许赞 6阅读 1.9k
「刷起来」Go必看的进阶面试题详解
逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分配和垃圾回收的开销,从而提高程序的性能。下面是一道涉及逃逸分析的面试题及其详解。
王中阳Go赞 4阅读 2k评论 1
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 4阅读 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。