Skip to content
This repository has been archived by the owner on Jun 18, 2024. It is now read-only.

Latest commit

 

History

History
444 lines (315 loc) · 14.3 KB

node_and_permissions.md

File metadata and controls

444 lines (315 loc) · 14.3 KB

节点及其权限

目录

主节点

主控端一共有三个主节点:

  • server - (HTTP API支持) 对实例和Minecraft服务器的操作节点

  • backend - (HTTP API支持) 对主控端的操作节点

  • websocket - (仅限主控端WebSocket) 传输Minecraft服务器日志的节点

server

server节点下有一些子节点:

  • normal - 普通情况下的服务器部署操作节点

    该节点下的操作:

    • launch - 正常申请实例并部署Minecraft服务器

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Starting to deploy the server!"
        }

    • restore_and_launch - 正常申请实例,在实例启动后尝试恢复增量备份(如果有的话),然后部署Minecraft服务器

      • 请求方法:GET
      • 返回示例: 同launch

    • launch_and_discard_backup - 正常申请实例,抛弃已有的增量备份,然后部署Minecraft服务器

      • 请求方法:GET
      • 返回示例: 同launch

    如果没有增量备份或者配置中未启动增量备份,restore_and_launchlaunch_and_discard_backup的行为和launch一致

  • maintenance - 服务器维护相关的操作的节点

    • launch - 正常申请实例并在维护模式下部署Minecraft服务器

      • 请求方法:GET
      • 返回示例: 同launch

    • stop - 软停止Minecraft服务器,并送回实例

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Closing the server..."
        }

    • kill - 强制停止Minecraft服务器,并送回实例

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Killing the server..."
        }

    • get_key - 获取通过SSH连接当前实例所需的privateKey

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {
                "privateKey": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
            },
            "code": 1,
            "msg": "Please take care of it."
        }

    • revive - 清除主控端当前的错误(如果有错误的话),尝试从上次发生错误的地方继续运行

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Reviving..."
        }

      注:仅用于一些偶发性错误,比如等待实例启动超时,但实例后来又正常启动了。 又比如实例端(InsSide)在打包时出现了错误,你也可以用这个操作来让实例端尝试重新运行

    • wipe_butt - “擦屁股”。主要功能是直接送回实例,清除Minecraft服务器相关数据,并清除主控端的错误,回到2000状态。

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Resources were terminated."
        }

      注:相对来说这是很危险的操作,仅在revive无法清除错误的情况下使用! 实质上是直接跳到这个流程了。

    • restore_and_launch - 正常申请实例,在实例启动后尝试恢复增量备份(如果有的话),然后在维护模式下部署Minecraft服务器

      • 请求方法:GET
      • 返回示例: 同launch

    • launch_and_discard_backup - 正常申请实例,抛弃已有的增量备份,然后在维护模式下部署Minecraft服务器

      • 请求方法:GET
      • 返回示例: 同launch

    关于维护模式

    1. 维护模式下实例端不会对Minecraft服务器进行监视,无论Minecraft服务器进程存在与否,实例都会持续运行下去。

    2. 维护模式下在实例端不会检查竞价实例是否即将被回收,但是这并不影响主控端这边的检查。

    3. 维护模式下,无论Minecraft服务器有没有玩家,都不会被自动停止(没有倒计时)。

    4. 综上,维护模式下,你只能通过stop / kill这些节点操作来停止Minecraft服务器并送回实例。


  • command - Minecraft服务器命令节点

    • send - 向Minecraft服务器发送命令

      • 请求方法:POST

      • 请求体示例(Content-Type: application/json):

        {
            // command项为发给Minecraft服务器的命令
            "command": "say Hello World."
        }
      • 返回示例(Content-Type: application/json):

        {
            "data": {},
            "code": 0,
            "msg": "Successfully sent the command"
        }

  • mc_logs - Minecraft服务器日志节点

    • get - 获取Minecraft服务器日志(latest.log)

      • 请求方法:GET
      • 返回示例:
        • 如果成功:Content-Type: text/plain

          [19:00:45] [Server thread/INFO]: Starting remote control listener
          [19:00:45] [Server thread/INFO]: Thread RCON Listener started
          [19:00:45] [Server thread/INFO]: RCON running on 0.0.0.0:25575
          [19:00:45] [Server thread/INFO]: Running delayed init tasks
          [19:00:45] [Server thread/INFO]: [GroupManager] [STDOUT] [GroupManager] Bukkit 的权限更新了!
          [19:00:45] [Server thread/INFO]: Done (2.852s)! For help, type "help"
          [19:00:45] [Server thread/INFO]: Timings Reset
          
        • 不成功:Content-Type: application/json

          {
              "data": {},
              "code": -1,
              "msg": "Lack of valid action"
          }

