* Setup buf to see and process protos correctly. This commit adds a proposed directory structure for protos. Included is a rough draft of the Ec2Catalog protos. * Add host and host_catalog service apis. This also has for the first time the move away from holding individual ids for resources and instead using the full uri path as the api facing identifier. There are some issues with the swagger generation stripping out the format of the path matching so currently only PATCH uses the approach I would like to move to. In follow up commits I'll try to either get swagger to display the correct expected paths or I'll resolve if that is even needed by our clients. * Move all protos and generated files to under the internal directory. This also required updating the buf config to explicitly name the exluded linted proto files under oplog since previously /internal/ was listed as a root in buf. Future commit will move oplog proto files to be with the others. * Moved oplog related protos to under the proto directory and regenerated. * Update the oplog protos to be compliant with buf lint. * Clean up comments in tools. * Merged in recent changes to oplog protos. * Add resource result messages to contain the read only fields and separate them from the writable fields. * Merge the ec2 catalog resources in with the more generic host_catalog resource. * Cleaning the generated swagger. This included adding summaries for each proto rpc method, Making the resources be the full fqn, removing the default error, and a few other tweaks. * Make project plural in the paths. * Adding the ability to add and remove hosts from a host set. * Add the ignore result limit for host set request. * Make size and host lists read only. * Add documentation about what host references are allowed to be added. * Remove ignore result limit when listing items. These can be added in later. * Add handlers and tests for unimplemented services. * Add bootstrap target and update how tools are built (#13) * Update tool installation method, add bootstrap target to makefile * Changing org to orgs in all paths and org param to org_id. * Adding tests for unimplemented service implementations. Co-authored-by: Jeff Mitchell <jeffrey.mitchell@gmail.com>
1115 lines
34 KiB
JSON
1115 lines
34 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"title": "Controller API",
|
|
"description": "API for managing resources associated with Controllers.",
|
|
"version": "0.0.1"
|
|
},
|
|
"schemes": [
|
|
"https",
|
|
"http"
|
|
],
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"paths": {
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs": {
|
|
"get": {
|
|
"summary": "Gets a list of HostCatalogs",
|
|
"operationId": "HostCatalogService_ListHostCatalogs",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.ListHostCatalogsResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostCatalogService"
|
|
]
|
|
},
|
|
"post": {
|
|
"summary": "Creates a HostCatalog",
|
|
"description": "Creates a single host catalog under the specified org and project",
|
|
"operationId": "HostCatalogService_CreateHostCatalog",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostCatalogService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/host-sets": {
|
|
"get": {
|
|
"summary": "List all HostSets under the specific catalog",
|
|
"operationId": "HostSetService_ListHostSets",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.ListHostSetsResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
},
|
|
"post": {
|
|
"summary": "Create a HostSet",
|
|
"operationId": "HostSetService_CreateHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/host-sets/{id}": {
|
|
"get": {
|
|
"summary": "Get a single HostSet",
|
|
"operationId": "HostSetService_GetHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a HostSet",
|
|
"operationId": "HostSetService_DeleteHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.DeleteHostSetResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
},
|
|
"patch": {
|
|
"summary": "Update a HostSet",
|
|
"operationId": "HostSetService_UpdateHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/host-sets/{id}:add-hosts": {
|
|
"post": {
|
|
"summary": "Adds existing Hosts to the Host Set",
|
|
"description": "Adds the hosts to this Host Set if possible. All hosts added must be a child of the same host catalog this host set is a child of.",
|
|
"operationId": "HostSetService_AddToHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.AddToHostSetResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/host-sets/{id}:remove-hosts": {
|
|
"post": {
|
|
"summary": "Removes Hosts to the Host Set",
|
|
"description": "Removes the hosts from this Host Set if present. If it is not present then no action is taken and no error is returned.",
|
|
"operationId": "HostSetService_RemoveFromHostSet",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.RemoveFromHostSetResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"description": "This host set's id.",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostSetService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/hosts": {
|
|
"get": {
|
|
"summary": "List all Hosts for the specified catalog",
|
|
"operationId": "HostService_ListHosts",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.ListHostsResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostService"
|
|
]
|
|
},
|
|
"post": {
|
|
"summary": "Create a single Host",
|
|
"operationId": "HostService_CreateHost",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{host_catalog_id}/hosts/{id}": {
|
|
"get": {
|
|
"summary": "Gets a single Host",
|
|
"operationId": "HostService_GetHost",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostService"
|
|
]
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a Host",
|
|
"operationId": "HostService_DeleteHost",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.DeleteHostResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostService"
|
|
]
|
|
},
|
|
"patch": {
|
|
"summary": "Update a Host",
|
|
"operationId": "HostService_UpdateHost",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "host_catalog_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostService"
|
|
]
|
|
}
|
|
},
|
|
"/v1/orgs/{org_id}/projects/{project_id}/host-catalogs/{id}": {
|
|
"get": {
|
|
"summary": "Gets a single HostCatalog",
|
|
"description": "Get's a single Host Catalog with the provided identifier.",
|
|
"operationId": "HostCatalogService_GetHostCatalog",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "view",
|
|
"in": "query",
|
|
"required": false,
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostCatalogService"
|
|
]
|
|
},
|
|
"delete": {
|
|
"summary": "Deletes a HostCatalog",
|
|
"operationId": "HostCatalogService_DeleteHostCatalog",
|
|
"responses": {
|
|
"200": {
|
|
"description": "A successful response.",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.v1.DeleteHostCatalogResponse"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostCatalogService"
|
|
]
|
|
},
|
|
"patch": {
|
|
"summary": "Updates a HostCatalog",
|
|
"operationId": "HostCatalogService_UpdateHostCatalog",
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "org_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "project_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
],
|
|
"tags": [
|
|
"controller.api.v1.HostCatalogService"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"controller.api.resource.v1.Ec2CatalogDetails": {
|
|
"type": "object",
|
|
"properties": {
|
|
"regions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The AWS regions from which this catalog will retrieve the EC2 instances."
|
|
},
|
|
"access_key": {
|
|
"type": "string",
|
|
"description": "The access key used for authenticating with AWS when retrieving EC2 instance details."
|
|
},
|
|
"secret_key": {
|
|
"type": "string",
|
|
"description": "Input only."
|
|
},
|
|
"rotate": {
|
|
"type": "boolean",
|
|
"format": "boolean",
|
|
"description": "This value will never be returned in a response."
|
|
}
|
|
}
|
|
},
|
|
"controller.api.resource.v1.Host": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uri": {
|
|
"type": "string",
|
|
"description": "Output only.",
|
|
"readOnly": true
|
|
},
|
|
"friendly_name": {
|
|
"type": "string"
|
|
},
|
|
"created_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host was created.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"updated_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host was last updated.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"disabled": {
|
|
"type": "boolean",
|
|
"format": "boolean",
|
|
"description": "Marks the host as disabled. Default is false."
|
|
},
|
|
"address": {
|
|
"type": "string",
|
|
"description": "This field is required."
|
|
}
|
|
},
|
|
"description": "Host contains all fields related to a Host resource."
|
|
},
|
|
"controller.api.resource.v1.HostCatalog": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uri": {
|
|
"type": "string",
|
|
"description": "Output only.",
|
|
"readOnly": true
|
|
},
|
|
"friendly_name": {
|
|
"type": "string"
|
|
},
|
|
"created_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host_catalog was created.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"updated_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host_catalog was last updated.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"disabled": {
|
|
"type": "boolean",
|
|
"format": "boolean",
|
|
"description": "Marks the host_catalog as disabled. Default is false."
|
|
},
|
|
"static_host_catalog_details": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.StaticCatalogDetails"
|
|
},
|
|
"ec2_host_catalog_details": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Ec2CatalogDetails"
|
|
},
|
|
"type": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalogType"
|
|
}
|
|
},
|
|
"description": "HostCatalog organizes Hosts into HostSets."
|
|
},
|
|
"controller.api.resource.v1.HostCatalogType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"HOST_CATALOG_TYPE_UNSPECIFIED",
|
|
"HOST_CATALOG_TYPE_EC2",
|
|
"HOST_CATALOG_TYPE_STATIC"
|
|
],
|
|
"default": "HOST_CATALOG_TYPE_UNSPECIFIED"
|
|
},
|
|
"controller.api.resource.v1.HostSet": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uri": {
|
|
"type": "string",
|
|
"description": "Output only.",
|
|
"readOnly": true
|
|
},
|
|
"friendly_name": {
|
|
"type": "string"
|
|
},
|
|
"created_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host_set was created.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"updated_time": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "The time this host_set was last updated.\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"disabled": {
|
|
"type": "boolean",
|
|
"format": "boolean",
|
|
"description": "Marks the host_set as disabled. Default is false."
|
|
},
|
|
"size": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "The total count of hosts in this host set\nOutput only.",
|
|
"readOnly": true
|
|
},
|
|
"hosts": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
},
|
|
"description": "A list of hosts in this host set.\nTODO: Figure out if this should be in the basic HostSet view and what view to use on the Hosts.\nOutput only.",
|
|
"readOnly": true
|
|
}
|
|
},
|
|
"description": "HostSets are a collection of sets created and managed by a catalog."
|
|
},
|
|
"controller.api.resource.v1.StaticCatalogDetails": {
|
|
"type": "object"
|
|
},
|
|
"controller.api.v1.AddToHostSetResponse": {
|
|
"type": "object"
|
|
},
|
|
"controller.api.v1.CreateHostCatalogResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uri": {
|
|
"type": "string"
|
|
},
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.CreateHostResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ref": {
|
|
"type": "string"
|
|
},
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.CreateHostSetResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uri": {
|
|
"type": "string"
|
|
},
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.DeleteHostCatalogResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"existed": {
|
|
"type": "boolean",
|
|
"format": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.DeleteHostResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"existed": {
|
|
"type": "boolean",
|
|
"format": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.DeleteHostSetResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"existed": {
|
|
"type": "boolean",
|
|
"format": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.GetHostCatalogResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.GetHostResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.GetHostSetResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.ListHostCatalogsResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.ListHostSetsResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.ListHostsResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.RemoveFromHostSetResponse": {
|
|
"type": "object"
|
|
},
|
|
"controller.api.v1.UpdateHostCatalogResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostCatalog"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.UpdateHostResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.Host"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.v1.UpdateHostSetResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"item": {
|
|
"$ref": "#/definitions/controller.api.resource.v1.HostSet"
|
|
}
|
|
}
|
|
},
|
|
"controller.api.view.v1.View": {
|
|
"type": "string",
|
|
"enum": [
|
|
"BASIC",
|
|
"FULL"
|
|
],
|
|
"default": "BASIC"
|
|
},
|
|
"google.protobuf.FieldMask": {
|
|
"type": "object",
|
|
"properties": {
|
|
"paths": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The set of field mask paths."
|
|
}
|
|
},
|
|
"description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is unmappable.",
|
|
"title": "`FieldMask` represents a set of symbolic field paths, for example:"
|
|
}
|
|
}
|
|
}
|