saltstack主机管理项目:计主机管理项目命令分发器(三)
一、开发目标命令格式如下:
二、目录结构
三、代码注解
01、salt.py 只是一个入口,没干什么事情
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:luoahong import os, sys if __name__ = = "__main__" : os.environ.setdefault( "DJANGO_SETTINGS_MODULE" , "Stark.settings" ) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # print(BASE_DIR) sys.path.append(BASE_DIR) from Arya.action_list import actions from Arya.backends.utils import ArgvManagement obj = ArgvManagement(sys.argv) |
02、action_list.py 路由分发器
1 2 3 4 5 6 7 8 9 | #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:luoahong from Arya.plugins import cmd,state actions = { 'cmd' : cmd.CMD, 'state' :state.State } |
03、 建了一个目录backends目录下 创建一个utils.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:luoahong from Arya import action_list import django django.setup() from Stark import settings from Arya import models class ArgvManagement( object ): ''' 接收用户指令并分配到相应模块 ''' def __init__( self ,argvs): self .argvs = argvs self .argv_parse() def help_msg( self ): print ( "Available modules:" ) for registered_module in action_list.actions: print ( " %s" % registered_module) exit() def argv_parse( self ): print ( self .argvs) if len ( self .argvs) < 2 : self .help_msg() module_name = self .argvs[ 1 ] if '.' in module_name: mod_name,mod_method = module_name.split( '.' ) module_instance = action_list.actions.get(mod_name) if module_instance: #matched module_instance( self .argvs,models,settings) else : exit( "invalid module name argument" ) |
04、plugins 建立一个目录创建两个类
1、 cmd.py
1 2 3 | from Arya.backends.base_module import BaseSaltModule class CMD(BaseSaltModule): print ( 'in cmd module ' ) |
2、state.py
1 2 3 4 5 | from Arya.plugins import cmd,state from Arya.backends.base_module import BaseSaltModule class State(BaseSaltModule): print ( 'in state module ' ) |
四、命令行运行截图
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构