backend

backend节点下目前只有2个子节点:

  • query - 状态查询节点

    • mc - 获取Minecraft服务器的状态信息

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {
                // Minecraft服务器的IP地址
                "ip": "129.28.91.200", 
                // 上次主控端连接到实例端的时间
                "connect_time": 1664881227510, 
                // 剩余的空闲时间(秒),始终为0说明是维护模式,没有倒计时
                "idling_time_left": 0, 
                // 当前在线玩家数
                "players_online": 0,
                // Minecraft配置的总玩家数
                "players_max": 20
            },
            "code": 1,
            "msg": "Success."
        }

    • backend - 获取主控端(backend)的状态信息

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {
                // 当前主控端的状态信息
                "status_msg": "Server deployed successfully!",
                // 当前主控端的状态码
                "status_code": 2300,
                // 主控端上一次发生的错误的相关信息
                "last_err": "Fatal:Failed to restore dir: /root/increments/restore/root-minecraft-activity_world",
                // 主控端上一次发生错误的时间
                "last_err_time": "2022/9/24 16:32:00",
                // 上一次错误的来源,insside - 实例端,backend - 主控端
                "err_from": "insside"
            },
            "code": 1,
            "msg": "Success."
        }

    • status_code - 获取主控端(backend)的状态码

      • 请求方法:GET

      • 返回示例(Content-Type: application/json):

        {
            "data": {
                "status_code": 2000
            },
            "code": 1,
            "msg": "Success."
        }

  • token - 主控端访问令牌节点

    • generate - 生成一个用于游客访问的临时令牌

      • 请求方法:POST

      • 请求体示例(Content-Type: application/json):

        {
            // 令牌有效期(毫秒)
            // 如果不指定,会采用api_configs中的tokens.default_validity值
            "validity": 10000
        }
      • 返回示例(Content-Type: application/json):

        {
            "data": {
                // 生成的令牌
                "token": "IKkiTZ9M6$$GDT*$qKBKpzI6BUYR2tBNqqqacaBfG687fnSPvLyYD#OCXiu*jKeX",
                // 令牌的失效时间(毫秒时间戳)
                "expiry": 1664894379530
            },
            "code": 1,
            "msg": "Token Generated"
        }

    注:相关配置在api_configs.jsontokens配置项中。

websocket

websocket节点下目前只有一个子节点:

  • mclog - Minecraft服务器日志节点

    • receive - 接收Minecraft服务器日志

注:要连接主控端WebSocket以实时同步Minecraft服务器日志,用户必须要有websocket.mclog.receive权限。

权限节点

实际上将上面的节点和操作串联起来,就构成了一个权限节点。

比如:

  • 在非维护模式下部署服务器的权限节点:

    server.normal.launch
    
  • 正常关闭Minecraft服务器的权限节点:

    server.maintenance.stop
    
  • 向Minecraft服务器发送命令的权限节点:

    server.command.send
    

通配符

权限节点中支持通配符*,使用例如下:

  • 给予令牌对应的用户所有server节点的权限

    server.*
    
  • 给予令牌对应的用户所有server节点下的maintenance子节点的权限

    server.maintenance.*
    
  • 给予令牌对应的用户所有server节点下的launch操作的权限

    server.*.launch