背景:

  我们要在Apollo中批量给新创建的用户授可编辑权限

  apollo系统版本: java-2.1.0

  管理员账号:Apollo

  可编辑账号:guoyabin

过程:

  在没写这段代码的时候从网上搜了一些文章如下:
  apollo_adminservice、apollo_configservice改成自己的域名,在不知道用户密码的前提下可以获取cluster、app_ids、namespaces的脚本。

# !/usr/bin/env python
# -*-coding:utf-8 -*- """
# File : apollo.py
# Time :2023/6/6/006 11:01
# Author :GuoYabin
# version :python 3.8
# Description:利用apollo_adminservice的8090和apollo_configservice的8080
获取所有Apollo环境/appid/cluster
"""
import json
import time
import requests
from urllib.parse import urlparse def get_response(uri):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20200101 Firefox/60.0",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "close"
}
return requests.get(uri, headers=headers, timeout=20, allow_redirects=False) def get_app_ids(uri):
print(uri)
app_ids = []
response = get_response("{}/apps".format(uri))
html = response.text
print(html)
if response.status_code == 200:
for app in json.loads(html):
app_ids.append(app.get("appId"))
return app_ids def get_clusters(uri, app_ids):
clusters = {}
for app_id in app_ids:
clusters[app_id] = []
response = get_response("{}/apps/{}/clusters".format(uri, app_id))
html = response.text
if response.status_code == 200:
for app in json.loads(html):
clusters[app_id].append(app.get("name"))
return clusters def get_namespaces(uri, app_ids, clusters):
namespaces = {}
for app_id in app_ids:
namespaces[app_id] = []
for cluster in clusters[app_id]:
url = "{}/apps/{}/clusters/{}/namespaces".format(uri, app_id, cluster)
response = get_response(url)
html = response.text
if response.status_code == 200:
for app in json.loads(html):
namespaces[app_id].append(app.get("namespaceName"))
return namespaces def get_configurations(uri, app_ids, clusters, namespaces):
configurations = []
for app_id in app_ids:
for cluster in clusters[app_id]:
for namespace in namespaces[app_id]:
key_name = "{}-{}-{}".format(app_id, cluster, namespace)
url = "{}/configs/{}/{}/{}".format(uri, app_id, cluster, namespace)
response = get_response(url)
code = response.status_code
html = response.text
print("[+] get {} configs, status: {}".format(url, code))
time.sleep(1)
if code == 200:
configurations.append({key_name: json.loads(html)})
return configurations if __name__ == "__main__":
apollo_adminservice = "http://192.168.40.185:8090"
apollo_configservice = "http://192.168.40.185:8080" scheme0, netloc0, path0, params0, query0, fragment0 = urlparse(apollo_adminservice)
host0 = "{}://{}".format(scheme0, netloc0) _ids = get_app_ids(host0)
print("All appIds:")
print(_ids) _clusters = get_clusters(host0, _ids)
print("\nAll Clusters:")
print(_clusters) _namespaces = get_namespaces(host0, _ids, _clusters)
print("\nAll Namespaces:")
print(_namespaces)
print() scheme1, netloc1, path1, params1, query1, fragment1 = urlparse(apollo_configservice)
host1 = "{}://{}".format(scheme1, netloc1)
_configurations = get_configurations(host1, _ids, _clusters, _namespaces)
print("\nresults:\n")
print(_configurations)

解决方法:

  下面我们自己写一个批量授权的方法、使用管理员apollo给guoyabin账号授权,允许guoyabin账号可以编辑,但无法发布权限。

# !/usr/bin/env python
# -*-coding:utf-8 -*- """
# File : apollo.py
# Time :2023/6/6/006 11:01
# Author :GuoYabin
# version :python 3.8
# Description:模拟Apollo登陆,获取所有envs/appid添加guoyabin账号编辑权限
""" import requests
import json class apollo:
def __init__(self):
self.username = "apollo"
self.password = "*********"
self.apollourl = "http://**************"
self.addauth = "guoyabin"
self.session = requests.session()
self.headers = self.setheaders() def login(self):
url = '{}/signin'.format(self.apollourl)
payload = {
"username": self.username,
"password": self.password,
"login-submit": "登录"
}
self.session.post(url=url,data=payload)
res = self.session.cookies
return (res.get_dict()['SESSION']) def setheaders(self):
session = self.login()
myheaders = {
"Accept": "application/json, text/plain, */*",
"Cookie": "Hm_lvt_488a0e7e13b847119c47d080b3dc7272=1677469471; NG_TRANSLATE_LANG_KEY=zh-CN; SESSION={0}".format(session),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
return (myheaders) def getenvs(self):
url = 'http://{}/envs'.format(self.apollourl)
head = self.headers
res = requests.get(url=url,headers=head)
return (res.text) def getappid(self):
url = 'http://{}/apps'.format(self.apollourl)
params = {'page': 0}
res = requests.get(url, params=params,headers=self.headers)
date = json.loads(res.text)
allapp = [d['appId'] for d in date]
return (allapp) def addauth(self,appid):
uri = 'http://{0}/apps/{1}/namespaces/application/roles/ModifyNamespace'.format(self.apollourl,appid)
playload = self.addauth
try:
response = requests.post(url=uri,data=playload,headers=self.headers)
response.raise_for_status()
except requests.exceptions.HTTPError as error:
json_data = error.response.json()
error_message = json_data['message']
print(appid,error_message) if __name__ == '__main__':
apollo_obj = apollo()
for i in apollo_obj.getappid():
apollo_obj.addauth(i)

Apollo批量给新创建的用户授可编辑权限的更多相关文章

  1. Oracle 创建普通用户,并赋予权限

    采用sys or system / manager as sysdba; 连接数据库. 创建普通用户konglin: create user konglin identified by pwd_ora ...

  2. mysql创建本地用户及赋予数据库权限的方法示例

    大家在安装 mysql 时通常会生成一个超级用户 root,很多人之后就一直沿用这一个用户,虽然这会很方便,但超级用户权限太大,在所有地方使用它通常是一个安全隐患. 这一点跟操作系统的用户管理也是类似 ...

  3. 给新创建的用户 赋予所有的权利 *.* 查看权限 删除用户 ---------DCL用户权限管理篇

    第一步:进入数据库以后,先用 show databases; 再use mysql;    再 show tables;    再 select user,host from mysql.user; ...

  4. deepin 新创建的用户文件管理中挂载点打不开

    使用 root 用户可以打开,但是使用非 root 用户打不开 原因是权限不够 test1@test1-PC:~$ cd /media/ test1@test1-PC:/media$ ls apt c ...

  5. centos上为新创建的用户(git)指定根目录并生成公钥和私钥

    1.修改用户的根目录 vim /etc/passed 2.su git 3.ssh-keygen -t rsa ssh-keygen -t rsa 4.如图所示,如果要实现无密码访问git仓库,把公钥 ...

  6. 为Ubuntu新创建用户创建默认.bashrc并自动加载

    首先,su – 到新创建的用户 拷贝默认的.bashrc过来   1 cp /etc/skel/.bashrc ~/ 然后创建.profile文件   1 vi ~/.profile 粘贴下面的内容 ...

  7. oracle 创建一个用户,并且设定只能访问指定的对象

    出处:http://www.cnblogs.com/BetterWF/archive/2012/07/03/2574416.html 今天在开发接口时候,需要给接口开发公司提供一个ORACLE 用户, ...

  8. sql server 2008 数据库管理系统使用SQL语句创建登录用户详细步骤

    --服务器角色:--固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL Server,且不能更改分配给它们的权限. --可以在数据库中不存在用户帐户的情况下向固定服 ...

  9. 第一安装oracle数据库后,需要创建一个用户,给用户解锁并赋予权限

    1.第一次安装oracle数据库应该做的事情. 注: 1.安装oracle后需要创建用户,连接数据库,(注意数据库名,还有好像后面的 ":"也有影响) 2.解锁用户, 3.授予新登 ...

  10. Linux下useradd命令创建的用户不能登录的问题

    Linux下useradd命令创建的用户不能登录的问题  问题: 用useradd命令新创建一个用户tester 密码pwdtest mkdir -p /home/tester(创建文件夹) user ...

随机推荐

  1. [源码阅读]-Redis核心事件流程

    Redis核心流程 本文分析基于Redis-1.0源码,核心流程代码主要分布在redis.c,ae.c两个文件中. Notion版本 1.Redis核心流程中的重要数据结构 struct redisS ...

  2. Solution Set - “让季节停止哽咽”

    目录 0.「CTT 2017」「洛谷 P4004」Hello world! 1.「CTT 2017」「洛谷 P4006」小 Y 和二叉树 2.「CTT 2017」「洛谷 P4226」避难所 3.「AG ...

  3. legged-robot关于locomotion、Navigation任务主要文章速览

    0. 前言 目前legged robot包括locomotion(怎么走).navigation(往哪走).人形机器人的whole body control以及基于机械臂的manipulation的任 ...

  4. Netty实战入门教程

    概述 Netty 是一个异步的.基于事件驱动的网络应用框架,用于快速开发可维护.高性能的网络服务器和客户端 Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开 ...

  5. [python]png转webp的命令行工具

    前言 网页上使用webp格式的图片更加省网络流量和存储空间,但本地图片一般是png格式的,所以考虑用python的pillow库将png格式的图片转换为webp格式. 需求: 可以在系统任意地方调用. ...

  6. 滑动窗口模板在字符串中的巧妙应用|LeetCode 76 最小覆盖子串

    LeetCode 76 最小覆盖子串 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 更多干货,请关注公众号[忍者算法],回复[刷题清单]获取完整题解目录- ...

  7. 聊聊GRPO算法——从Open R1来看如何训练DeepSeek R1模型

    概述 首发自个人公众号:阿郎小哥的随笔驿站 DeepSeek R1系列建议阅读之前的系列文章: 聊聊DeepSeek R1的一些总结 聊聊DeepSeek R1的开源复现库--Open R1之合成数据 ...

  8. TortoiseGit拉取出现“Could not open repository. libgit2 returned: repository path……”错误的解决办法

    TortoiseGit拉取出现"Could not open repository. libgit2 returned: repository path--"错误的解决办法 1.问 ...

  9. .Net 配置绑定 IOptions

    准备   首先准备下appsettins.json以及目标类   appsettins.json "StudentSettings": { "Id": 1023 ...

  10. WPF .Net Core 3.1遇到Satellite Assemblies无法正常加载的处理

    1.原因 加载的时候没有调取 AssemblyLoadContext.Default 2.解决方案: 在程序启动的时候,手动调用 /// <summary> /// Interaction ...