SaltStack源码分析之使用MongoDB模块
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,MongoDB模块/usr/lib/python2.6/site-packages/salt/modules/mongodb.pyMongoDB模块会先去检查是否安装有PyMongo模块# -*- c
千家信息网最后更新 2025年01月20日SaltStack源码分析之使用MongoDB模块
MongoDB模块/usr/lib/python2.6/site-packages/salt/modules/mongodb.py
MongoDB模块会先去检查是否安装有PyMongo模块
# -*- coding: utf-8 -*-'''Module to provide MongoDB functionality to Salt:configuration: This module uses PyMongo, and accepts configuration details as parameters as well as configuration settings:: mongodb.host: 'localhost' mongodb.port: 27017 mongodb.user: '' mongodb.password: '' This data can also be passed into pillar. Options passed into opts will overwrite options passed into pillar.'''
# Import python libsimport logging# Import salt libsfrom salt._compat import string_types# Import third party libstry: import pymongo HAS_MONGODB = Trueexcept ImportError: HAS_MONGODB = Falselog = logging.getLogger(__name__)
引入logging模块处理日志,再引入salt._compat.string_types
对检查pymongo进行异常处理,如果导入pymongo成功,设置HAS_MONGODB变量为True,导入失败设置为False
def __virtual__(): ''' Only load this module if pymongo is installed ''' if HAS_MONGODB: return 'mongodb' else: return False
如果定义一个__virtual__函数,可以控制是否允许这个模块可见。如果返回False,SaltStack将会忽略这个模块,如果返回一个字符串,SaltStack将使用这个字符串。
def _connect(user=None, password=None, host=None, port=None, database='admin'): ''' Returns a tuple of (user, host, port) with config, pillar, or default values assigned to missing values. ''' if not user: user = __salt__['config.option']('mongodb.user') if not password: password = __salt__['config.option']('mongodb.password') if not host: host = __salt__['config.option']('mongodb.host') if not port: port = __salt__['config.option']('mongodb.port') try: conn = pymongo.connection.Connection(host=host, port=port) mdb = pymongo.database.Database(conn, database) if user and password: mdb.authenticate(user, password) except pymongo.errors.PyMongoError: log.error('Error connecting to database {0}'.format(database)) return False return conn
pymongo.connection.Connection
这个方法PyMongo已经弃用,使用新的MongoClient代替。
def db_list(user=None, password=None, host=None, port=None): ''' List all Mongodb databases CLI Example: .. code-block:: bash salt '*' mongodb.db_list''' conn = _connect(user, password, host, port) if not conn: return 'Failed to connect to mongo database' try: log.info('Listing databases') return conn.database_names() except pymongo.errors.PyMongoError as err: log.error(err) return str(err)
列出所有的MongoDB数据库
$ sudo salt '*' mongodb.db_list '' '' 10.10.41.17 28018localhost.localdomain: 'mongodb.db_list' is not available.gintama-qa-server: - pay - clan - test - game1 - admin - gam_server_1
SaltStack会先去检测是否包含有PyMongo模块,如果有就执行没有就不执行。
def db_exists(name, user=None, password=None, host=None, port=None): ''' Checks if a database exists in Mongodb CLI Example: .. code-block:: bash salt '*' mongodb.db_exists''' dbs = db_list(user, password, host, port) if isinstance(dbs, string_types): return False return name in dbs
检查一个库是否存在
$ sudo salt 'gintama-qa-server' mongodb.db_exists pay '' '' 10.10.41.17 28018gintama-qa-server: True$ sudo salt 'gintama-qa-server' mongodb.db_exists pay3 '' '' 10.10.41.17 28018gintama-qa-server: False
def db_remove(name, user=None, password=None, host=None, port=None): ''' Remove a Mongodb database CLI Example: .. code-block:: bash salt '*' mongodb.db_remove''' conn = _connect(user, password, host, port) if not conn: return 'Failed to connect to mongo database' try: log.info('Removing database {0}'.format(name)) conn.drop_database(name) except pymongo.errors.PyMongoError as err: log.error( 'Removing database {0} failed with error: {1}'.format( name, str(err) ) ) return str(err) return True
删除一个库
def user_list(user=None, password=None, host=None, port=None, database='admin'): ''' List users of a Mongodb database CLI Example: .. code-block:: bash salt '*' mongodb.user_list''' conn = _connect(user, password, host, port) if not conn: return 'Failed to connect to mongo database' try: log.info('Listing users') mdb = pymongo.database.Database(conn, database) output = [] for user in mdb.system.users.find(): output.append([ ('user', user['user']), ('readOnly', user.get('readOnly', 'None')) ]) return output except pymongo.errors.PyMongoError as err: log.error( 'Listing users failed with error: {0}'.format( str(err) ) ) return str(err)
列出账号
def user_exists(name, user=None, password=None, host=None, port=None, database='admin'): ''' Checks if a user exists in Mongodb CLI Example: .. code-block:: bash salt '*' mongodb.user_exists''' users = user_list(user, password, host, port, database) for user in users: if name == dict(user).get('user'): return True return False
查看账号是否存在
def user_create(name, passwd, user=None, password=None, host=None, port=None, database='admin'): ''' Create a Mongodb user CLI Example: .. code-block:: bash salt '*' mongodb.user_create''' conn = _connect(user, password, host, port) if not conn: return 'Failed to connect to mongo database' try: log.info('Creating user {0}'.format(name)) mdb = pymongo.database.Database(conn, database) mdb.add_user(name, passwd) except pymongo.errors.PyMongoError as err: log.error( 'Creating database {0} failed with error: {1}'.format( name, str(err) ) ) return str(err) return True
创建账号
def user_remove(name, user=None, password=None, host=None, port=None, database='admin'): ''' Remove a Mongodb user CLI Example: .. code-block:: bash salt '*' mongodb.user_remove''' conn = _connect(user, password, host, port) if not conn: return 'Failed to connect to mongo database' try: log.info('Removing user {0}'.format(name)) mdb = pymongo.database.Database(conn, database) mdb.remove_user(name) except pymongo.errors.PyMongoError as err: log.error( 'Creating database {0} failed with error: {1}'.format( name, str(err) ) ) return str(err) return True
测试情况
$ sudo salt 'gintama-qa-server' mongodb.user_create gintama gintama123 '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server: True$ sudo salt 'gintama-qa-server' mongodb.user_exists gintama '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server: True$ sudo salt 'gintama-qa-server' mongodb.user_list '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server: |_ |_ - user - gintama |_ - readOnly - None$ sudo salt 'gintama-qa-server' mongodb.user_remove gintama '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server: True$ sudo salt 'gintama-qa-server' mongodb.user_list '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server:$ sudo salt 'gintama-qa-server' mongodb.user_exists gintama '' '' 10.10.41.17 28018 taiwan_game1gintama-qa-server: False
模块
账号
检查
字符
字符串
处理
成功
函数
变量
情况
数据
数据库
方法
日志
utf-8
控制
检测
测试
源码
分析
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于网络安全的手抄报大字
阿里云服务器存储空间
网络安全法 属于什么法
如何使用guid数据库行标识
ssr服务器修改源IP
功能软件开发编程
南京应用软件开发价格
沧州软件开发厂家价格
泰吉网络技术有限公司
大型数据库有多大
服务器cpu 内存 搭配
女孩学软件开发好吗
传奇二公测有几个服务器
河东区网络安全教育
松江区创新软件开发服务收费
北邮数据库技术与实验
pavlov 服务器人少
计算机网络网络技术论文
服务器远程租
域服务器添加管理员用户
我的世界大型服务器配置要多高
方舟手游怎么转到别的服务器
小学网络安全教育课教案
学数据库原理有用吗
服务器电源设备
网络安全三种鉴别方式
怎么配置远程管理服务器
网页请求json数据库
数据库2000的安装失败
汽车网络安全多管齐下