diff options
| author | John Estabrook <jestabro@vyos.io> | 2023-01-09 14:48:04 -0600 | 
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2023-01-09 15:39:47 -0600 | 
| commit | ba4aebaaa816d810727ded073d3b09c1723cded7 (patch) | |
| tree | 3368415980dba67ac3ae25dc442329c6882fdb7f /src | |
| parent | f440fbc9ba9019b25fb9f059357052701d990ef3 (diff) | |
| download | vyos-1x-ba4aebaaa816d810727ded073d3b09c1723cded7.tar.gz vyos-1x-ba4aebaaa816d810727ded073d3b09c1723cded7.zip  | |
container: T4880: add REST API endpoint for add/delelete/show images
Diffstat (limited to 'src')
| -rwxr-xr-x | src/services/vyos-http-api-server | 46 | 
1 files changed, 45 insertions, 1 deletions
diff --git a/src/services/vyos-http-api-server b/src/services/vyos-http-api-server index 60ea9a5ee..f59e089ae 100755 --- a/src/services/vyos-http-api-server +++ b/src/services/vyos-http-api-server @@ -175,6 +175,19 @@ class ImageModel(ApiModel):              }          } +class ContainerImageModel(ApiModel): +    op: StrictStr +    name: StrictStr = None + +    class Config: +        schema_extra = { +            "example": { +                "key": "id_key", +                "op": "add | delete | show", +                "name": "imagename", +            } +        } +  class GenerateModel(ApiModel):      op: StrictStr      path: List[StrictStr] @@ -389,7 +402,7 @@ class MultipartRoute(APIRoute):                  if endpoint in ('/retrieve','/generate','/show','/reset'):                      if request.ERR_NO_OP or request.ERR_NO_PATH:                          return error(400, "Missing required field. \"op\" and \"path\" fields are required") -                if endpoint in ('/config-file', '/image'): +                if endpoint in ('/config-file', '/image', '/container-image'):                      if request.ERR_NO_OP:                          return error(400, "Missing required field \"op\"") @@ -581,6 +594,37 @@ def image_op(data: ImageModel):      return success(res) +@app.post('/container-image') +def image_op(data: ContainerImageModel): +    session = app.state.vyos_session + +    op = data.op + +    try: +        if op == 'add': +            if data.name: +                name = data.name +            else: +                return error(400, "Missing required field \"name\"") +            res = session.add_container_image(name) +        elif op == 'delete': +            if data.name: +                name = data.name +            else: +                return error(400, "Missing required field \"name\"") +            res = session.delete_container_image(name) +        elif op == 'show': +            res = session.show_container_image() +        else: +            return error(400, "\"{0}\" is not a valid operation".format(op)) +    except ConfigSessionError as e: +        return error(400, str(e)) +    except Exception as e: +        logger.critical(traceback.format_exc()) +        return error(500, "An internal error occured. Check the logs for details.") + +    return success(res) +  @app.post('/generate')  def generate_op(data: GenerateModel):      session = app.state.vyos_session  | 
