etclabscore / jade-service-runner

👟 Jade Service Runner
https://jade.builders/
Apache License 2.0
16 stars 8 forks source link

Feat: Discussion about Jade Service Runner Behavior #2

Open zcstarr opened 5 years ago

zcstarr commented 5 years ago

Creating this issue to start a conversation about what the service runner should be solving, so we can scope the initial version of the project properly, while keeping the end developer in mind. The aim is to use this document to help write the readme and generate architecture docs, and figure out what v0 needs to do.

Jade Service Runner

Abstract high level goals

Jade Service Runner is a utility that makes it easy for dApp developers to allow end users to run and connect to their own services. In order to achieve this the service runner should make it easy to complete the following tasks. Either by hand or by code automation from the dApp.

User potential high level abstract goal

zcstarr commented 5 years ago

I wrote this quickly to just put together a list of the concerns so we can keep these things in mind. I avoided talking implementation specifics. I wanted to see if these problems meshed with the ideas we all have in the brain. I think what I'll end up doing as we gain consensus or question, is then add a section that talks more implementation/proposals for executing the above. It's a product slant first.

I think impl wise we can probably have the service runner as the open-rpc supported entity, and can use https://github.com/etclabscore/jade/pull/18 , maybe refiling the PR in this repo to start iterating on what the exact spec should be.

Let me know what you think or what should be change or if this should be moved into a PR if that's easier to suggests edits etc...

shanejonas commented 5 years ago

This is a great summary of everyones thoughts so far on this. 👍

Going to read through a couple times, gather some thoughts around it overnight.

zcstarr commented 5 years ago

Initial open-rpc starting gist for some our thinking post offline meeting

{
    "info": {
        "title": "something",
        "version": "44"
    },
    "methods": [
        {
            "name": "installService",
            "params": [
                {
                    "name": "serviceName",
                    "schema": {
                        "type":"string"
                    }
                },  
                {
                    "name": "version",
                    "schema": {
                        "type":"string"
                    }
                }
            ],
            "result":{
                "name": "installSuccess",
                "schema": {
                    "type": "boolean"
                }
            }
        },
        {
            "name": "configService",
            "result": {
                "name": "configurationSuccess",
                "schema": {
                    "type": "boolean"
                }
            },
            "params": [
            {
                "schema": {
                    "type": "string"
                },
                "name": "serviceName"
            },
            {
                "schema": {
                    "type": "string"
                },
                "name": "environment"
            }
        ]
}
],
"openrpc": "1.0.0-rc0"
}

https://gist.github.com/zcstarr/961f861dcc711a647297c4ca1c945b14

zcstarr commented 5 years ago

Service Runner Tenative V0 Scope

ServiceRunner
is a standalone service manager, that supports starting, stopping, and installing a limited range of OpenRPC projects. This range can be extended via configuration file. The service runner runs services by responding to JSONRPC request to start/stop/ or gain access to services. The initial target is multi-geth + jade-signer.

Potential Service Runner Commands


servicerunner —extends config.yml
// This command allows the user to extend the pre existing services configuration

ServiceRunner Extended Configuration Tenative Example


 {
  ethclassic: {  /* serviceName */
      download: {
 /* where to get service */
        osx: "https://some.binaryfile.location"
        windows: "https://some.binaryfile.location"
        linux: "https://some.binaryfile.location"     
      },
      start: “command”
, /* commands to execute the process*/      
      stop : “command”, /* commands to stop the process */
      teardown: “command” /* commands to teardown the process */
      env: { /*specifies what supported run time environments per service*/
    
          mainnet: { /*environment name and specific config */
        args: []
            start,
            stop,
            teardown,
          },
          gorli: { . /*environment name and specific config */
         args:[]
          }
       
      }
   }
}
BelfordZ commented 5 years ago

for env - can we make it an array of object, where the object has the property name?

Also, can you turn this into a JSON schema?

zcstarr commented 5 years ago

done and done, took a stab at a slight revision/rewrite in json schema https://gist.github.com/zcstarr/415265efae3662c481c488e0b7bab083

zcstarr commented 5 years ago

JSON Schema response for starting a service https://gist.github.com/zcstarr/eecc9d495b7e0e19a65a5899a4c6e379