{
    "servers": [
	    {
		    "name": "grpc_command",
			"port": 5000,
			"address":"",
			"type": "grpc",
			"routers": [
				{
					"_TODO":"Suport a router list, remove the package and service from the router",
					"package":"voltha",
					"service":"VolthaService",
					"router":"vcore"
				}
			]
		}
	],
	"routers": [
	    {
		    "name":"vcore",
			"package": "voltha",
			"service": "VolthaService",
            "routes": [
				{
					"name":"dev_manager",
            		"proto_descriptor":"voltha.pb",
		   			"type":"rpc_affinity_message",
		   			"association":"round_robin",
           			"routing_field": "id",
					"backend_cluster":"vcore",
					"_COMMENT":"Methods are naturally southbound affinity binding unless otherwise specified below",
					"methods":[ "CreateDevice",
								"EnableLogicalDevicePort",
								"DisableLogicalDevicePort",
								"UpdateLogicalDeviceFlowTable",
								"UpdateLogicalDeviceFlowGroupTable",
								"EnableDevice",
								"DisableDevice",
								"RebootDevice",
								"DeleteDevice",
								"DownloadImage",
								"CancelImageDownload",
								"ActivateImageUpdate",
								"RevertImageUpdate",
								"UpdateDevicePmConfigs",
								"CreateAlarmFilter",
								"UpdateAlarmFilter",
								"DeleteAlarmFilter",
								"SelfTest"],
					"_COMMENT":"If a method is northbound affinity binding then association is used to route",
					"_COMMENT":"but affinity is not set southbound but only based on the response",
					"_COMMENT":"Methods here MUST be specified above, this overrides thier default beahvior",
					"nb_binding_methods":["CreateDevice"],
					"_TODO":"Overrides not implemented yet, config ignored",
					"overrides": [
               			{"methods":["abc","def"], "routing_field":"id"},
               			{"methods":["ghi","jkl"]},
               			{"method":"mno", "routing_field":"id"},
               			{"method":"pqr"}
					]
				},
				{
					"name":"control",
		   			"type":"round_robin",
		   			"association":"round_robin",
					"backend_cluster":"vcore",
					"methods":[ 
								"UpdateLogLevel"
					]
				},
				{
					"name":"read_only",
		   			"type":"round_robin",
		   			"association":"round_robin",
					"backend_cluster":"vcore",
					"methods":[ "ListDevicePorts",
								"ListDevicePmConfigs",
								"GetImages",
								"GetImageDownloadStatus",
								"GetImageDownload",
								"ListImageDownloads",
								"ListDeviceFlows",
								"ListDeviceFlowGroups",
								"ListLogicalDeviceFlows",
								"ListLogicalDeviceFlowGroups",
								"ListDevices",
								"GetDevice",
								"GetDeviceType",
								"GetDeviceGroup",
								"GetLogicalDevice",
								"GetAlarmFilter",
								"ListLogicalDevices",
								"ListLogicalDevicePorts",
								"GetLogicalDevicePort",
								"GetVoltha",
								"ListCoreInstances",
								"ListAdapters",
								"ListDeviceIds",
								"ListDeviceTypes",
								"ListDeviceGroups",
								"ListAlarmFilters",
								"GetCoreInstance"
					]
				},
				{
					"name":"dev_manager_ofagent",
		   			"type":"binding",
		   			"_association":"round_robin",
					"binding": {
						"type":"header",
						"field":"voltha_backend_name",
						"method":"Subscribe",
						"association":"round_robin"
					},
					"backend_cluster":"vcore",
                    "methods":["StreamPacketsOut",
                               "Subscribe",
                               "ListLogicalDevices",
                               "ListDeviceFlowGroups",
                               "ListLogicalDeviceFlowGroups",
                               "ListDeviceFlows",
                               "UpdateLogicalDeviceFlowTable",
                               "UpdateLogicalDeviceFlowGroupTable",
                               "ListLogicalDeviceFlows"
					],
					"_TODO":"Overrides not implemented yet, config ignored",
					"overrides": [
               			{"methods":["abc","def"], "routing_field":"id"},
               			{"methods":["ghi","jkl"]},
               			{"method":"mno", "routing_field":"id"},
               			{"method":"pqr"}
					]
				}
            ]
		 }
	],
	"backend_clusters": [
	  {
        "name":"vcore",
		"backends":[ {
			"name":"vcore1",
			"type":"active_active",
			"association": {
				"strategy":"serial_number",
				"location":"header",
				"_TODO":"The key below needs to be implemented, currently hard coded",
				"key":"voltha_serial_number"
			},
			"connections": [ {
		   		"name":"vcore11",
		   		"addr":"127.0.0.1",
		   		"port":"5011"
			},
			{
				"name":"vcore12",
				"addr":"127.0.0.1",
				"port":"5012"
			}]
		},
		{
			"name":"vcore2",
			"type":"active_active",
			"association": {
				"strategy":"serial_number",
				"location":"header",
				"key":"voltha_serial_number"
			},
			"connections": [ {
		   		"name":"vcore21",
		   		"addr":"127.0.0.1",
		   		"port":"5021"
			},
			{
				"name":"vcore22",
				"addr":"127.0.0.1",
				"port":"5022"
			}]
		},
		{
			"name":"vcore3",
			"type":"active_active",
			"association": {
				"strategy":"serial_number",
				"location":"header",
				"key":"voltha_serial_number"
			},
			"connections": [ {
		   		"name":"vcore31",
		   		"addr":"127.0.0.1",
		   		"port":"5031"
			},
			{
				"name":"vcore32",
				"addr":"127.0.0.1",
				"port":"5032"
			}]
		}]
	  }
	],
	"api": {
		"_comment":"If this isn't defined then no api is available for dynamic configuration and queries",
		"address":"",
		"port":55554
	}
}
