Change:
The selflink provided in the api response for component statuses (/api/v1/componentstatuses) is broken. For example: /api/v1/namespaces/componentstatuses/controller-manager (as specified in the response of /api/v1/componentstatuses), will return: { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "the server could not find the requested resource", "reason": "NotFound", "details": {}, "code": 404 } while: /api/v1/namespaces/default/componentstatuses/controller-manager, will return the data. In addition, and this is asked for better understanding, are the component statuses namespace scoped? as far as I understood etcd, the scheduler and the controller manager were shared across the kubernetes cluster. If they aren't namespace scoped, what is the logic behind specifing a namespace in these api requests (as shown in ): /api/v1/namespaces/{namespace}/componentstatuses /api/v1/namespaces/{namespace}/componentstatuses/{name} If they are in fact namespace scoped, would you be kind and share an explanation/link to a documentation page?
I agree that it doesn't make a lot of sense for this to be namespaced given what's in it at the moment. Given what I'd like it to contain, the namespace might make more sense in the future. The self link is super broken right now, though, probably due to lack of actual namespace. there's probably a bug in the go-restful setup code for this. Can you take a look at some point? Also it might be worth mentioning that this will probably change in the near future, is working on a replacement.
The whole /componentstatus API is just broken. It needs rewriting.

Discussion:
] }, { <del> "path": "/api/v1/namespaces/{namespace}/componentstatuses", </del> <ins> "path": "/api/v1/componentstatuses", </ins> "description": "API at /api/v1", "operations": [ {

"description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history.", "required": false, "allowMultiple": false <del> }, { "type": "string", "paramType": "path", "name": "namespace", "description": "object name and auth scope, such as for teams and projects", "required": true, "allowMultiple": false </del> } ], "responseMessages": [

] }, { <del> "path": "/api/v1/namespaces/{namespace}/componentstatuses/{name}", </del> <ins> "path": "/api/v1/componentstatuses/{name}", </ins> "description": "API at /api/v1", "operations": [ {

{ "type": "string", "paramType": "path", <del> "name": "namespace", "description": "object name and auth scope, such as for teams and projects", "required": true, "allowMultiple": false }, { "type": "string", "paramType": "path", </del> "name": "name", "description": "name of the ComponentStatus", "required": true,

] }, { <del> "path": "/api/v1/componentstatuses", "description": "API at /api/v1", "operations": [ { "type": "v1.ComponentStatusList", "method": "GET", "summary": "list objects of kind ComponentStatus", "nickname": "listComponentStatus", "parameters": [ { "type": "string", "paramType": "query", "name": "pretty", "description": "If 'true', then the output is pretty printed.", "required": false, "allowMultiple": false }, { "type": "string", "paramType": "query", "name": "labelSelector", "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", "required": false, "allowMultiple": false }, { "type": "string", "paramType": "query", "name": "fieldSelector", "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", "required": false, "allowMultiple": false }, { "type": "boolean", "paramType": "query", "name": "watch", "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", "required": false, "allowMultiple": false }, { "type": "string", "paramType": "query", "name": "resourceVersion", "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history.", "required": false, "allowMultiple": false } ], "responseMessages": [ { "code": 200, "message": "OK", "responseModel": "v1.ComponentStatusList" } ], "produces": [ "application/json" ], "consumes": [ "*/*" ] } ] }, { </del> "path": "/api/v1/namespaces/{namespace}/endpoints", "description": "API at /api/v1", "operations": [

"Minion", "Namespace", "PersistentVolume", <ins> "ComponentStatus", </ins> ) // these kinds should be excluded from the list of resources

Conditions: []api.ComponentCondition{ {Type: api.ComponentHealthy, Status: api.ConditionTrue, Message: "ok", Error: "nil"}, }, <del> ObjectMeta: api.ObjectMeta{Name: "servergood", Namespace: "test"}, </del> <ins> ObjectMeta: api.ObjectMeta{Name: "servergood"}, </ins> } bad := api.ComponentStatus{ Conditions: []api.ComponentCondition{ {Type: api.ComponentHealthy, Status: api.ConditionFalse, Message: "", Error: "bad status: 500"}, }, <del> ObjectMeta: api.ObjectMeta{Name: "serverbad", Namespace: "test"}, </del> <ins> ObjectMeta: api.ObjectMeta{Name: "serverbad"}, </ins> } unknown := api.ComponentStatus{ Conditions: []api.ComponentCondition{ {Type: api.ComponentHealthy, Status: api.ConditionUnknown, Message: "", Error: "fizzbuzz error"}, }, <del> ObjectMeta: api.ObjectMeta{Name: "serverunknown", Namespace: "test"}, </del> <ins> ObjectMeta: api.ObjectMeta{Name: "serverunknown"}, </ins> } return &api.ComponentStatusList{