
de.gesellix.docker.remote.api.client.ServiceApi.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of docker-remote-api-client Show documentation
Show all versions of docker-remote-api-client Show documentation
Client for the Docker remote api
The newest version!
/**
* Docker Engine API
*
* The Engine API is an HTTP API served by Docker Engine. It is the API the Docker client uses to communicate with the Engine, so everything the Docker client can do can be done with the API. Most of the client's commands map directly to API endpoints (e.g. `docker ps` is `GET /containers/json`). The notable exception is running containers, which consists of several API calls. # Errors The API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format: ``` { \"message\": \"page not found\" } ``` # Versioning The API is usually changed in each release, so API calls are versioned to ensure that clients don't break. To lock to a specific version of the API, you prefix the URL with its version, for example, call `/v1.30/info` to use the v1.30 version of the `/info` endpoint. If the API version specified in the URL is not supported by the daemon, a HTTP `400 Bad Request` error message is returned. If you omit the version-prefix, the current version of the API (v1.41) is used. For example, calling `/info` is the same as calling `/v1.41/info`. Using the API without a version-prefix is deprecated and will be removed in a future release. Engine releases in the near future should support this version of the API, so your client will continue to work even if it is talking to a newer Engine. The API uses an open schema model, which means server may add extra properties to responses. Likewise, the server will ignore any extra query parameters and request body properties. When you write clients, you need to ignore additional properties in responses to ensure they do not break when talking to newer daemons. # Authentication Authentication for registries is handled client side. The client has to send authentication details to various endpoints that need to communicate with registries, such as `POST /images/(name)/push`. These are sent as `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) (JSON) string with the following structure: ``` { \"username\": \"string\", \"password\": \"string\", \"email\": \"string\", \"serveraddress\": \"string\" } ``` The `serveraddress` is a domain/IP without a protocol. Throughout this structure, double quotes are required. If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), you can just pass this instead of credentials: ``` { \"identitytoken\": \"9cbaf023786cd7...\" } ```
*
* The version of the OpenAPI document: 1.41
*
*
* Please note:
* This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* Do not edit this file manually.
*/
package de.gesellix.docker.remote.api.client
import com.squareup.moshi.Json
import de.gesellix.docker.engine.DockerClientConfig
import de.gesellix.docker.engine.RequestMethod.DELETE
import de.gesellix.docker.engine.RequestMethod.GET
import de.gesellix.docker.engine.RequestMethod.POST
import de.gesellix.docker.remote.api.Service
import de.gesellix.docker.remote.api.ServiceCreateRequest
import de.gesellix.docker.remote.api.ServiceCreateResponse
import de.gesellix.docker.remote.api.ServiceUpdateRequest
import de.gesellix.docker.remote.api.ServiceUpdateResponse
import de.gesellix.docker.remote.api.core.ApiClient
import de.gesellix.docker.remote.api.core.ClientError
import de.gesellix.docker.remote.api.core.ClientException
import de.gesellix.docker.remote.api.core.Frame
import de.gesellix.docker.remote.api.core.MultiValueMap
import de.gesellix.docker.remote.api.core.RequestConfig
import de.gesellix.docker.remote.api.core.ResponseType
import de.gesellix.docker.remote.api.core.ServerError
import de.gesellix.docker.remote.api.core.ServerException
import de.gesellix.docker.remote.api.core.StreamCallback
import de.gesellix.docker.remote.api.core.Success
import de.gesellix.docker.remote.api.core.SuccessStream
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import java.net.HttpURLConnection
import java.net.Proxy
class ServiceApi(dockerClientConfig: DockerClientConfig = defaultClientConfig, proxy: Proxy?) : ApiClient(dockerClientConfig, proxy) {
constructor(dockerClientConfig: DockerClientConfig = defaultClientConfig) : this(dockerClientConfig, null)
companion object {
@JvmStatic
val defaultClientConfig: DockerClientConfig by lazy {
DockerClientConfig()
}
}
/**
* Create a service
*
* @param body
* @param xRegistryAuth A base64url-encoded auth configuration for pulling from private registries. Refer to the [authentication section](#section/Authentication) for details. (optional)
* @return ServiceCreateResponse
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceCreate(body: ServiceCreateRequest, xRegistryAuth: String?): ServiceCreateResponse {
val localVariableConfig = serviceCreateRequestConfig(body = body, xRegistryAuth = xRegistryAuth)
val localVarResponse = request(
localVariableConfig
)
return when (localVarResponse.responseType) {
ResponseType.Success -> (localVarResponse as Success<*>).data as ServiceCreateResponse
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceCreate
*
* @param body
* @param xRegistryAuth A base64url-encoded auth configuration for pulling from private registries. Refer to the [authentication section](#section/Authentication) for details. (optional)
* @return RequestConfig
*/
fun serviceCreateRequestConfig(body: ServiceCreateRequest, xRegistryAuth: String?): RequestConfig {
val localVariableBody = body
val localVariableQuery: MultiValueMap = mutableMapOf()
val localVariableHeaders: MutableMap = mutableMapOf()
xRegistryAuth?.apply { localVariableHeaders["X-Registry-Auth"] = this }
return RequestConfig(
method = POST,
path = "/services/create",
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody
)
}
/**
* Delete a service
*
* @param id ID or name of service.
* @return void
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceDelete(id: String) {
val localVariableConfig = serviceDeleteRequestConfig(id = id)
val localVarResponse = request(
localVariableConfig
)
return when (localVarResponse.responseType) {
ResponseType.Success -> Unit
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
if (localVarError.statusCode == HttpURLConnection.HTTP_NOT_FOUND) {
return
}
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceDelete
*
* @param id ID or name of service.
* @return RequestConfig
*/
fun serviceDeleteRequestConfig(id: String): RequestConfig {
val localVariableBody = null
val localVariableQuery: MultiValueMap = mutableMapOf()
val localVariableHeaders: MutableMap = mutableMapOf()
return RequestConfig(
method = DELETE,
path = "/services/{id}".replace("{" + "id" + "}", id),
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody
)
}
/**
* Inspect a service
*
* @param id ID or name of service.
* @param insertDefaults Fill empty fields with default values. (optional, default to false)
* @return Service
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceInspect(id: String, insertDefaults: Boolean?): Service {
val localVariableConfig = serviceInspectRequestConfig(id = id, insertDefaults = insertDefaults)
val localVarResponse = request(
localVariableConfig
)
return when (localVarResponse.responseType) {
ResponseType.Success -> (localVarResponse as Success<*>).data as Service
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceInspect
*
* @param id ID or name of service.
* @param insertDefaults Fill empty fields with default values. (optional, default to false)
* @return RequestConfig
*/
fun serviceInspectRequestConfig(id: String, insertDefaults: Boolean?): RequestConfig {
val localVariableBody = null
val localVariableQuery: MultiValueMap = mutableMapOf>()
.apply {
if (insertDefaults != null) {
put("insertDefaults", listOf(insertDefaults.toString()))
}
}
val localVariableHeaders: MutableMap = mutableMapOf()
return RequestConfig(
method = GET,
path = "/services/{id}".replace("{" + "id" + "}", id),
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody
)
}
/**
* List services
*
* @param filters A JSON encoded value of the filters (a `map[string][]string`) to process on the services list. Available filters: - `id=<service id>` - `label=<service label>` - `mode=[\"replicated\"|\"global\"]` - `name=<service name>` (optional)
* @param status Include service status, with count of running and desired tasks. (optional)
* @return kotlin.collections.List
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceList(filters: String?, status: Boolean?): List {
val localVariableConfig = serviceListRequestConfig(filters = filters, status = status)
val localVarResponse = request>(
localVariableConfig
)
return when (localVarResponse.responseType) {
ResponseType.Success -> (localVarResponse as Success<*>).data as List
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceList
*
* @param filters A JSON encoded value of the filters (a `map[string][]string`) to process on the services list. Available filters: - `id=<service id>` - `label=<service label>` - `mode=[\"replicated\"|\"global\"]` - `name=<service name>` (optional)
* @param status Include service status, with count of running and desired tasks. (optional)
* @return RequestConfig
*/
fun serviceListRequestConfig(filters: String?, status: Boolean?): RequestConfig {
val localVariableBody = null
val localVariableQuery: MultiValueMap = mutableMapOf>()
.apply {
if (filters != null) {
put("filters", listOf(filters.toString()))
}
if (status != null) {
put("status", listOf(status.toString()))
}
}
val localVariableHeaders: MutableMap = mutableMapOf()
return RequestConfig(
method = GET,
path = "/services",
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody,
elementType = Service::class.java
)
}
/**
* Get service logs
* Get `stdout` and `stderr` logs from a service. See also [`/containers/{id}/logs`](#operation/ContainerLogs). **Note**: This endpoint works only for services with the `local`, `json-file` or `journald` logging drivers.
* @param id ID or name of the service
* @param details Show service context and extra details provided to logs. (optional, default to false)
* @param follow Keep connection after returning logs. (optional, default to false)
* @param stdout Return logs from `stdout` (optional, default to false)
* @param stderr Return logs from `stderr` (optional, default to false)
* @param since Only return logs since this time, as a UNIX timestamp (optional, default to 0)
* @param timestamps Add timestamps to every log line (optional, default to false)
* @param tail Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines. (optional, default to "all")
* @return void
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceLogs(
id: String,
details: Boolean?,
follow: Boolean?,
stdout: Boolean?,
stderr: Boolean?,
since: Int?,
timestamps: Boolean?,
tail: String? = "all",
callback: StreamCallback, timeoutMillis: Long /*= 24.hours.toLongMilliseconds()*/
) {
val localVariableConfig = serviceLogsRequestConfig(id = id, details = details, follow = follow, stdout = stdout, stderr = stderr, since = since, timestamps = timestamps, tail = tail)
val localVarResponse = requestFrames(
localVariableConfig, true /* do services/tasks always have container.tty == false? */
)
when (localVarResponse.responseType) {
ResponseType.Success -> {
runBlocking {
launch {
withTimeout(timeoutMillis) {
callback.onStarting(this@launch::cancel)
((localVarResponse as SuccessStream<*>).data as Flow).collect { callback.onNext(it) }
callback.onFinished()
}
}
}
}
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceLogs
*
* @param id ID or name of the service
* @param details Show service context and extra details provided to logs. (optional, default to false)
* @param follow Keep connection after returning logs. (optional, default to false)
* @param stdout Return logs from `stdout` (optional, default to false)
* @param stderr Return logs from `stderr` (optional, default to false)
* @param since Only return logs since this time, as a UNIX timestamp (optional, default to 0)
* @param timestamps Add timestamps to every log line (optional, default to false)
* @param tail Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines. (optional, default to "all")
* @return RequestConfig
*/
fun serviceLogsRequestConfig(
id: String,
details: Boolean?,
follow: Boolean?,
stdout: Boolean?,
stderr: Boolean?,
since: Int?,
timestamps: Boolean?,
tail: String?
): RequestConfig {
val localVariableBody = null
val localVariableQuery: MultiValueMap = mutableMapOf>()
.apply {
if (details != null) {
put("details", listOf(details.toString()))
}
if (follow != null) {
put("follow", listOf(follow.toString()))
}
if (stdout != null) {
put("stdout", listOf(stdout.toString()))
}
if (stderr != null) {
put("stderr", listOf(stderr.toString()))
}
if (since != null) {
put("since", listOf(since.toString()))
}
if (timestamps != null) {
put("timestamps", listOf(timestamps.toString()))
}
if (tail != null) {
put("tail", listOf(tail.toString()))
}
}
val localVariableHeaders: MutableMap = mutableMapOf()
return RequestConfig(
method = GET,
path = "/services/{id}/logs".replace("{" + "id" + "}", id),
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody
)
}
/**
* enum for parameter registryAuthFrom
*/
enum class RegistryAuthFromServiceUpdate(val value: String) {
@Json(name = "spec")
Spec("spec"),
@Json(name = "previous-spec")
PreviousMinusSpec("previous-spec")
}
/**
* Update a service
*
* @param id ID or name of service.
* @param version The version number of the service object being updated. This is required to avoid conflicting writes. This version number should be the value as currently set on the service *before* the update. You can find the current version by calling `GET /services/{id}`
* @param body
* @param registryAuthFrom If the `X-Registry-Auth` header is not specified, this parameter indicates where to find registry authorization credentials. (optional, default to spec)
* @param rollback Set to this parameter to `previous` to cause a server-side rollback to the previous service spec. The supplied spec will be ignored in this case. (optional)
* @param xRegistryAuth A base64url-encoded auth configuration for pulling from private registries. Refer to the [authentication section](#section/Authentication) for details. (optional)
* @return ServiceUpdateResponse
* @throws UnsupportedOperationException If the API returns an informational or redirection response
* @throws ClientException If the API returns a client error response
* @throws ServerException If the API returns a server error response
*/
@Throws(UnsupportedOperationException::class, ClientException::class, ServerException::class)
fun serviceUpdate(
id: String,
version: Int,
body: ServiceUpdateRequest,
registryAuthFrom: RegistryAuthFromServiceUpdate? = RegistryAuthFromServiceUpdate.Spec,
rollback: String?,
xRegistryAuth: String?
): ServiceUpdateResponse {
val localVariableConfig = serviceUpdateRequestConfig(id = id, version = version, body = body, registryAuthFrom = registryAuthFrom, rollback = rollback, xRegistryAuth = xRegistryAuth)
val localVarResponse = request(
localVariableConfig
)
return when (localVarResponse.responseType) {
ResponseType.Success -> (localVarResponse as Success<*>).data as ServiceUpdateResponse
ResponseType.Informational -> throw UnsupportedOperationException("Client does not support Informational responses.")
ResponseType.Redirection -> throw UnsupportedOperationException("Client does not support Redirection responses.")
ResponseType.ClientError -> {
val localVarError = localVarResponse as ClientError<*>
throw ClientException("Client error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
ResponseType.ServerError -> {
val localVarError = localVarResponse as ServerError<*>
throw ServerException("Server error : ${localVarError.statusCode} ${localVarError.message.orEmpty()}", localVarError.statusCode, localVarResponse)
}
}
}
/**
* To obtain the request config of the operation serviceUpdate
*
* @param id ID or name of service.
* @param version The version number of the service object being updated. This is required to avoid conflicting writes. This version number should be the value as currently set on the service *before* the update. You can find the current version by calling `GET /services/{id}`
* @param body
* @param registryAuthFrom If the `X-Registry-Auth` header is not specified, this parameter indicates where to find registry authorization credentials. (optional, default to spec)
* @param rollback Set to this parameter to `previous` to cause a server-side rollback to the previous service spec. The supplied spec will be ignored in this case. (optional)
* @param xRegistryAuth A base64url-encoded auth configuration for pulling from private registries. Refer to the [authentication section](#section/Authentication) for details. (optional)
* @return RequestConfig
*/
fun serviceUpdateRequestConfig(
id: String,
version: Int,
body: ServiceUpdateRequest,
registryAuthFrom: RegistryAuthFromServiceUpdate?,
rollback: String?,
xRegistryAuth: String?
): RequestConfig {
val localVariableBody = body
val localVariableQuery: MultiValueMap = mutableMapOf>()
.apply {
put("version", listOf(version.toString()))
if (registryAuthFrom != null) {
put("registryAuthFrom", listOf(registryAuthFrom.value))
}
if (rollback != null) {
put("rollback", listOf(rollback.toString()))
}
}
val localVariableHeaders: MutableMap = mutableMapOf()
xRegistryAuth?.apply { localVariableHeaders["X-Registry-Auth"] = this }
return RequestConfig(
method = POST,
path = "/services/{id}/update".replace("{" + "id" + "}", id),
query = localVariableQuery,
headers = localVariableHeaders,
body = localVariableBody
)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy