{
  "$id": "deviceData",
  "definitions": {
    "deviceName": {
      "type": "string",
      "title": "name",
      "examples": ["xr9kv-atl"]
    },
    "deviceDetails": {
      "title": "deviceDetails",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "examples": ["xr9kv01-aws"]
        },
        "authgroup": {
          "type": "string",
          "examples": ["xr9kv-aws"]
        },
        "ipaddress": {
          "type": "string",
          "examples": ["10.1.6.100"]
        },
        "address": {
          "type": "string",
          "examples": ["10.1.6.100"]
        },
        "port": {
          "type": "string",
          "examples": ["22"]
        },
        "device-type": {
          "type": "string",
          "examples": ["cli"]
        },
        "ostype": {
          "type": "string",
          "examples": ["cisco-ios-xr"]
        },
        "ned": {
          "type": "string",
          "examples": ["cisco-ios-xr"]
        },
        "admin": {
          "type": "boolean"
        },
        "host": {
          "type": "string",
          "examples": ["nso46"]
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "string",
            "examples": [
              "addDevice",
              "addDeviceGroup",
              "addDeviceToGroup",
              "addToAuthGroup",
              "applyTemplate",
              "applyTemplates",
              "applyVariableTemplate",
              "checkSync",
              "checkSyncDevices",
              "connectDevice",
              "deleteDevice",
              "deleteDeviceGroup",
              "dryRunVariableTemplate",
              "getAuthGroups",
              "getConfig",
              "getDevice",
              "getDeviceGroups",
              "getDeviceGroupsForDevices",
              "getDevices",
              "getDevicesFiltered",
              "getNEDs",
              "getOutOfSyncConfig",
              "getTemplates",
              "liveStatus",
              "passThru",
              "pingDevice",
              "removeDeviceFromGroup",
              "restoreDevice",
              "runAction",
              "runCommand",
              "setConfig",
              "syncFrom",
              "syncFromDevices",
              "syncTo",
              "syncToDevices",
              "turnUpDevice",
              "verifyConfig"
            ]
          },
          "uniqueItems": true
        },
        "origins": {
          "type": "array",
          "items": {
            "type": "string",
            "examples": ["nso46"]
          }
        }
      },
      "required": [
        "name",
        "device-type",
        "ipaddress",
        "port",
        "ostype",
        "host",
        "actions",
        "origin"
      ]
    },
    "deviceConfigurationFormat": {
      "title": "format",
      "type": "string",
      "enum": ["native", "xml"],
      "examples": ["native"]
    },
    "deviceConfiguration": {
      "title": "config",
      "type": "object",
      "properties": {
        "device": {
          "$ref": "#/definitions/deviceName",
          "examples": ["ios0"]
        },
        "config": {
          "$ref": "#/definitions/deviceConfigurationString"
        }
      }
    },
    "deviceConfigurationString": {
      "type": "string",
      "examples": ["hostname ios0\nno service password-encryption\n..."]
    },
    "backupDescription": {
      "type": "string",
      "examples": ["description of backup"]
    },
    "backupNotes": {
      "type": "string",
      "examples": ["notes about backup"]
    },
    "backup": {
      "type": "object",
      "properties": {
        "id": { "$ref": "common#/definitions/mongoObjectId" },
        "name": { "$ref": "#/definitions/deviceName" },
        "provider": { "type": "string" },
        "type": { "$ref": "#/definitions/deviceConfigurationFormat" },
        "date": { "$ref": "common#/definitions/timestamp" },
        "rawConfig": { "$ref": "#/definitions/deviceConfigurationString" },
        "xmlConfig": { "$ref": "#/definitions/deviceConfigurationString" },
        "description": { "$ref": "#/definitions/backupDescription" },
        "notes": { "$ref": "#/definitions/backupNotes" }
      }
    }
  }
}
