{
    "name": "top",
    "module" : "./iot_main",
    "description" : "Platform supervisor",
    "env" : {
        "myId" : "process.env.MY_ID||null",
        "tokenDir" : "process.env.TOKEN_DIR||/config",
        "tokenFile" : "process.env.TOKEN_FILE||token",
        "configVolume" : "process.env.CONFIG_VOLUME||/config",
        "iotSession" : "process.env.IOT_SESSION||iot",
        "appProtocol" : "process.env.APP_PROTOCOL||https",
        "appPublisher" :"process.env.APP_PUBLISHER||root",
        "appLocalName" : "process.env.APP_LOCAL_NAME||gadget",
        "appSuffix" : "process.env.APP_SUFFIX||cafjs.com",
        "synchronousInit" : "process.env.SYNCHRONOUS_INIT||true",
        "maxRetries" : "process.env.MAX_RETRIES||10",
        "retryDelay" : "process.env.RETRY_DELAY||2000",
        "interval": "process.env.INTERVAL||5000",
        "longInterval": "process.env.LONG_INTERVAL||10000",
        "dieDelay": "process.env.DIE_DELAY||-1",
        "maxHangRetries":  "process.env.MAX_HANG_RETRIES||200",
        "netName" : "process.env.NET_NAME||bridge",
        "netAlreadyCreated" : "process.env.NET_ALREADY_CREATED||true",
        "trustedPubKeyFile" : "process.env.TRUSTED_PUB_KEY_FILE||rsa_pub.pem",
        "privilegedNetwork" : "process.env.PRIVILEGED_NETWORK||host",
        "appDevices" : "process.env.APP_DEVICES||[\"/dev/gpiomem\"]",
        "appPrivileged" : "process.env.APP_PRIVILEGED||false",
        "debugApplication" : "process.env.DEBUG_APPLICATION||false",
        "debuggerPort" : "process.env.DEBUGGER_PORT||9230",
        "nodeDebugOptions" : "process.env.NODE_DEBUG_OPTIONS||--inspect=0.0.0.0:9230"
    },
    "components": [
        {
            "name": "log",
            "module": "caf_iot#caf_components#plug_log",
            "description": "Logger service",
            "env" : {
                "logLevel" : "DEBUG"
            }
        },
        {
            "name": "cloud",
            "module": "caf_iot#plug_iot_cloud",
            "description": "Connection to a CA.",
            "env" : {
                "maxRetries" : "$._.env.maxRetries",
                "retryDelay" : "$._.env.retryDelay",
                "appProtocol" : "$._.env.appProtocol",
                "appPublisher" : "$._.env.appPublisher",
                "appLocalName" : "$._.env.appLocalName",
                "appSuffix" : "$._.env.appSuffix",
                "session" : "$._.env.iotSession",
                "tokenDir" : "$._.env.tokenDir",
                "tokenFile" : "$._.env.tokenFile"
            },
            "components": [
            ]
        },
        {
            "name": "docker",
            "module": "./plug_docker",
            "description": "Plug to access the local Docker daemon\n Properties: \n",
            "env": {
                "dockerSocket" : "process.env.DOCKER_SOCKET||/var/run/docker.sock"
            }
        },
        {
            "name": "network",
            "module": "./plug_network",
            "description": "Plug that creates a Docker network.\n Properties: \n",
            "env": {
                "netName" : "$._.env.netName",
                "alreadyCreated" : "$._.env.netAlreadyCreated"
            }
        },
        {
            "name": "builder",
            "module" : "./plug_builder",
            "description" : "Builds container app images.",
            "env" : {
                "buildDir" : "process.env.BUILD_DIR||/tmp/build_cafjs",
                "dockerfileTemplate" : "process.env.DOCKERFILE_TEMPLATE||Dockerfile.template",
                "dockerfilePrivilegedTemplate" : "process.env.DOCKERFILE_PRIVILEGED_TEMPLATE||DockerfilePrivileged.template",
                "dockerfileDir" : "process.env.DOCKERFILE_DIR||null",
                "appProtocol" : "$._.env.appProtocol",
                "appSuffix" : "$._.env.appSuffix",
                "appFile" :"process.env.APP_FILE||iot.tgz",
                "isRegistryPrivate": "process.env.IS_REGISTRY_PRIVATE||true",
                "registryUsername" :"process.env.REGISTRY_USERNAME||foo",
                "registryPassword" :"process.env.REGISTRY_PASSWORD||pleasechange",
                "registryAddress" :"process.env.REGISTRY_ADDRESS||registry.cafjs.com:32000"
            }
        },
        {
            "name": "appMgr",
            "module": "./plug_manager",
            "description": "Manages an application container.",
            "env" : {
                "__app_json__" : "app.json",
                "maxRetries" : "$._.env.maxRetries" ,
                "retryDelay" : "$._.env.retryDelay",
                "myId" : "$._.env.myId",
                "appProtocol" : "$._.env.appProtocol",
                "appSuffix" : "$._.env.appSuffix",
                "maxTokenRetries" : "process.env.MAX_TOKEN_RETRIES||30",
                "tokenDir" : "$._.env.tokenDir",
                "tokenFile" : "$._.env.tokenFile",
                "configVolume" : "$._.env.configVolume",
                "appDevices" : "$._.env.appDevices",
                "appPrivileged":  "$._.env.appPrivileged",
                "networks": ["network"],
                "trustedPubKeyFile" : "$._.env.trustedPubKeyFile",
                "privilegedNetwork" : "$._.env.privilegedNetwork",
                "debugApplication": "$._.env.debugApplication",
                "nodeDebugOptions" : "$._.env.nodeDebugOptions",
                "debuggerPort" : "$._.env.debuggerPort"
            },
            "components" : [
            ]
        },
        {
            "name": "cronUpdates",
            "module": "./cron_updates",
            "description": "Check for app updates cron",
            "env" : {
                "interval":"$._.env.longInterval"
            }
        }
    ]
}
