zoukankan      html  css  js  c++  java
  • saltstack主机管理项目:计主机管理项目命令分发器(三)

    一、开发目标命令格式如下:

    二、目录结构

    三、代码注解

    01、salt.py 只是一个入口,没干什么事情

    #!/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 路由分发器

    #!/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

    #!/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 

    from Arya.backends.base_module import BaseSaltModule
    class CMD(BaseSaltModule):
        print('in cmd module ')

    2、state.py

    from Arya.plugins import cmd,state
    
    from Arya.backends.base_module import BaseSaltModule
    class State(BaseSaltModule):
        print('in state module ')
    

    四、命令行运行截图

  • 相关阅读:
    如何方便的下载youtube视频?
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    用opencv+python全屏进行显示图片
    58. Length of Last Word
    numpy的resize和reshape区别
    Opencv的绘图
    Python的slice问题
    jqgrid一次性加载
  • 原文地址:https://www.cnblogs.com/luoahong/p/9419535.html
Copyright © 2011-2022 走看看