diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..94beb3c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +HELP.md +target/ +log/ +logs/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +*.class +*.log +effective-pom.xml + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..7a4a3ea2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..e1ec020e --- /dev/null +++ b/NOTICE @@ -0,0 +1,58 @@ +Easycontainers +Copyright 2024 Accenture AS + +The Easycontainers Project is developed and maintained by Thomas Muller (thomas.muller@accenture.com) (me.thomas.muller@gmail.com). + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Additional notices: + +1. This product includes software developed by JetBrains (http://www.jetbrains.com/): + - Kotlin Reflect + - Kotlin Standard Library + The Kotlin libraries are used under the terms of the Apache License 2.0. + +2. This product includes software from the Fabric8 project (https://fabric8.io/): + - Kubernetes Client for Java + The Kubernetes Client is used under the terms of the Apache License 2.0. + +3. This product includes software developed by the Docker Java project (https://github.com/docker-java/docker-java): + - Docker Java API Client + - Docker Java Transport OkHttp + The Docker Java API Client is used under the terms of the Apache License 2.0. + +4. This product includes software from the Apache Commons project (http://commons.apache.org/): + - commons-compress + - commons-lang3 + - commons-exec + - commons-io + The Apache Commons libraries are used under the terms of the Apache License 2.0. + +5. This product includes software developed by QOS.ch (http://www.qos.ch/): + - SLF4J + - Logback Classic Module + The logging frameworks are used under the terms of the MIT License and the Eclipse Public License 1.0 respectively. + +7. This product includes software developed by Awaitility (https://github.com/awaitility/awaitility): + - Awaitility + The Awaitility library is used under the terms of the Apache License 2.0. + +8. This product includes software developed by Danilo Pianini (https://github.com/DanySK): + - khttp + The khttp library is used under the terms of the MIT License. + +9. This product includes software developed by Michael Wiede (https://github.com/mwiede): + - JSch + The JSch library is used under the terms of the MIT License. + +10. This product includes software from the JUnit Team (https://junit.org/): + - JUnit Jupiter API + - JUnit Jupiter Engine + - JUnit Jupiter Params + The JUnit libraries are used under the terms of the Eclipse Public License 1.0. + +Disclaimer: + +This is not an official translation of the Apache License. It is simply a helpful guide to include necessary legal notices and attributions. It is the responsibility of the user of the license to ensure compliance with any applicable local laws and regulations. + diff --git a/README.md b/README.md new file mode 100644 index 00000000..0c315988 --- /dev/null +++ b/README.md @@ -0,0 +1,318 @@ +# Easycontainers + +## Table of Contents + +1. [Introduction](#Introduction) +2. [Getting Started](#Getting-Started) + 1. [Prerequisites](#Prerequisites) + 2. [Starting a container](#Starting-a-container) + 3. [Building and deploying a custom container](#Building-and-deploying-a-custom-container) + 4. [Transferring files to and from a container](#Transferring-files-to-and-from-a-container) + 5, [Executing commands in a running container](#Running-commands-in-a-running-container) +3. [Requirements](#Requirements) + 1. [Docker](#Docker) + 2. [Kubernetes](#Kubernetes) +4. [Configuration](#Configuration) + 1. [Docker specifics](#Docker-specifics) + 2. [Kubernetes specifics](#Kubernetes-specifics) +5. [Examples](#Examples) + 1. [Docker examples](#Docker-examples) + 2. [Kubernetes examples](#Kubernetes-examples) +6. [API Reference](#API-Reference) +7. [Known Issues](#Known-Issues) +8. [Troubleshooting](#Troubleshooting) +9. [FAQs](#FAQs) +10. [Community and Support](#Community-and-Support) +11. [Acknowledgments](#Acknowledgments) +12. [Roadmap](#Roadmap) +13. [Contributing](#Contributing) +14. [License](#License) + +## Introduction + +**Easycontainers** is a streamlined Kotlin library, that can be used in both Kotlin and Java projects, designed to facilitate the creation and management of containers across both Kubernetes and Docker environments. By offering a straightforward, platform-agnostic API, it simplifies the complexities typically associated with container orchestration, making it an essential tool for developers looking to enhance their productivity and efficiency. + +Born from the practical insights gained from the [Testcontainers](https://www.testcontainers.org/) library, Easycontainers extends these concepts to support not just ephemeral testing containers but also stable production environments. It addresses a critical gap for Kubernetes users by eliminating the need for Docker-in-Docker (DinD) solutions, providing a more integrated and reliable approach to container management. + +**Key Features:** +- **Unified API**: Manage Docker and Kubernetes containers with ease, thanks to a cohesive and intuitive API. +- **Flexibility**: Ideal for a wide array of applications, from testing to CI pipelines and production deployments. +- **Independence**: Operates independently of the Junit-test lifecycle, offering versatility beyond just testing scenarios. + +With Easycontainers, developers gain a versatile tool that streamlines container management, freeing them to focus more on development and less on the operational intricacies of containers. + +## Getting Started + +### Prerequisites + +#### Kubernetes +For running Kubernetes containers, +access to a Kubernetes cluster is required with a valid kubeconfig file located in the user's home directory. +Make sure the kubeconfig file is correctly configured to access the desired cluster with the necessary permissions. +For a KinD setup, see [kind-env](https://github.com/acntech/easycontainers/tree/main/src/test/resources/env/kind). + +#### Docker +For running Docker containers, access to a Docker daemon is required. +Make sure the Docker daemon is running and accessible from the host machine, +either on localhost or as dictated by the DOCKER_HOST environment variable. +For an example setup, see [docker-env](https://github.com/acntech/easycontainers/tree/main/src/test/resources/env/docker). + +#### Development Environment +- Java 21 or higher +- Kotlin 1.9.0 or higher +- Maven 3.8.4 or higher +- KinD 0.22 or higher (for Kubernetes) +- Docker 26.0 or higher (for Docker) +- See example environment setup scripts in the [test-env](https://github.com/acntech/easycontainers/tree/main/src/test/resources/env) folder for running the tests. + + +### Starting a container + +The following example shows how to create a (test) Elasticsearch container in Kubernetes: + +```kotlin +@Test +fun doElasticsearchStuff() { + val container = GenericContainer.builder().apply { + withContainerPlatformType(ContainerPlatformType.KUBERNETES) + withName("elasticsearch-test") + withNamespace("test") + withImage(ImageURL.of("docker.elastic.co/elasticsearch/elasticsearch:8.11.3")) + withEnv("discovery.type", "single-node") + withEnv("xpack.security.enabled", "false") + withEnv("xpack.security.http.ssl.enabled", "false") + withEnv("xpack.security.transport.ssl.enabled", "false") + withEnv("CLUSTER_NAME", "dev-cluster") + withEnv("NODE_NAME", "dev-node") + withEnv("ELASTIC_PASSWORD", "passwd") + withEnv("ES_JAVA_OPTS", "-Xms1024m -Xmx1024m") + withEnv("ES_DEV_MODE", "true") + withEnv("ES_LOG_LEVEL", "DEBUG") + withExposedPort(PortMappingName.HTTP, NetworkPort.of(9200)) + withExposedPort(PortMappingName.TRANSPORT, 9300) + withPortMapping(9200, 30200) + withPortMapping(9300, 30300) + withIsEphemeral(true) + withLogLineCallback { line -> println("ELASTIC-OUTPUT: $line") } + }.build() + + container.getRuntime().start() + + // Do something with the container + + // Stop it + container.getRuntime().stop() + + // Delete it + container.getRuntime().delete() +} +``` + +Note that the ports are mapped via NodePort when running the test from outside the cluster. If you run the code from a pod inside the cluster, the mapped ports can be the same as the exposed ports. +

+To run the above example using Docker as the target container platform, just replace the `withContainerPlatformType(ContainerPlatformType.KUBERNETES)` with `withContainerPlatformType(ContainerPlatformType.DOCKER)`. + +### Building and deploying a custom container + +The following example shows how to build and deploy a custom container in Docker: + +```kotlin + +private const val REGISTRY = "localhost:5000" // Replace with your own registry + +// Simple Dockerfile +private val dockerfileContent = """ + FROM alpine:latest + COPY log_time.sh /usr/local/bin/log_time.sh + RUN chmod +x /usr/local/bin/log_time.sh + CMD sh -c "/usr/local/bin/log_time.sh" + """.trimIndent() + +// Simple script that logs the time every 2 seconds +private val logTimeScriptContent = """ + #!/bin/sh + while true; do + echo "The time is now $(date)" + sleep 2 + done + """.trimIndent() + +fun buildAndRunCustomContainer() { + val imageNameVal = "simple-alpine" + + DockerRegistryUtils.deleteImage("http://$REGISTRY/test", imageNameVal) + val tempDir = Files.createTempDirectory("dockercontext-").toString() + log.debug("Temp [.gitignore](.gitignore)dir for docker-context created: {}", tempDir) + val dockerfile = File(tempDir, "Dockerfile") + val logTimeScript = File(tempDir, "log_time.sh") + dockerfile.writeText(dockerfileContent) + logTimeScript.writeText(logTimeScriptContent) + + log.debug("Dockerfile created: {}", dockerfile.absolutePath) + log.debug("log_time.sh created: {}", logTimeScript.absolutePath) + + val imageBuilder = K8sContainerImageBuilder() + .withName(ImageName.of(imageNameVal)) + .withImageRegistry("$REGISTRY/test/$imageName:latest") + .withNamespace("test") + .withDockerContextDir(File(tempDir).absolutePath) + .withLogLineCallback { line -> println("KANIKO-JOB-OUTPUT: ${Instant.now()} $line") + } + + imageBuilder.buildImage() + // INVARIANT: The image is built and pushed to the registry + + // Test deploying the custom image in Docker + val container = GenericContainer.builder().apply { + withContainerPlatformType(ContainerPlatformType.DOCKER) + withName("simple-alpine-test") + withNamespace("test") + withImage("$REGISTRY/test/$imageName:latest") + withIsEphemeral(true) + withLogLineCallback { line -> println("SIMPLE-ALPINE-OUTPUT: $line") } + }.build() + + val runtime = container.getRuntime() + runtime.start() + + TimeUnit.SECONDS.sleep(120) // Lean back and watch the time being logged every 2 seconds + + runtime.stop() + runtime.delete() +} + ``` + +To run the above example in Kubernetes, just replace the `withContainerPlatformType(ContainerPlatformType.DOCKER)` with `withContainerPlatformType(ContainerPlatformType.KUBERNETES)`. This will build the image using a Kubernetes Kaniko-job and then deploy the image as a single container service in Kubernetes. + +### Transferring files to and from a container + +The following example shows how to transfer a file from the local file system to a running container: + +```kotlin + val localFile = File("hello.txt") + localFile.writeText("Hello, world!") + container.putFile(localFile, UnixDir.of("/tmp")) +``` + +The following example shows how to transfer a (remote) file from a running container to the local file system (a temporary file is created for the downloaded file): + +```kotlin + val path = container.getFile(UnixDir.of("/tmp"), "hello.txt") + val content = Files.readString(path) + log.debug("Content of file:\n$content") +``` + +In order to specify a target file (for the downloaded file), just specify it as an argument: + +```kotlin + val path = container.getFile(UnixDir.of("/tmp"), "hello.txt", Path.of("./hello-local.txt")) + val content = Files.readString(path) + log.debug("Content of file:\n$content") +``` + +The following example shows how to transfer a directory from the local file system to a running container: +```kotlin + val size = container.putDirectory(Path.of("./resources"), UnixDir.of("/tmp")) +``` + +The following example shows how to transfer a directory from a running container to the local file system: +```kotlin + val (parentPath, paths) = container.getDirectory(UnixDir.of("/tmp/resources"), Files.createTempDirectory("container-resources")) + for (path in paths) { + if (Files.isRegularFile(path)) { + val content = Files.readString(path) + log.debug("Content of file $path is :\n$content") + } + } +``` + +### Executing commands in a running container + +The following example shows how to run a command in a running container and capture the output: + +```kotlin + val input = ByteArrayOutputStream() + val (exitCode, stdErr) = container.execute( + command = List.of("ls","-la", "/"), + output = output) + log.debug("Result of command:\n${output.toUtf8String}") +``` + +The following example shows how to run a command with input in a running container, and capture the output: + +```kotlin + val inputString = "Hello, world!" + val input = inputString.byteInputStream() + val output = ByteArrayOutputStream() // Output stream to capture the output - should be the same as the input + + val (exitCode, stderr) = container.execute( + Executable.of("cat"), + null, + true, + UnixDir.of(FORWARD_SLASH), + input, + output, + 20, + TimeUnit.SECONDS + ) + + val stdout = output.toUtf8String() +``` + +## Requirements + +### Docker +Developed using Docker [version 26.0](https://docs.docker.com/engine/release-notes/26.0/). + +### Kubernetes +Developed using Kubernetes [version 1.29.2](https://kubernetes.io/releases/) on Kind [version 0.22](https://github.com/kubernetes-sigs/kind/releases). + +## Configuration +See the [test-env](https://github.com/acntech/easycontainers/tree/main/src/test/resources/env) folder for scripts and resources to set up a local environment for running the tests. + +### Docker specifics + +### Kubernetes specifics +In the current version, when running outside a k8s cluster, the Kubernetes runtime only supports using the default `kubeconfig` file located in the user's home directory. If using the library inside a Kubernetes cluster (i.e. in a pod/container), the Fabric8 default approach is used to authenticate the client, i.e. the mounted service account token at `/var/run/secrets/kubernetes.io/serviceaccount/token`. Make sure the service account has the necessary permissions to create and manage resources in the target namespace. + +## Examples + +### Docker examples +TODO + +### Kubernetes examples +TODO + +## API Reference +* [JavaDoc](https://blog.acntech.no/easycontainers/apidocs/javadoc/index.html) +* [KDoc](https://blog.acntech.no/easycontainers/apidocs/kdoc/index.html) + +## Known Issues +- The Docker container runtime implementation does not support executing commands with stdin input due to a "hijacking session" issue that is not yet resolved. +- More test cases are needed to ensure the library is robust and reliable for both Docker and Kubernetes container runtimes in production environments. + +## Troubleshooting +TODO + +## FAQs +TODO + +## Community and Support +For issues and bugs please submit an issue on the [GitHub repository](https://github.com/acntech/kollective-query/issues). Also feel free to contact the main contributor and maintainer directly at his [personal email](mailto:me.thomas.muller@gmail.com) or [work email](mailto:thomas.muller@accenture.com). + +## Acknowledgments +TODO + +## Roadmap +- [x] Add support for Kubernetes Jobs as a container runtime. +- [ ] Add conditional wait strategies for containers - similar to Testcontainers, see [here](https://java.testcontainers.org/features/startup_and_waits/). +- [ ] Add support for binary (frame-by-frame) stdout output from containers. +- [ ] Add specific container implementations for popular databases and services. +- [ ] Add support for multi-pod/multi-container deployments in both Docker and Kubernetes. +- [ ] Convert all tests to use [Testcontainers](https://testcontainers.com/) - using either the official [K3s module](https://java.testcontainers.org/modules/k3s/), or the community contributed [KinD module](https://testcontainers.com/modules/kindcontainer/). + +## Contributing +[Thomas Muller](mailto:thomas.muller@accenture.com) ([personal email](mailto:me.thomas.muller@gmail.com)): main contributor and maintainer + +## License +This software is licensed under the Apache 2 license, see [LICENSE](https://github.com/acntech/easycontainers/blob/main/LICENSE) and [NOTICE](https://github.com/acntech/easycontainers/blob/main/NOTICE) for details. \ No newline at end of file diff --git a/apidocs/javadoc/allclasses.html b/apidocs/javadoc/allclasses.html new file mode 100644 index 00000000..5d417fcd --- /dev/null +++ b/apidocs/javadoc/allclasses.html @@ -0,0 +1,176 @@ + + + All Classes + + + + + + + + + + + + + + + + +

All Classes

+
+ +
+ + diff --git a/apidocs/javadoc/deprecated.html b/apidocs/javadoc/deprecated.html new file mode 100644 index 00000000..274aea80 --- /dev/null +++ b/apidocs/javadoc/deprecated.html @@ -0,0 +1,154 @@ + + + + Deprecated + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Deprecated API

+

Contents

+ +
+
+ +
+
+ + + diff --git a/apidocs/javadoc/dokka-javadoc-stylesheet.css b/apidocs/javadoc/dokka-javadoc-stylesheet.css new file mode 100644 index 00000000..267807e4 --- /dev/null +++ b/apidocs/javadoc/dokka-javadoc-stylesheet.css @@ -0,0 +1,10 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +pre.wrap-overflow { + overflow-x: auto; + white-space: pre-wrap; + white-space: -moz-pre-wrap; + word-wrap: break-word; +} diff --git a/apidocs/javadoc/element-list b/apidocs/javadoc/element-list new file mode 100644 index 00000000..de01c6c0 --- /dev/null +++ b/apidocs/javadoc/element-list @@ -0,0 +1,52 @@ +$dokka.format:javadoc-v1 +$dokka.linkExtension:html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/custom/KanikoContainer.Companion.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html +$dokka.location:no.acntech.easycontainers.model/Arg.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Arg.Companion.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Args.Companion.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion///PointingToDeclaration/no/acntech/easycontainers/model/CPU.Companion.html +$dokka.location:no.acntech.easycontainers.model/Container.State///PointingToDeclaration/no/acntech/easycontainers/model/Container.State.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ContainerFileName.Companion.html +$dokka.location:no.acntech.easycontainers.model/ContainerName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ContainerName.Companion.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey.Companion///PointingToDeclaration/no/acntech/easycontainers/model/EnvVarKey.Companion.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue.Companion///PointingToDeclaration/no/acntech/easycontainers/model/EnvVarValue.Companion.html +$dokka.location:no.acntech.easycontainers.model/Executable.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Executable.Companion.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Host.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageName.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageTag.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageTag.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageURL.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageURL.Companion.html +$dokka.location:no.acntech.easycontainers.model/LabelKey.Companion///PointingToDeclaration/no/acntech/easycontainers/model/LabelKey.Companion.html +$dokka.location:no.acntech.easycontainers.model/LabelValue.Companion///PointingToDeclaration/no/acntech/easycontainers/model/LabelValue.Companion.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Memory.Companion.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Namespace.Companion.html +$dokka.location:no.acntech.easycontainers.model/NetworkName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/NetworkName.Companion.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion///PointingToDeclaration/no/acntech/easycontainers/model/NetworkPort.Companion.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/PortMappingName.Companion.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion///PointingToDeclaration/no/acntech/easycontainers/model/RegistryURL.Companion.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/RepositoryName.Companion.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion.Companion///PointingToDeclaration/no/acntech/easycontainers/model/SemanticVersion.Companion.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion///PointingToDeclaration/no/acntech/easycontainers/model/UnixDir.Companion.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Verbosity.Companion.html +$dokka.location:no.acntech.easycontainers.model/VolumeName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/VolumeName.Companion.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime.Companion///PointingToDeclaration/no/acntech/easycontainers/AbstractContainerRuntime.Companion.html +$dokka.location:no.acntech.easycontainers/GenericContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/GenericContainer.Companion.html +$dokka.location:no.acntech.easycontainers/GenericContainer.GenericContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.Companion///PointingToDeclaration/no/acntech/easycontainers/ImageBuilder.Companion.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State///PointingToDeclaration/no/acntech/easycontainers/ImageBuilder.State.html +no.acntech.easycontainers +no.acntech.easycontainers.custom +no.acntech.easycontainers.docker +no.acntech.easycontainers.kubernetes +no.acntech.easycontainers.model +no.acntech.easycontainers.model.base +no.acntech.easycontainers.output +no.acntech.easycontainers.util.collections +no.acntech.easycontainers.util.io +no.acntech.easycontainers.util.lang +no.acntech.easycontainers.util.net +no.acntech.easycontainers.util.platform +no.acntech.easycontainers.util.text +no.acntech.easycontainers.util.time + diff --git a/apidocs/javadoc/index-files/index-1.html b/apidocs/javadoc/index-files/index-1.html new file mode 100644 index 00000000..9a961e90 --- /dev/null +++ b/apidocs/javadoc/index-files/index-1.html @@ -0,0 +1,365 @@ + + + + A-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

A

+
+ +
+ + + + AbstractContainerRuntime + + - class in no.acntech.easycontainers + + +
+
AbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime.
+ + +
+ + + + AbstractContainerRuntime.Companion + + - class in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
 
+ + +
+ + + + AccessChecker + + - class in no.acntech.easycontainers.kubernetes + + +
+
AccessChecker is a class that provides methods to check access permissions for various operations in a Kubernetes cluster.
+ + +
+ + + + addSuppressed(java.lang.Throwable) + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + Arg + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a kubernetes/docker command argument.
+ + +
+ + + + Arg.Companion + + - class in no.acntech.easycontainers.model.Arg + + +
+
 
+ + +
+ + + + Args + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a list of kubernetes/docker command arguments.
+ + +
+ + + + Args.Companion + + - class in no.acntech.easycontainers.model.Args + + +
+
 
+ + +
+ + + + asStringMap(java.lang.Object,java.util.Map,java.util.Set,java.lang.Integer,java.lang.Integer) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
Converts an object to a Map representation, including its properties or Java bean properties.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-10.html b/apidocs/javadoc/index-files/index-10.html new file mode 100644 index 00000000..bf3fff5b --- /dev/null +++ b/apidocs/javadoc/index-files/index-10.html @@ -0,0 +1,417 @@ + + + + K-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

K

+
+ +
+ + + + K8sClientFactory + + - class in no.acntech.easycontainers.kubernetes + + +
+
A factory class for creating instances of Kubernetes clients.
+ + +
+ + + + K8sConstants + + - class in no.acntech.easycontainers.kubernetes + + +
+
 
+ + +
+ + + + K8sJobRuntime + + - class in no.acntech.easycontainers.kubernetes + + +
+
Represents a Kubernetes Job runtime for a given container.
+ + +
+ + + + K8sRuntime + + - class in no.acntech.easycontainers.kubernetes + + +
+
Represents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both Kubernetes Jobs and Deployments.
+ + +
+ + + + K8sServiceRuntime + + - class in no.acntech.easycontainers.kubernetes + + +
+
Represents a Kubernetes service runtime that deploys and manages a container and associated resources.
+ + +
+ + + + K8sUtils + + - class in no.acntech.easycontainers.kubernetes + + +
+
Object representing utility functions for interacting with Kubernetes cluster.
+ + +
+ + + + KanikoContainer + + - class in no.acntech.easycontainers.custom + + +
+
 
+ + +
+ + + + KanikoContainer.Companion + + - class in no.acntech.easycontainers.custom.KanikoContainer + + +
+
 
+ + +
+ + + + KanikoContainer.KanikoContainerBuilder + + - class in no.acntech.easycontainers.custom.KanikoContainer + + +
+
 
+ + +
+ + + + kill() + + - function in no.acntech.easycontainers.kubernetes.K8sServiceRuntime + + +
+
Kills the container by calling the stop() method.
+ + +
+ + + + kill() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Kills the container by calling the stop() method.
+ + +
+ + + + kill() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Kills the container by calling the stop() method.
+ + +
+ + + + KUBERNETES + + - enum entry in no.acntech.easycontainers.model.ContainerPlatformType + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-11.html b/apidocs/javadoc/index-files/index-11.html new file mode 100644 index 00000000..567d5800 --- /dev/null +++ b/apidocs/javadoc/index-files/index-11.html @@ -0,0 +1,326 @@ + + + + L-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

L

+
+ +
+ + + + LabelKey + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a docker/kubernetes label key.
+ + +
+ + + + LabelKey.Companion + + - class in no.acntech.easycontainers.model.LabelKey + + +
+
 
+ + +
+ + + + LabelValue + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a docker/kubernetes label value.
+ + +
+ + + + LabelValue.Companion + + - class in no.acntech.easycontainers.model.LabelValue + + +
+
 
+ + +
+ + + + LengthValidator + + - class in no.acntech.easycontainers.util.text + + +
+
A validator that forces a string to be of a certain length.
+ + +
+ + + + LineReader + + - class in no.acntech.easycontainers.output + + +
+
The LineReader class is responsible for reading lines from an input stream and invoking an OutputLineCallback for each line of output.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-12.html b/apidocs/javadoc/index-files/index-12.html new file mode 100644 index 00000000..fe06455b --- /dev/null +++ b/apidocs/javadoc/index-files/index-12.html @@ -0,0 +1,274 @@ + + + + M-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

M

+
+ +
+ + + + Memory + + - class in no.acntech.easycontainers.model + + +
+
Value object representing kubernetes/docker memory.
+ + +
+ + + + Memory.Companion + + - class in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-13.html b/apidocs/javadoc/index-files/index-13.html new file mode 100644 index 00000000..ea53406e --- /dev/null +++ b/apidocs/javadoc/index-files/index-13.html @@ -0,0 +1,545 @@ + + + + N-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

N

+
+ +
+ + + + Namespace + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a kubernetes namespace.
+ + +
+ + + + Namespace.Companion + + - class in no.acntech.easycontainers.model.Namespace + + +
+
 
+ + +
+ + + + NetworkName + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a Docker image tag.
+ + +
+ + + + NetworkName.Companion + + - class in no.acntech.easycontainers.model.NetworkName + + +
+
 
+ + +
+ + + + NetworkPort + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a network port - range 1-65535.
+ + +
+ + + + NetworkPort.Companion + + - class in no.acntech.easycontainers.model.NetworkPort + + +
+
 
+ + +
+ + + + NetworkUtils + + - class in no.acntech.easycontainers.util.net + + +
+
The NetworkUtils class provides utility methods related to network operations.
+ + +
+ + no.acntech.easycontainers + + - package no.acntech.easycontainers + + +
+
 
+ + +
+ + no.acntech.easycontainers.custom + + - package no.acntech.easycontainers.custom + + +
+
 
+ + +
+ + no.acntech.easycontainers.docker + + - package no.acntech.easycontainers.docker + + +
+
 
+ + +
+ + no.acntech.easycontainers.kubernetes + + - package no.acntech.easycontainers.kubernetes + + +
+
 
+ + +
+ + no.acntech.easycontainers.model + + - package no.acntech.easycontainers.model + + +
+
 
+ + +
+ + no.acntech.easycontainers.model.base + + - package no.acntech.easycontainers.model.base + + +
+
 
+ + +
+ + no.acntech.easycontainers.output + + - package no.acntech.easycontainers.output + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.collections + + - package no.acntech.easycontainers.util.collections + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.io + + - package no.acntech.easycontainers.util.io + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.lang + + - package no.acntech.easycontainers.util.lang + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.net + + - package no.acntech.easycontainers.util.net + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.platform + + - package no.acntech.easycontainers.util.platform + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.text + + - package no.acntech.easycontainers.util.text + + +
+
 
+ + +
+ + no.acntech.easycontainers.util.time + + - package no.acntech.easycontainers.util.time + + +
+
 
+ + +
+ + + + normalizeConfigMapName(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
 
+ + +
+ + + + normalizeLabelKey(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Normalizes the given label key by separating the prefix and name if a forward slash is present, normalizing the prefix and name by replacing invalid label characters with hyphens, removing multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, and converting the prefix and name to lowercase.
+ + +
+ + + + normalizeLabelValue(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Normalizes the given label value by replacing invalid characters, removing multiple hyphens, trimming leading and trailing hyphens and underscores, and limiting the length to MAX_LABEL_LENGTH.
+ + +
+ + + + normalizeVolumeName(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-14.html b/apidocs/javadoc/index-files/index-14.html new file mode 100644 index 00000000..8f890d40 --- /dev/null +++ b/apidocs/javadoc/index-files/index-14.html @@ -0,0 +1,742 @@ + + + + O-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

O

+
+ +
+ + + + of(no.acntech.easycontainers.model.ContainerPlatformType) + + - function in no.acntech.easycontainers.ImageBuilder.Companion + + +
+
Creates and returns of ImageBuilder based on the provided container type.
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Arg.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Args.Companion + + +
+
 
+ + +
+ + + + of(java.util.List) + + - function in no.acntech.easycontainers.model.Args.Companion + + +
+
 
+ + +
+ + + + of(java.lang.Double) + + - function in no.acntech.easycontainers.model.CPU.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.CPU.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerFileName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.EnvVarKey.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.EnvVarValue.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Executable.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Host.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.ImageName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.ImageTag.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.ImageURL.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String,java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ImageURL.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.LabelKey.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.LabelValue.Companion + + +
+
 
+ + +
+ + + + of(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Namespace.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.NetworkName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.Integer) + + - function in no.acntech.easycontainers.model.NetworkPort.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.NetworkPort.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.PortMappingName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.RegistryURL.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.RepositoryName.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.SemanticVersion.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.Verbosity.Companion + + +
+
 
+ + +
+ + + + of(java.lang.String) + + - function in no.acntech.easycontainers.model.VolumeName.Companion + + +
+
 
+ + +
+ + + + ofWhiteSpaceSeparated(java.lang.String) + + - function in no.acntech.easycontainers.model.Args.Companion + + +
+
Creates an Args object from a whitespace separated string.
+ + +
+ + + + onDelete() + + - function in no.acntech.easycontainers.custom.KanikoContainer + + +
+
 
+ + +
+ + + + onDelete() + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + onDelete() + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + onLine(java.lang.String) + + - function in no.acntech.easycontainers.output.OutputLineCallback + + +
+
Callback for each line of output, new line character(s) are not included.
+ + +
+ + + + onLine(java.lang.String) + + - function in no.acntech.easycontainers.output.Slf4JOutputLineCallback + + +
+
Callback for each line of output, new line character(s) are not included.
+ + +
+ + + + OutputLineCallback + + - class in no.acntech.easycontainers.output + + +
+
Functional interface for handling output from a container.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-15.html b/apidocs/javadoc/index-files/index-15.html new file mode 100644 index 00000000..e1df25f5 --- /dev/null +++ b/apidocs/javadoc/index-files/index-15.html @@ -0,0 +1,573 @@ + + + + P-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

P

+
+ +
+ + + + PANIC + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + PENDING + + - enum entry in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
 
+ + +
+ + + + PermissionException + + - class in no.acntech.easycontainers + + +
+
PermissionException is a subclass of ContainerException that is used to represent exceptions that occur when there is a permission issue.
+ + +
+ + + + pipe(kotlin.jvm.functions.Function1) + + - function in no.acntech.easycontainers.util.io.FunctionsKt + + +
+
Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream.
+ + +
+ + + + pipe(kotlin.jvm.functions.Function1,java.lang.Boolean) + + - function in no.acntech.easycontainers.util.io.FunctionsKt + + +
+
Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream.
+ + +
+ + + + PlatformUtils + + - class in no.acntech.easycontainers.util.platform + + +
+
Utility class for platform-specific operations.
+ + +
+ + + + PodPhase + + - class in no.acntech.easycontainers.kubernetes + + +
+
Represents the different phases of a pod in a Kubernetes cluster.
+ + +
+ + + + PortMappingName + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a port mapping name
+ + +
+ + + + PortMappingName.Companion + + - class in no.acntech.easycontainers.model.PortMappingName + + +
+
 
+ + +
+ + + + prettyPrint(java.util.List,java.lang.Integer,java.lang.Character) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
Returns a string representation of the list in a pretty format.
+ + +
+ + + + prettyPrint(java.util.Map,java.lang.Boolean,java.lang.Integer,java.lang.Character,java.lang.String) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
Returns a string representation of the map in a pretty format.
+ + +
+ + + + prettyPrintMe(java.lang.Object,java.util.Map) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
Returns a string representation of the calling object in a pretty format.
+ + +
+ + + + printStackTrace() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + printStackTrace(java.io.PrintStream) + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + printStackTrace(java.io.PrintWriter) + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + putDirectory(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Uploads a directory to the container.
+ + +
+ + + + putDirectory(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Uploads a directory to the container.
+ + +
+ + + + putDirectory(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.model.Container + + +
+
Uploads a directory to the container.
+ + +
+ + + + putDirectory(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
Uploads a directory to the container.
+ + +
+ + + + putDirectory(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
Uploads a directory to the container.
+ + +
+ + + + putFile(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Uploads a file to the container.
+ + +
+ + + + putFile(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Uploads a file to the container.
+ + +
+ + + + putFile(java.nio.file.Path,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
Uploads a file to the container.
+ + +
+ + + + putFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + putFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-16.html b/apidocs/javadoc/index-files/index-16.html new file mode 100644 index 00000000..6d070e5d --- /dev/null +++ b/apidocs/javadoc/index-files/index-16.html @@ -0,0 +1,508 @@ + + + + R-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

R

+
+ +
+ + + + RangeValidator + + - class in no.acntech.easycontainers.util.lang + + +
+
Represents a validation range for a comparable value.
+ + +
+ + + + read() + + - function in no.acntech.easycontainers.output.LineReader + + +
+
Reads lines from an input stream and invokes a callback function for each line of output.
+ + +
+ + + + RegexValidator + + - class in no.acntech.easycontainers.util.text + + +
+
A validator that uses regular expressions to validate strings.
+ + +
+ + + + RegistryURL + + - class in no.acntech.easycontainers.model + + +
+
Represents a URL of a registry.
+ + +
+ + + + RegistryURL.Companion + + - class in no.acntech.easycontainers.model.RegistryURL + + +
+
 
+ + +
+ + + + RepositoryName + + - class in no.acntech.easycontainers.model + + +
+
Represents a repository name in a software repository system.
+ + +
+ + + + RepositoryName.Companion + + - class in no.acntech.easycontainers.model.RepositoryName + + +
+
 
+ + +
+ + + + requireCreateConfigMaps(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireCreateDeployments(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireCreateJobs(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireCreateNamespaces() + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireCreateServices(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireListNamespaces() + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireListPods(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireMonitorDeployments(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireMonitorJobs(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + requireMonitorPods(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + run() + + - function in no.acntech.easycontainers.kubernetes.ContainerLogStreamer + + +
+
 
+ + +
+ + + + RUNNING + + - enum entry in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
 
+ + +
+ + + + RUNNING + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container is running.

+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-17.html b/apidocs/javadoc/index-files/index-17.html new file mode 100644 index 00000000..f6de2120 --- /dev/null +++ b/apidocs/javadoc/index-files/index-17.html @@ -0,0 +1,547 @@ + + + + S-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

S

+
+ +
+ + + + SemanticVersion + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a file name for a file to be added or mapped into a container.
+ + +
+ + + + SemanticVersion.Companion + + - class in no.acntech.easycontainers.model.SemanticVersion + + +
+
 
+ + +
+ + + + SERVICE + + - enum entry in no.acntech.easycontainers.model.ExecutionMode + + +
+

Service mode - continuous execution

+ + +
+ + + + setStackTrace(kotlin.Array) + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + SimpleValueObject + + - class in no.acntech.easycontainers.model.base + + +
+
A DDD ValueObject holding a single value.
+ + +
+ + + + Slf4JOutputLineCallback + + - class in no.acntech.easycontainers.output + + +
+
OutputLineCallback implementation that logs output lines to a SLF4J logger.
+ + +
+ + + + splitOnWhites(java.lang.String) + + - function in no.acntech.easycontainers.util.text.FunctionsKt + + +
+
Splits a string into a list of substrings using whitespace as the delimiter.
+ + +
+ + + + start() + + - function in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
Starts the execution of the container.
+ + +
+ + + + start() + + - function in no.acntech.easycontainers.kubernetes.K8sJobRuntime + + +
+
Starts the execution of the container.
+ + +
+ + + + start() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Starts the execution of the container.
+ + +
+ + + + start() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Starts the execution of the container.
+ + +
+ + + + start() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Starts the execution of the container.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
Stops the container runtime.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.kubernetes.ContainerLogStreamer + + +
+
 
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.kubernetes.K8sJobRuntime + + +
+
Stop the job by deleting the Kubernetes Job resource.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Stops the container runtime.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.kubernetes.K8sServiceRuntime + + +
+
Stops the container runtime.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Stops the container runtime.
+ + +
+ + + + stop() + + - function in no.acntech.easycontainers.output.LineReader + + +
+
Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream.
+ + +
+ + + + STOPPED + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container has been gracefully or forcefully stopped.

+ + +
+ + + + StringConstantsKt + + - class in no.acntech.easycontainers.util.text + + +
+
 
+ + +
+ + + + StringValidator + + - class in no.acntech.easycontainers.util.text + + +
+
Validates a String value object based on a given range and additional validators.
+ + +
+ + + + SUCCEEDED + + - enum entry in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-18.html b/apidocs/javadoc/index-files/index-18.html new file mode 100644 index 00000000..5a5a9665 --- /dev/null +++ b/apidocs/javadoc/index-files/index-18.html @@ -0,0 +1,924 @@ + + + + T-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

T

+
+ +
+ + + + tar(java.nio.file.Path,java.io.OutputStream,java.lang.Boolean) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
 
+ + +
+ + + + tar(java.nio.file.Path,java.nio.file.Path,java.lang.Boolean) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Creates a TAR archive of the specified directory.
+ + +
+ + + + tar(java.nio.file.Path,java.lang.Boolean) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Creates an input stream containing a TAR archive of the specified directory.
+ + +
+ + + + tarFile(java.nio.file.Path,java.lang.String) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Creates a TAR file containing the specified file and entry name.
+ + +
+ + + + TASK + + - enum entry in no.acntech.easycontainers.model.ExecutionMode + + +
+

Task mode - single execution with an exit value

+ + +
+ + + + TERMINATING + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container is being terminated.

+ + +
+ + + + toEi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toFormattedString() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toFQDN() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
Returns the Fully Qualified Domain Name (FQDN) of the image URL.
+ + +
+ + + + toGi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toKi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toMi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toPi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Returns a string representation of this ImageBuilder.
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.Arg + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.Args + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.CPU + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.ContainerFileName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.ContainerName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.EnvVarKey + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.EnvVarValue + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.Executable + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.Host + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.ImageName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.ImageTag + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN).
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.LabelKey + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.LabelValue + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.NetworkName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.NetworkPort + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.PortMappingName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.RegistryURL + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.RepositoryName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.SemanticVersion + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.UnixDir + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.model.VolumeName + + +
+
 
+ + +
+ + + + toString() + + - function in no.acntech.easycontainers.util.text.RegexValidator + + +
+
 
+ + +
+ + + + toStringCollection(java.util.Collection) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
 
+ + +
+ + + + toStringList() + + - function in no.acntech.easycontainers.model.Args + + +
+
 
+ + +
+ + + + toStringList(java.util.List) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
Converts each element in the list to a string representation.
+ + +
+ + + + toStringMap(java.util.Map) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
Converts each key-value pair in the map to a string representation, where the key is converted to a String using its toString() method, and the value is converted to a String using its toString() method.
+ + +
+ + + + toStringSet(java.util.Set) + + - function in no.acntech.easycontainers.util.collections.CollectionExtentionsKt + + +
+
Converts each element in the set to a string representation.
+ + +
+ + + + toTi() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + toUtf8String(java.io.ByteArrayOutputStream) + + - function in no.acntech.easycontainers.util.io.FunctionsKt + + +
+
Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string.
+ + +
+ + + + TRACE + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + truncate(java.lang.String,java.lang.Integer,java.lang.String,java.lang.Boolean) + + - function in no.acntech.easycontainers.util.text.FunctionsKt + + +
+
Truncates the string if its length exceeds the specified maximum length.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-19.html b/apidocs/javadoc/index-files/index-19.html new file mode 100644 index 00000000..8d933356 --- /dev/null +++ b/apidocs/javadoc/index-files/index-19.html @@ -0,0 +1,664 @@ + + + + U-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

U

+
+ +
+ + + + UNINITIATED + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container is in an uninitiated state.

+ + +
+ + + + UnixDir + + - class in no.acntech.easycontainers.model + + +
+
Represents a complete (starting with root '/') Unix directory path as a value object.
+ + +
+ + + + UnixDir.Companion + + - class in no.acntech.easycontainers.model.UnixDir + + +
+
 
+ + +
+ + + + UNKNOWN + + - enum entry in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + UNKNOWN + + - enum entry in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
 
+ + +
+ + + + UNKNOWN + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container is in an unknown state.

+ + +
+ + + + untar(java.io.File,java.nio.file.Path) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Extracts the contents of a tarball to a specified destination directory.
+ + +
+ + + + untar(java.io.InputStream,java.nio.file.Path) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Extracts the contents of a tarball from the given input stream to the specified destination directory.
+ + +
+ + + + untarFile(java.io.File,java.nio.file.Path) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Untars a single file from the specified TAR file to the specified destination.
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.Arg + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.CPU + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.ContainerFileName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.ContainerName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.EnvVarKey + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.EnvVarValue + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.Executable + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.Host + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.ImageName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.ImageTag + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.LabelKey + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.LabelValue + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.Namespace + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.NetworkName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.NetworkPort + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.PortMappingName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.RegistryURL + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.RepositoryName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.SemanticVersion + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.UnixDir + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.VolumeName + + +
+
 
+ + +
+ + + + unwrap() + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-2.html b/apidocs/javadoc/index-files/index-2.html new file mode 100644 index 00000000..3663622c --- /dev/null +++ b/apidocs/javadoc/index-files/index-2.html @@ -0,0 +1,378 @@ + + + + B-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

B

+
+ +
+ + + + BaseContainerBuilder + + - class in no.acntech.easycontainers + + +
+
Abstract base class for container builders.
+ + +
+ + + + build() + + - function in no.acntech.easycontainers.GenericContainer.GenericContainerBuilder + + +
+
This method is used to build a Container object.
+ + +
+ + + + build() + + - function in no.acntech.easycontainers.custom.ElasticSearchContainer.ElasticSearchContainerBuilder + + +
+
This method is used to build a Container object.
+ + +
+ + + + build() + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
This method is used to build a Container object.
+ + +
+ + + + build() + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
This method is used to build a Container object.
+ + +
+ + + + build() + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
This method is used to build a Container object.
+ + +
+ + + + builder() + + - function in no.acntech.easycontainers.GenericContainer.Companion + + +
+
 
+ + +
+ + + + builder() + + - function in no.acntech.easycontainers.custom.ElasticSearchContainer.Companion + + +
+
 
+ + +
+ + + + builder() + + - function in no.acntech.easycontainers.custom.KanikoContainer.Companion + + +
+
 
+ + +
+ + + + buildImage() + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Builds an image.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-20.html b/apidocs/javadoc/index-files/index-20.html new file mode 100644 index 00000000..2fe08501 --- /dev/null +++ b/apidocs/javadoc/index-files/index-20.html @@ -0,0 +1,573 @@ + + + + V-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

V

+
+ +
+ + + + validate(P) + + - function in no.acntech.easycontainers.util.lang.RangeValidator + + +
+
Validates the given object.
+ + +
+ + + + validate(T) + + - function in no.acntech.easycontainers.util.lang.Validator + + +
+
Validates the given object.
+ + +
+ + + + validate(java.lang.String) + + - function in no.acntech.easycontainers.util.text.LengthValidator + + +
+
Validates the given object.
+ + +
+ + + + validate(java.lang.String) + + - function in no.acntech.easycontainers.util.text.RegexValidator + + +
+
Validates the given object.
+ + +
+ + + + validate(java.lang.String) + + - function in no.acntech.easycontainers.util.text.StringValidator + + +
+
Validates the given object.
+ + +
+ + + + ValidationException + + - class in no.acntech.easycontainers.util.lang + + +
+
Exception that is thrown when a validation error occurs.
+ + +
+ + + + Validator + + - class in no.acntech.easycontainers.util.lang + + +
+
Interface for validating objects.
+ + +
+ + + + ValueObject + + - class in no.acntech.easycontainers.model.base + + +
+
Marker interface for DDD Value Objects (domain primitives) - see e.g.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder.State + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.model.Container.State + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerPlatformType + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.model.ExecutionMode + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + valueOf(java.lang.String) + + - function in no.acntech.easycontainers.model.Verbosity + + +
+
Returns the enum constant of this type with the specified name.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.ImageBuilder.State + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.model.Container.State + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.model.ContainerPlatformType + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.model.ExecutionMode + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + values() + + - function in no.acntech.easycontainers.model.Verbosity + + +
+
Returns an array containing the constants of this enum type, in the order they're declared.
+ + +
+ + + + Verbosity + + - class in no.acntech.easycontainers.model + + +
+
Enum class representing different levels of verbosity.
+ + +
+ + + + Verbosity.Companion + + - class in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + Volume + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a volume to be added or mapped into a container.
+ + +
+ + + + VolumeName + + - class in no.acntech.easycontainers.model + + +
+
Represents a volume name.
+ + +
+ + + + VolumeName.Companion + + - class in no.acntech.easycontainers.model.VolumeName + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-21.html b/apidocs/javadoc/index-files/index-21.html new file mode 100644 index 00000000..675aec69 --- /dev/null +++ b/apidocs/javadoc/index-files/index-21.html @@ -0,0 +1,2861 @@ + + + + W-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

W

+
+ +
+ + + + waitForCompletion(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Wait for the container to stop.
+ + +
+ + + + waitForCompletion(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Wait for the container to stop.
+ + +
+ + + + waitForCompletion(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.Container + + +
+
Wait for the container to stop.
+ + +
+ + + + waitForState(no.acntech.easycontainers.model.Container.State,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Wait for the container to reach the specified state.
+ + +
+ + + + waitForState(no.acntech.easycontainers.model.Container.State,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Wait for the container to reach the specified state.
+ + +
+ + + + waitForState(no.acntech.easycontainers.model.Container.State,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.Container + + +
+
Wait for the container to reach the specified state.
+ + +
+ + + + WaitTimeCalculator + + - class in no.acntech.easycontainers.util.time + + +
+
WaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, unit and start time.
+ + +
+ + + + WARN + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + withArgs(no.acntech.easycontainers.model.Args) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the command arguments for the container.
+ + +
+ + + + withArgs(no.acntech.easycontainers.model.Args) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the command arguments for the container.
+ + +
+ + + + withArgs(java.util.List) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the arguments for the container.
+ + +
+ + + + withArgs(java.util.List) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the arguments for the container.
+ + +
+ + + + withArgs(java.util.List) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the arguments for the container.
+ + +
+ + + + withArgs(no.acntech.easycontainers.model.Args) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the command arguments for the container.
+ + +
+ + + + withCommand(no.acntech.easycontainers.model.Executable) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withCommand(no.acntech.easycontainers.model.Executable) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withCommand(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withCommand(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withCommand(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withCommand(no.acntech.easycontainers.model.Executable) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the command for the container.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFile) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFile) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(java.lang.String,java.lang.String,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFile) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a file to the container with the specified name, path, and content.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a file to the container with the specified name, path, and content.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a file to the container with the specified name, path, and content.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a container file to the builder.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a container file to the builder.
+ + +
+ + + + withContainerFile(no.acntech.easycontainers.model.ContainerFileName,no.acntech.easycontainers.model.UnixDir,java.util.Map,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a container file to the builder.
+ + +
+ + + + withContainerPlatformType(no.acntech.easycontainers.model.ContainerPlatformType) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withContainerPlatformType(no.acntech.easycontainers.model.ContainerPlatformType) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withContainerPlatformType(no.acntech.easycontainers.model.ContainerPlatformType) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withCpuLimit(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuLimit(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU limit for the container.
+ + +
+ + + + withCpuRequest(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.Double) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCpuRequest(no.acntech.easycontainers.model.CPU) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the CPU request for the container.
+ + +
+ + + + withCustomProperty(java.lang.String,java.lang.Object) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds a custom property to the container.
+ + +
+ + + + withCustomProperty(java.lang.String,java.lang.Object) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds a custom property to the container.
+ + +
+ + + + withCustomProperty(java.lang.String,java.lang.Object) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Adds a custom property to the image builder.
+ + +
+ + + + withCustomProperty(java.lang.String,java.lang.Object) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a custom property to the container.
+ + +
+ + + + withDeleteDockerContext(java.lang.Boolean) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withDockerContextDir(java.nio.file.Path) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Set the Docker context directory.
+ + +
+ + + + withDockerContextDir(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withDockerContextSubDir(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withDockerContextSubDir(no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
If set, the subDir will be appended to the mount path for the Docker context volume.
+ + +
+ + + + withDockerContextVolume(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withDockerContextVolume(no.acntech.easycontainers.model.Volume) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withDockerContextVolume(no.acntech.easycontainers.model.VolumeName) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
Add a volume for the Dockerfile and Docker context.
+ + +
+ + + + withEnv(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds an environment variable with the specified key and value.
+ + +
+ + + + withEnv(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds an environment variable with the specified key and value.
+ + +
+ + + + withEnv(java.util.Map) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the environment variables for the container.
+ + +
+ + + + withEnv(java.util.Map) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the environment variables for the container.
+ + +
+ + + + withEnv(no.acntech.easycontainers.model.EnvVarKey,no.acntech.easycontainers.model.EnvVarValue) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets an environment variable with the given key and value.
+ + +
+ + + + withEnv(no.acntech.easycontainers.model.EnvVarKey,no.acntech.easycontainers.model.EnvVarValue) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets an environment variable with the given key and value.
+ + +
+ + + + withEnv(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds an environment variable with the specified key and value.
+ + +
+ + + + withEnv(java.util.Map) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the environment variables for the container.
+ + +
+ + + + withEnv(no.acntech.easycontainers.model.EnvVarKey,no.acntech.easycontainers.model.EnvVarValue) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets an environment variable with the given key and value.
+ + +
+ + + + withEnvAsStringMap(java.util.Map) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the environment variables of the container using a map of string key-value pairs.
+ + +
+ + + + withEnvAsStringMap(java.util.Map) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the environment variables of the container using a map of string key-value pairs.
+ + +
+ + + + withEnvAsStringMap(java.util.Map) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the environment variables of the container using a map of string key-value pairs.
+ + +
+ + + + withExecutionMode(no.acntech.easycontainers.model.ExecutionMode) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the execution mode for the container.
+ + +
+ + + + withExecutionMode(no.acntech.easycontainers.model.ExecutionMode) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the execution mode for the container.
+ + +
+ + + + withExecutionMode(no.acntech.easycontainers.model.ExecutionMode) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the execution mode for the container.
+ + +
+ + + + withExposedPort(no.acntech.easycontainers.model.PortMappingName,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds an exposed port to the container configuration.
+ + +
+ + + + withExposedPort(no.acntech.easycontainers.model.PortMappingName,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds an exposed port to the container configuration.
+ + +
+ + + + withExposedPort(java.lang.String,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the exposed port for the container by specifying the name and port number.
+ + +
+ + + + withExposedPort(java.lang.String,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the exposed port for the container by specifying the name and port number.
+ + +
+ + + + withExposedPort(java.lang.String,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the exposed port for the container by specifying the name and port number.
+ + +
+ + + + withExposedPort(no.acntech.easycontainers.model.PortMappingName,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds an exposed port to the container configuration.
+ + +
+ + + + withImage(no.acntech.easycontainers.model.ImageURL) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Set the image to use for the container.
+ + +
+ + + + withImage(no.acntech.easycontainers.model.ImageURL) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Set the image to use for the container.
+ + +
+ + + + withImage(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the image for the container using the given image URL.
+ + +
+ + + + withImage(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the image for the container using the given image URL.
+ + +
+ + + + withImage(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the image for the container using the given image URL.
+ + +
+ + + + withImage(no.acntech.easycontainers.model.ImageURL) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Set the image to use for the container.
+ + +
+ + + + withImageName(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withImageName(no.acntech.easycontainers.model.ImageName) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withImageRegistry(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withImageRegistry(no.acntech.easycontainers.model.RegistryURL) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the image registry for the ImageBuilder.
+ + +
+ + + + withInsecureRegistry(java.lang.Boolean) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the insecure registry flag for the image builder.
+ + +
+ + + + withInsecureRegistry(java.lang.Boolean) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withIsEphemeral(java.lang.Boolean) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the ephemeral flag for the container.
+ + +
+ + + + withIsEphemeral(java.lang.Boolean) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the ephemeral flag for the container.
+ + +
+ + + + withIsEphemeral(java.lang.Boolean) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the ephemeral flag for the container.
+ + +
+ + + + withLabel(no.acntech.easycontainers.model.LabelKey,no.acntech.easycontainers.model.LabelValue) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds a label to the container with the given key and value.
+ + +
+ + + + withLabel(no.acntech.easycontainers.model.LabelKey,no.acntech.easycontainers.model.LabelValue) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Adds a label to the container with the given key and value.
+ + +
+ + + + withLabel(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withLabel(no.acntech.easycontainers.model.LabelKey,no.acntech.easycontainers.model.LabelValue) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Adds a label to the ImageBuilder.
+ + +
+ + + + withLabel(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a label with the provided key-value pair to the container.
+ + +
+ + + + withLabel(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a label with the provided key-value pair to the container.
+ + +
+ + + + withLabel(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a label with the provided key-value pair to the container.
+ + +
+ + + + withLabel(no.acntech.easycontainers.model.LabelKey,no.acntech.easycontainers.model.LabelValue) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Adds a label to the container with the given key and value.
+ + +
+ + + + withLabels(java.util.Map) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withMaxLifeTime(java.time.Duration) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.time.Duration) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.time.temporal.ChronoUnit) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.time.temporal.ChronoUnit) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.time.Duration) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.time.temporal.ChronoUnit) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the maximum lifetime for the container.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the maximum life time for the object.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the maximum life time for the object.
+ + +
+ + + + withMaxLifeTime(java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the maximum life time for the object.
+ + +
+ + + + withMemoryLimit(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the memory limit for the container.
+ + +
+ + + + withMemoryLimit(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the memory limit for the container.
+ + +
+ + + + withMemoryLimit(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes.
+ + +
+ + + + withMemoryLimit(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes.
+ + +
+ + + + withMemoryLimit(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes.
+ + +
+ + + + withMemoryLimit(java.lang.Long) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.
+ + +
+ + + + withMemoryLimit(java.lang.Long) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.
+ + +
+ + + + withMemoryLimit(java.lang.Long) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.
+ + +
+ + + + withMemoryLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the current operation.
+ + +
+ + + + withMemoryLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the current operation.
+ + +
+ + + + withMemoryLimit(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the current operation.
+ + +
+ + + + withMemoryLimit(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory limit for the container.
+ + +
+ + + + withMemoryRequest(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withMemoryRequest(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
 
+ + +
+ + + + withMemoryRequest(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory request for the container.
+ + +
+ + + + withMemoryRequest(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory request for the container.
+ + +
+ + + + withMemoryRequest(java.math.BigInteger) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the memory request for the container.
+ + +
+ + + + withMemoryRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Performs the task with the given memory request.
+ + +
+ + + + withMemoryRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Performs the task with the given memory request.
+ + +
+ + + + withMemoryRequest(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Performs the task with the given memory request.
+ + +
+ + + + withMemoryRequest(no.acntech.easycontainers.model.Memory) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withName(no.acntech.easycontainers.model.ContainerName) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Returns a new instance of the container object with the specified name.
+ + +
+ + + + withName(no.acntech.easycontainers.model.ContainerName) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Returns a new instance of the container object with the specified name.
+ + +
+ + + + withName(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withName(no.acntech.easycontainers.model.ImageName) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the name of the image.
+ + +
+ + + + withName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the name of the container.
+ + +
+ + + + withName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the name of the container.
+ + +
+ + + + withName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the name of the container.
+ + +
+ + + + withName(no.acntech.easycontainers.model.ContainerName) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Returns a new instance of the container object with the specified name.
+ + +
+ + + + withNamespace(no.acntech.easycontainers.model.Namespace) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the namespace for the ContainerBuilder.
+ + +
+ + + + withNamespace(no.acntech.easycontainers.model.Namespace) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the namespace for the ContainerBuilder.
+ + +
+ + + + withNamespace(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withNamespace(no.acntech.easycontainers.model.Namespace) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the namespace for the ImageBuilder - this is only relevant for Kubernetes.
+ + +
+ + + + withNamespace(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the namespace for the container.
+ + +
+ + + + withNamespace(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the namespace for the container.
+ + +
+ + + + withNamespace(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the namespace for the container.
+ + +
+ + + + withNamespace(no.acntech.easycontainers.model.Namespace) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the namespace for the ContainerBuilder.
+ + +
+ + + + withNetworkName(no.acntech.easycontainers.model.NetworkName) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withNetworkName(no.acntech.easycontainers.model.NetworkName) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withNetworkName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withNetworkName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withNetworkName(java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withNetworkName(no.acntech.easycontainers.model.NetworkName) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the network name for the container.
+ + +
+ + + + withOutputLineCallback(no.acntech.easycontainers.output.OutputLineCallback) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the line callback for logging purposes.
+ + +
+ + + + withOutputLineCallback(no.acntech.easycontainers.output.OutputLineCallback) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the line callback for logging purposes.
+ + +
+ + + + withOutputLineCallback(no.acntech.easycontainers.output.OutputLineCallback) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the provided OutputLineCallback for this ImageBuilder instance.
+ + +
+ + + + withOutputLineCallback(no.acntech.easycontainers.output.OutputLineCallback) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the line callback for logging purposes.
+ + +
+ + + + withPortMapping(no.acntech.easycontainers.model.NetworkPort,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Maps a container exposed network port to another network port.
+ + +
+ + + + withPortMapping(no.acntech.easycontainers.model.NetworkPort,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Maps a container exposed network port to another network port.
+ + +
+ + + + withPortMapping(java.lang.Integer,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the port mapping for the container.
+ + +
+ + + + withPortMapping(java.lang.Integer,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the port mapping for the container.
+ + +
+ + + + withPortMapping(java.lang.Integer,java.lang.Integer) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the port mapping for the container.
+ + +
+ + + + withPortMapping(no.acntech.easycontainers.model.NetworkPort,no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Maps a container exposed network port to another network port.
+ + +
+ + + + withRegistry(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withRegistry(no.acntech.easycontainers.model.RegistryURL) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withRepository(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withRepository(no.acntech.easycontainers.model.RepositoryName) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the (registry) repository for the ImageBuilder.
+ + +
+ + + + withRepository(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withRepository(no.acntech.easycontainers.model.RepositoryName) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withTag(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withTag(no.acntech.easycontainers.model.ImageTag) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Adds the given image tag to the builder.
+ + +
+ + + + withTag(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withTag(no.acntech.easycontainers.model.ImageTag) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withTags(java.util.Set) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withTags(java.util.Set) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withVerbosity(java.lang.String) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + withVerbosity(no.acntech.easycontainers.model.Verbosity) + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Sets the verbosity level for the ImageBuilder.
+ + +
+ + + + withVerbosity(java.lang.String) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withVerbosity(no.acntech.easycontainers.model.Verbosity) + + - function in no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder + + +
+
 
+ + +
+ + + + withVersion(no.acntech.easycontainers.model.SemanticVersion) + + - function in no.acntech.easycontainers.custom.ElasticSearchContainer.ElasticSearchContainerBuilder + + +
+
 
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.Volume) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the volume for the container.
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.Volume) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the volume for the container.
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.VolumeName,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the volume name and mount path for the current instance of the object.
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.VolumeName,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.BaseContainerBuilder + + +
+
Sets the volume name and mount path for the current instance of the object.
+ + +
+ + + + withVolume(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withVolume(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withVolume(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
 
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.Volume) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the volume for the container.
+ + +
+ + + + withVolume(no.acntech.easycontainers.model.VolumeName,no.acntech.easycontainers.model.UnixDir) + + - function in no.acntech.easycontainers.model.ContainerBuilder + + +
+
Sets the volume name and mount path for the current instance of the object.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-3.html b/apidocs/javadoc/index-files/index-3.html new file mode 100644 index 00000000..c0548194 --- /dev/null +++ b/apidocs/javadoc/index-files/index-3.html @@ -0,0 +1,807 @@ + + + + C-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

C

+
+ +
+ + + + canAccessClusterAPI() + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Checks if the current user has access to the Cluster API.
+ + +
+ + + + canCreateConfigMaps(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canCreateDeployments(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canCreateJobs(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canCreateNamespaces() + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canCreateServices(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canListNamespaces() + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canListPods(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canMonitorDeployments(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canMonitorJobs(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + canMonitorPods(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.AccessChecker + + +
+
 
+ + +
+ + + + closeQuietly(java.io.Closeable) + + - function in no.acntech.easycontainers.util.io.FunctionsKt + + +
+
Closes a Closeable object quietly, without throwing any exception.
+ + +
+ + + + CollectionExtentionsKt + + - class in no.acntech.easycontainers.util.collections + + +
+
 
+ + +
+ + + + compareTo(no.acntech.easycontainers.model.base.SimpleValueObject) + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + + + compareTo(no.acntech.easycontainers.model.base.SimpleValueObject) + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + + + compareTo(no.acntech.easycontainers.model.base.SimpleValueObject) + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + + + compareTo(no.acntech.easycontainers.model.base.SimpleValueObject) + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + + + compareTo(no.acntech.easycontainers.model.base.SimpleValueObject) + + - function in no.acntech.easycontainers.model.base.SimpleValueObject + + +
+
 
+ + +
+ + + + COMPLETED + + - enum entry in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + configure(no.acntech.easycontainers.model.ContainerBuilder) + + - function in no.acntech.easycontainers.ContainerBuilderCallback + + +
+
Configures a container builder.
+ + +
+ + + + Container + + - class in no.acntech.easycontainers.model + + +
+
 
+ + +
+ + + + Container.State + + - class in no.acntech.easycontainers.model.Container + + +
+
Represents the state of a container.
+ + +
+ + + + ContainerBuilder + + - class in no.acntech.easycontainers.model + + +
+
A builder interface for creating container configurations.
+ + +
+ + + + ContainerBuilderCallback + + - class in no.acntech.easycontainers + + +
+
An interface for defining a callback to configure a container builder.
+ + +
+ + + + ContainerException + + - class in no.acntech.easycontainers + + +
+
ContainerException is a subclass of RuntimeException that is used to represent exceptions that occur in the context of container operations.
+ + +
+ + + + ContainerFile + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a file to be added or mapped into a container.
+ + +
+ + + + ContainerFileName + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a file name for a file to be added or mapped into a container.
+ + +
+ + + + ContainerFileName.Companion + + - class in no.acntech.easycontainers.model.ContainerFileName + + +
+
 
+ + +
+ + + + ContainerLogStreamer + + - class in no.acntech.easycontainers.kubernetes + + +
+
Stream logs from a container in a Kubernetes pod.
+ + +
+ + + + ContainerName + + - class in no.acntech.easycontainers.model + + +
+
Value object representing the common rules for Docker and Kubernetes container names.
+ + +
+ + + + ContainerName.Companion + + - class in no.acntech.easycontainers.model.ContainerName + + +
+
 
+ + +
+ + + + ContainerPlatformType + + - class in no.acntech.easycontainers.model + + +
+
Enum class representing the container types supported by the library.
+ + +
+ + + + ContainerRuntime + + - class in no.acntech.easycontainers.model + + +
+
Interface representing the runtime of a container - either Docker or Kubernetes.
+ + +
+ + + + convertToDockerPath(java.nio.file.Path) + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Converts a Path to a string that can be used in a Docker command.
+ + +
+ + + + convertUnixPathToWindowsWslPath(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Converts a Linux-style path to a Windows-style path for use in WSL.
+ + +
+ + + + convertWindowsPathToUnix(java.lang.String) + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
 
+ + +
+ + + + convertWindowsPathToUnixWslPath(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Converts a Windows-style path to a Linux-style path for use in WSL.
+ + +
+ + + + CPU + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a kubernetes/docker cpu request or limit.
+ + +
+ + + + CPU.Companion + + - class in no.acntech.easycontainers.model.CPU + + +
+
 
+ + +
+ + + + createCaseFormatTransformFunction(com.google.common.base.CaseFormat,com.google.common.base.CaseFormat) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + createDefaultClient() + + - function in no.acntech.easycontainers.docker.DockerClientFactory + + +
+
This method creates a default Docker client.
+ + +
+ + + + createDefaultClient() + + - function in no.acntech.easycontainers.kubernetes.K8sClientFactory + + +
+
 
+ + +
+ + + + createDirectoryInWsl(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-4.html b/apidocs/javadoc/index-files/index-4.html new file mode 100644 index 00000000..5684ff03 --- /dev/null +++ b/apidocs/javadoc/index-files/index-4.html @@ -0,0 +1,430 @@ + + + + D-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

D

+
+ +
+ + + + DEBUG + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + defaultFinally() + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + defaultNoMatchHandler(kotlin.Exception) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + defaultOnError(kotlin.Exception) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + delete(java.lang.Boolean) + + - function in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
Deletes the container with an optional force flag.
+ + +
+ + + + delete(java.lang.Boolean) + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Deletes the container with an optional force flag.
+ + +
+ + + + delete(java.lang.Boolean) + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Deletes the container with an optional force flag.
+ + +
+ + + + delete(java.lang.Boolean) + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Deletes the container with an optional force flag.
+ + +
+ + + + DELETED + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container has been removed from the underlying container platform.

+ + +
+ + + + deleteImage(java.lang.String,java.lang.String,java.lang.String,java.util.List) + + - function in no.acntech.easycontainers.docker.DockerRegistryUtils + + +
+
Deletes an image from a registry.
+ + +
+ + + + DOCKER + + - enum entry in no.acntech.easycontainers.model.ContainerPlatformType + + +
+
 
+ + +
+ + + + DockerClientFactory + + - class in no.acntech.easycontainers.docker + + +
+
The DockerClientFactory class is responsible for creating a DockerClient instance.
+ + +
+ + + + DockerConstants + + - class in no.acntech.easycontainers.docker + + +
+
 
+ + +
+ + + + DockerRegistryUtils + + - class in no.acntech.easycontainers.docker + + +
+
This object provides utility methods for interacting with a Docker registry.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-5.html b/apidocs/javadoc/index-files/index-5.html new file mode 100644 index 00000000..3b579ce2 --- /dev/null +++ b/apidocs/javadoc/index-files/index-5.html @@ -0,0 +1,495 @@ + + + + E-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

E

+
+ +
+ + + + ElasticSearchContainer + + - class in no.acntech.easycontainers.custom + + +
+
 
+ + +
+ + + + ElasticSearchContainer.Companion + + - class in no.acntech.easycontainers.custom.ElasticSearchContainer + + +
+
 
+ + +
+ + + + ElasticSearchContainer.ElasticSearchContainerBuilder + + - class in no.acntech.easycontainers.custom.ElasticSearchContainer + + +
+
 
+ + +
+ + + + Environment + + - class in no.acntech.easycontainers + + +
+
 
+ + +
+ + + + EnvVarKey + + - class in no.acntech.easycontainers.model + + +
+
Value object representing an environment variable key.
+ + +
+ + + + EnvVarKey.Companion + + - class in no.acntech.easycontainers.model.EnvVarKey + + +
+
 
+ + +
+ + + + EnvVarValue + + - class in no.acntech.easycontainers.model + + +
+
Value object representing an environment variable value.
+ + +
+ + + + EnvVarValue.Companion + + - class in no.acntech.easycontainers.model.EnvVarValue + + +
+
 
+ + +
+ + + + equals(java.lang.Object) + + - function in no.acntech.easycontainers.util.text.RegexValidator + + +
+
 
+ + +
+ + + + ERROR + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + ErrorSupport + + - class in no.acntech.easycontainers.kubernetes + + +
+
 
+ + +
+ + + + Executable + + - class in no.acntech.easycontainers.model + + +
+
Value object representing an executable, i.e.
+ + +
+ + + + Executable.Companion + + - class in no.acntech.easycontainers.model.Executable + + +
+
 
+ + +
+ + + + execute(no.acntech.easycontainers.model.Executable,no.acntech.easycontainers.model.Args,java.lang.Boolean,no.acntech.easycontainers.model.UnixDir,java.io.InputStream,java.io.OutputStream,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Executes a command in the container.
+ + +
+ + + + execute(no.acntech.easycontainers.model.Executable,no.acntech.easycontainers.model.Args,java.lang.Boolean,no.acntech.easycontainers.model.UnixDir,java.io.InputStream,java.io.OutputStream,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Executes a command in the container.
+ + +
+ + + + execute(java.util.List,java.lang.Boolean,java.lang.String,java.io.InputStream,java.io.OutputStream,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + execute(java.util.List,java.lang.Boolean,java.lang.String,java.io.InputStream,java.io.OutputStream,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + execute(no.acntech.easycontainers.model.Executable,no.acntech.easycontainers.model.Args,java.lang.Boolean,no.acntech.easycontainers.model.UnixDir,java.io.InputStream,java.io.OutputStream,java.lang.Long,java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.model.Container + + +
+
Executes a command in the container.
+ + +
+ + + + ExecutionMode + + - class in no.acntech.easycontainers.model + + +
+
Enum class representing the execution mode of the container.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-6.html b/apidocs/javadoc/index-files/index-6.html new file mode 100644 index 00000000..de1fb17b --- /dev/null +++ b/apidocs/javadoc/index-files/index-6.html @@ -0,0 +1,365 @@ + + + + F-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

F

+
+ +
+ + + + FAILED + + - enum entry in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + FAILED + + - enum entry in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
 
+ + +
+ + + + FAILED + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container has failed.

+ + +
+ + + + FATAL + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + FileUtils + + - class in no.acntech.easycontainers.util.io + + +
+
The FileUtils class provides utility functions related to file operations.
+ + +
+ + + + fillInStackTrace() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + FunctionsKt + + - class in no.acntech.easycontainers.util.io + + +
+
 
+ + +
+ + + + FunctionsKt + + - class in no.acntech.easycontainers.util.lang + + +
+
 
+ + +
+ + + + FunctionsKt + + - class in no.acntech.easycontainers.util.text + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-7.html b/apidocs/javadoc/index-files/index-7.html new file mode 100644 index 00000000..8e259ef5 --- /dev/null +++ b/apidocs/javadoc/index-files/index-7.html @@ -0,0 +1,2965 @@ + + + + G-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

G

+
+ +
+ + + + GenericContainer + + - class in no.acntech.easycontainers + + +
+
GenericContainer represents a generic container implementation that can be customized and built using the provided builder.
+ + +
+ + + + GenericContainer.Companion + + - class in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + GenericContainer.GenericContainerBuilder + + - class in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getAllImageTags(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.docker.DockerRegistryUtils + + +
+
Retrieves all image tags for a given registry URL and image name.
+ + +
+ + + + getArgs() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the command arguments for the container.
+ + +
+ + + + getArgs() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the command arguments for the container.
+ + +
+ + + + getArgs() + + - function in no.acntech.easycontainers.model.Args + + +
+
 
+ + +
+ + + + getArgs() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the command arguments for the container.
+ + +
+ + + + getBytes() + + - function in no.acntech.easycontainers.model.Memory + + +
+
 
+ + +
+ + + + getCause() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + getCommand() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the executable command for the container.
+ + +
+ + + + getCommand() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the executable command for the container.
+ + +
+ + + + getCommand() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the executable command for the container.
+ + +
+ + + + getContainer() + + - function in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
Retrieves the container associated with the runtime.
+ + +
+ + + + getContainer() + + - function in no.acntech.easycontainers.AbstractContainerRuntime + + +
+
Retrieves the container associated with the runtime.
+ + +
+ + + + getContainer() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Retrieves the container associated with the runtime.
+ + +
+ + + + getContent() + + - function in no.acntech.easycontainers.model.ContainerFile + + +
+
 
+ + +
+ + + + getDEFAULT() + + - function in no.acntech.easycontainers.model.ImageName.Companion + + +
+
 
+ + +
+ + + + getDEFAULT() + + - function in no.acntech.easycontainers.model.Namespace.Companion + + +
+
 
+ + +
+ + + + getDEFAULT() + + - function in no.acntech.easycontainers.model.RepositoryName.Companion + + +
+
 
+ + +
+ + + + getDefaultDockerDaemonEndpoint() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getDefaultRegistryCompleteURL() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getDefaultRegistryEndpoint() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getDefaultWslDistro() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
 
+ + +
+ + + + getDirectory(no.acntech.easycontainers.model.UnixDir,java.nio.file.Path) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Downloads a directory from the container.
+ + +
+ + + + getDirectory(no.acntech.easycontainers.model.UnixDir,java.nio.file.Path) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Downloads a directory from the container.
+ + +
+ + + + getDirectory(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
Downloads a directory from the container.
+ + +
+ + + + getDirectory(java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
Downloads a directory from the container.
+ + +
+ + + + getDirectory(no.acntech.easycontainers.model.UnixDir,java.nio.file.Path) + + - function in no.acntech.easycontainers.model.Container + + +
+
Downloads a directory from the container.
+ + +
+ + + + getDOCKER() + + - function in no.acntech.easycontainers.model.RegistryURL.Companion + + +
+
 
+ + +
+ + + + getDuration() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the duration of the container execution (RUNNING state).
+ + +
+ + + + getDuration() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the duration of the container execution (RUNNING state).
+ + +
+ + + + getDuration() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the duration of the container execution (RUNNING state).
+ + +
+ + + + getEi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.kubernetes.PodPhase + + +
+
Represents the different phases of a pod in a Kubernetes cluster.
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.model.Container.State + + +
+
Represents the state of a container.
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.model.ContainerPlatformType + + +
+
Enum class representing the container types supported by the library.
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.model.ExecutionMode + + +
+
Enum class representing the execution mode of the container.
+ + +
+ + + + getEntries() + + - function in no.acntech.easycontainers.model.Verbosity + + +
+
Enum class representing different levels of verbosity.
+ + +
+ + + + getEnv() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the environment variables associated with the container.
+ + +
+ + + + getEnv() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the environment variables associated with the container.
+ + +
+ + + + getEnv() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the environment variables associated with the container.
+ + +
+ + + + getETC() + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + getExclusiveMax() + + - function in no.acntech.easycontainers.util.lang.RangeValidator + + +
+
the exclusive maximum value of the range (optional)
+ + +
+ + + + getExclusiveMin() + + - function in no.acntech.easycontainers.util.lang.RangeValidator + + +
+
the exclusive minimum value of the range (optional)
+ + +
+ + + + getExecutionMode() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the execution mode of the container.
+ + +
+ + + + getExecutionMode() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the execution mode of the container.
+ + +
+ + + + getExecutionMode() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the execution mode of the container.
+ + +
+ + + + getExitCode() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the exit code of the container.
+ + +
+ + + + getExitCode() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the exit code of the container.
+ + +
+ + + + getExitCode() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the exit code of the container.
+ + +
+ + + + getExposedPorts() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the list of network ports exposed by the container.
+ + +
+ + + + getExposedPorts() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the list of network ports exposed by the container.
+ + +
+ + + + getExposedPorts() + + - function in no.acntech.easycontainers.model.Container + + +
+
Returns the list of network ports exposed by the container.
+ + +
+ + + + getFile(no.acntech.easycontainers.model.UnixDir,java.lang.String,java.nio.file.Path) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Downloads a file from the container.
+ + +
+ + + + getFile(no.acntech.easycontainers.model.UnixDir,java.lang.String,java.nio.file.Path) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Downloads a file from the container.
+ + +
+ + + + getFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + getFile(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + getFile(no.acntech.easycontainers.model.UnixDir,java.lang.String,java.nio.file.Path) + + - function in no.acntech.easycontainers.model.Container + + +
+
Downloads a file from the container.
+ + +
+ + + + getFinishTime() + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Retrieves the finish time of the image building process.
+ + +
+ + + + getGENERAL_EXECUTOR_SERVICE() + + - function in no.acntech.easycontainers.AbstractContainerRuntime.Companion + + +
+
 
+ + +
+ + + + getGi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getHOME() + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + getHost() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the host of the container.
+ + +
+ + + + getHost() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the host of the container.
+ + +
+ + + + getHost() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the host of the container.
+ + +
+ + + + getHostDir() + + - function in no.acntech.easycontainers.model.Volume + + +
+
 
+ + +
+ + + + getHostFile() + + - function in no.acntech.easycontainers.model.ContainerFile + + +
+
 
+ + +
+ + + + getHTTP() + + - function in no.acntech.easycontainers.model.NetworkPort.Companion + + +
+
 
+ + +
+ + + + getHTTP() + + - function in no.acntech.easycontainers.model.PortMappingName.Companion + + +
+
 
+ + +
+ + + + getHTTPS() + + - function in no.acntech.easycontainers.model.NetworkPort.Companion + + +
+
 
+ + +
+ + + + getHTTPS() + + - function in no.acntech.easycontainers.model.PortMappingName.Companion + + +
+
 
+ + +
+ + + + getImage() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the image for the container.
+ + +
+ + + + getImage() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the image for the container.
+ + +
+ + + + getImage() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the image for the container.
+ + +
+ + + + getImageDigest(java.lang.String,java.lang.String,java.lang.String) + + - function in no.acntech.easycontainers.docker.DockerRegistryUtils + + +
+
Retrieves the digest of a Docker image from a specified registry using the provided image name and tag.
+ + +
+ + + + getImageName() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
The image name.
+ + +
+ + + + getInclusiveMax() + + - function in no.acntech.easycontainers.util.lang.RangeValidator + + +
+
the inclusive maximum value of the range (optional)
+ + +
+ + + + getInclusiveMin() + + - function in no.acntech.easycontainers.util.lang.RangeValidator + + +
+
the inclusive minimum value of the range (optional)
+ + +
+ + + + getIpAddress() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the IP address of the container.
+ + +
+ + + + getIpAddress() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the IP address of the container.
+ + +
+ + + + getIpAddress() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the IP address of the container.
+ + +
+ + + + getK8sGeneralDataHostDir() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getK8sGeneralDataPvcName() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getK8sKanikoDataHostDir() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getK8sKanikoDataPvcName() + + - function in no.acntech.easycontainers.Environment + + +
+
 
+ + +
+ + + + getKi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getKUBERNETES() + + - function in no.acntech.easycontainers.model.RegistryURL.Companion + + +
+
 
+ + +
+ + + + getLabels() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the labels associated with the container.
+ + +
+ + + + getLabels() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the labels associated with the container.
+ + +
+ + + + getLabels() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the labels associated with the container.
+ + +
+ + + + getLATEST() + + - function in no.acntech.easycontainers.model.ImageTag.Companion + + +
+
 
+ + +
+ + + + getLOCAL() + + - function in no.acntech.easycontainers.model.RegistryURL.Companion + + +
+
 
+ + +
+ + + + getLocalIpAddresses() + + - function in no.acntech.easycontainers.util.net.NetworkUtils + + +
+
Retrieves the list of local IP addresses.
+ + +
+ + + + getLocalizedMessage() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + getMappedPort(no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the mapped port for the specified network port.
+ + +
+ + + + getMappedPort(no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the mapped port for the specified network port.
+ + +
+ + + + getMappedPort(no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.model.Container + + +
+
Returns the mapped port for the specified network port.
+ + +
+ + + + getMax() + + - function in no.acntech.easycontainers.util.text.LengthValidator + + +
+
The maximum length of the string.
+ + +
+ + + + getMaxLifeTime() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getMaxLifeTime() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getMaxLifeTime() + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + getMemory() + + - function in no.acntech.easycontainers.model.Volume + + +
+
 
+ + +
+ + + + getMemoryBacked() + + - function in no.acntech.easycontainers.model.Volume + + +
+
 
+ + +
+ + + + getMessage() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + getMi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getMin() + + - function in no.acntech.easycontainers.util.text.LengthValidator + + +
+
The minimum length of the string.
+ + +
+ + + + getMNT() + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + getMountDir() + + - function in no.acntech.easycontainers.model.Volume + + +
+
 
+ + +
+ + + + getMountPath() + + - function in no.acntech.easycontainers.model.ContainerFile + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.Container.State + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.ContainerPlatformType + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.ExecutionMode + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.ImageBuilder.State + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.PodPhase + + +
+
 
+ + +
+ + + + getName() + + - function in kotlin.Verbosity + + +
+
 
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the name of the container.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the name of the container.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Returns the name of the (first) Kubernetes container associated with the (first) pod.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Returns the name of the (first) Kubernetes container associated with the (first) pod.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.model.Container + + +
+
Returns the name of the container.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.model.ContainerFile + + +
+
 
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.
+ + +
+ + + + getName() + + - function in no.acntech.easycontainers.model.Volume + + +
+
 
+ + +
+ + + + getNamespace() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the namespace of the container.
+ + +
+ + + + getNamespace() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Returns the namespace of the container.
+ + +
+ + + + getNamespace() + + - function in no.acntech.easycontainers.kubernetes.ContainerLogStreamer + + +
+
 
+ + +
+ + + + getNamespace() + + - function in no.acntech.easycontainers.model.Container + + +
+
Returns the namespace of the container.
+ + +
+ + + + getNetworkName() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getNetworkName() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getNetworkName() + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.Container.State + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.ContainerPlatformType + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.ExecutionMode + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.ImageBuilder.State + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.PodPhase + + +
+
 
+ + +
+ + + + getOrdinal() + + - function in kotlin.Verbosity + + +
+
 
+ + +
+ + + + getOutputLineCallback() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the log output callback of the container.
+ + +
+ + + + getOutputLineCallback() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the log output callback of the container.
+ + +
+ + + + getOutputLineCallback() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the log output callback of the container.
+ + +
+ + + + getPattern() + + - function in no.acntech.easycontainers.util.text.RegexValidator + + +
+
The regular expression pattern used for validation.
+ + +
+ + + + getPi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getPodName() + + - function in no.acntech.easycontainers.kubernetes.ContainerLogStreamer + + +
+
 
+ + +
+ + + + getPortMappings() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the port mappings for the container.
+ + +
+ + + + getPortMappings() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the port mappings for the container.
+ + +
+ + + + getPortMappings() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the port mappings for the container.
+ + +
+ + + + getRegistryUrl() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
The registry URL of the image.
+ + +
+ + + + getRemainingTime(java.util.concurrent.TimeUnit) + + - function in no.acntech.easycontainers.util.time.WaitTimeCalculator + + +
+
Calculates the remaining time based on the unit provided, calculated from the start time for this instance.
+ + +
+ + + + getRepositoryName() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
The repository name of the image.
+ + +
+ + + + getROOT() + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + getRuntime() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the (underlying) runtime of the container.
+ + +
+ + + + getRuntime() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the (underlying) runtime of the container.
+ + +
+ + + + getRuntime() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the (underlying) runtime of the container.
+ + +
+ + + + getSCHEDULER() + + - function in no.acntech.easycontainers.AbstractContainerRuntime.Companion + + +
+
 
+ + +
+ + + + getSNAKE_TO_CAMEL() + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + getSSH() + + - function in no.acntech.easycontainers.model.NetworkPort.Companion + + +
+
 
+ + +
+ + + + getSSH() + + - function in no.acntech.easycontainers.model.PortMappingName.Companion + + +
+
 
+ + +
+ + + + getStackTrace() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + getStartTime() + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Retrieves the start time of the image build process.
+ + +
+ + + + getStartTime() + + - function in no.acntech.easycontainers.util.time.WaitTimeCalculator + + +
+
The start time of the wait time calculation
+ + +
+ + + + getState() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the state of the container.
+ + +
+ + + + getState() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Retrieves the state of the container.
+ + +
+ + + + getState() + + - function in no.acntech.easycontainers.ImageBuilder + + +
+
Retrieves the current state.
+ + +
+ + + + getState() + + - function in no.acntech.easycontainers.model.Container + + +
+
Retrieves the state of the container.
+ + +
+ + + + getSuppressed() + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + getTag() + + - function in no.acntech.easycontainers.model.ImageURL + + +
+
The image tag.
+ + +
+ + + + getTEST() + + - function in no.acntech.easycontainers.model.Namespace.Companion + + +
+
 
+ + +
+ + + + getTEST() + + - function in no.acntech.easycontainers.model.RepositoryName.Companion + + +
+
 
+ + +
+ + + + getTi() + + - function in no.acntech.easycontainers.model.Memory.Companion + + +
+
 
+ + +
+ + + + getTMP() + + - function in no.acntech.easycontainers.model.UnixDir.Companion + + +
+
 
+ + +
+ + + + getTRANSPORT() + + - function in no.acntech.easycontainers.model.PortMappingName.Companion + + +
+
 
+ + +
+ + + + getType() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Retrieves the type of the container platform.
+ + +
+ + + + getType() + + - function in no.acntech.easycontainers.kubernetes.K8sRuntime + + +
+
Retrieves the type of the container platform.
+ + +
+ + + + getType() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Retrieves the type of the container platform.
+ + +
+ + + + getType() + + - function in no.acntech.easycontainers.model.ContainerRuntime + + +
+
Retrieves the type of the container platform.
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.Arg + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.CPU + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.ContainerFileName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.ContainerName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.EnvVarKey + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.EnvVarValue + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.Executable + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.Host + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.ImageName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.ImageTag + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.LabelKey + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.LabelValue + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.Namespace + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.NetworkName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.NetworkPort + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.PortMappingName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.RegistryURL + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.RepositoryName + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.SemanticVersion + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.UnixDir + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + getValue() + + - function in no.acntech.easycontainers.model.VolumeName + + +
+
The underlying string value of the volume name.
+ + +
+ + + + getVolumes() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getVolumes() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
 
+ + +
+ + + + getVolumes() + + - function in no.acntech.easycontainers.model.Container + + +
+
 
+ + +
+ + + + getWaitTimeUnit() + + - function in no.acntech.easycontainers.util.time.WaitTimeCalculator + + +
+
The wait time unit
+ + +
+ + + + getWaitTimeValue() + + - function in no.acntech.easycontainers.util.time.WaitTimeCalculator + + +
+
The wait time value
+ + +
+ + + + getWHITESPACE_REGEX() + + - function in no.acntech.easycontainers.util.text.FunctionsKt + + +
+
 
+ + +
+ + + + getWslDistroNames() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Retrieves the names of the Windows Subsystem for Linux (WSL) distributions installed on the system.
+ + +
+ + + + getWslIpAddress() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
 
+ + +
+ + + + guardedExecution(kotlin.jvm.functions.Function0,kotlin.Pair,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function0) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
A more generic version of the guardedExecution function, which allows for specifying a list of pairs of exception classes and their corresponding handler functions.
+ + +
+ + + + guardedExecution(kotlin.jvm.functions.Function0,java.util.List,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function0) + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
Guards a given block of code, and calls the onError function if any of the specified exceptions (or their subclasses) are thrown.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-8.html b/apidocs/javadoc/index-files/index-8.html new file mode 100644 index 00000000..59ee2e61 --- /dev/null +++ b/apidocs/javadoc/index-files/index-8.html @@ -0,0 +1,326 @@ + + + + H-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

H

+
+ +
+ + + + handleK8sException(kotlin.Exception,org.slf4j.Logger) + + - function in no.acntech.easycontainers.kubernetes.ErrorSupport + + +
+
 
+ + +
+ + + + hashCode() + + - function in no.acntech.easycontainers.util.text.RegexValidator + + +
+
 
+ + +
+ + + + hasPortMapping(no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.model.Container + + +
+
Checks if the given network port has a mapping defined in the container's port mappings.
+ + +
+ + + + hasPortMapping(no.acntech.easycontainers.model.NetworkPort) + + - function in no.acntech.easycontainers.model.Container + + +
+
Checks if the given network port has a mapping defined in the container's port mappings.
+ + +
+ + + + Host + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a host.
+ + +
+ + + + Host.Companion + + - class in no.acntech.easycontainers.model.Host + + +
+
 
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index-files/index-9.html b/apidocs/javadoc/index-files/index-9.html new file mode 100644 index 00000000..faea2d2d --- /dev/null +++ b/apidocs/javadoc/index-files/index-9.html @@ -0,0 +1,651 @@ + + + + I-index + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +

I

+
+ +
+ + + + identityTransform() + + - function in no.acntech.easycontainers.util.lang.FunctionsKt + + +
+
 
+ + +
+ + + + ImageBuilder + + - class in no.acntech.easycontainers + + +
+
An abstract class for building Docker images.
+ + +
+ + + + ImageBuilder.Companion + + - class in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + ImageBuilder.State + + - class in no.acntech.easycontainers.ImageBuilder + + +
+
 
+ + +
+ + + + ImageName + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a Docker (registry) image name.
+ + +
+ + + + ImageName.Companion + + - class in no.acntech.easycontainers.model.ImageName + + +
+
 
+ + +
+ + + + ImageTag + + - class in no.acntech.easycontainers.model + + +
+
Value object representing a Docker image tag.
+ + +
+ + + + ImageTag.Companion + + - class in no.acntech.easycontainers.model.ImageTag + + +
+
 
+ + +
+ + + + ImageURL + + - class in no.acntech.easycontainers.model + + +
+
Represents a Docker image URL consisting of a registry URL, repository name, image name, and tag.
+ + +
+ + + + ImageURL.Companion + + - class in no.acntech.easycontainers.model.ImageURL + + +
+
 
+ + +
+ + + + IN_PROGRESS + + - enum entry in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + INFO + + - enum entry in no.acntech.easycontainers.model.Verbosity + + +
+
 
+ + +
+ + + + initCause(java.lang.Throwable) + + - function in kotlin.Throwable + + +
+
 
+ + +
+ + + + INITIALIZED + + - enum entry in no.acntech.easycontainers.ImageBuilder.State + + +
+
 
+ + +
+ + + + INITIALIZING + + - enum entry in no.acntech.easycontainers.model.Container.State + + +
+

The container is being initialized.

+ + +
+ + + + instantToLabelValue(java.time.Instant) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Converts an Instant to a legal label value.
+ + +
+ + + + isCompleteUnixPath(java.lang.String) + + - function in no.acntech.easycontainers.util.io.FileUtils + + +
+
Checks if the provided path is a complete Unix path.
+ + +
+ + + + isDockerDesktopOnWindows() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
 
+ + +
+ + + + isEphemeral() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Checks whether the container is ephemeral.
+ + +
+ + + + isEphemeral() + + - function in no.acntech.easycontainers.GenericContainer + + +
+
Checks whether the container is ephemeral.
+ + +
+ + + + isEphemeral() + + - function in no.acntech.easycontainers.model.Container + + +
+
Checks whether the container is ephemeral.
+ + +
+ + + + isIp4Address(java.lang.String) + + - function in no.acntech.easycontainers.util.net.NetworkUtils + + +
+
Checks if the given string represents a valid IPv4 address.
+ + +
+ + + + isLegalLabelKey(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Checks if the given label key is legal.
+ + +
+ + + + isLegalLabelValue(java.lang.String) + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Checks if the given value is a legal label value.
+ + +
+ + + + isLinux() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Checks if the current operating system is Linux.
+ + +
+ + + + isMac() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Checks if the current operating system is macOS.
+ + +
+ + + + isRunningInsideCluster() + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Checks whether the current application is running inside a cluster.
+ + +
+ + + + isRunningOutsideCluster() + + - function in no.acntech.easycontainers.kubernetes.K8sUtils + + +
+
Checks if the application is running outside of a cluster.
+ + +
+ + + + isTcpPortOpen(java.lang.String,java.lang.Integer,java.lang.Integer) + + - function in no.acntech.easycontainers.util.net.NetworkUtils + + +
+
Checks if a given port on a host is open and reachable - similar to the <code>'nc -z'</code> *nix command.
+ + +
+ + + + isWindows() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Checks if the current operating system is Windows.
+ + +
+ + + + isWslInstalled() + + - function in no.acntech.easycontainers.util.platform.PlatformUtils + + +
+
Checks if Windows Subsystem for Linux (WSL) is installed on the system.
+ + +
+ + A  + + B  + + C  + + D  + + E  + + F  + + G  + + H  + + I  + + K  + + L  + + M  + + N  + + O  + + P  + + R  + + S  + + T  + + U  + + V  + + W  + +
+
+ + + diff --git a/apidocs/javadoc/index.html b/apidocs/javadoc/index.html new file mode 100644 index 00000000..522dd33a --- /dev/null +++ b/apidocs/javadoc/index.html @@ -0,0 +1,198 @@ + + + + easycontainers + + + + + + + + + + + + + + + + + +
+ +
+
+
+

easycontainers

+
+
+
+
+
+

See: Description

+
+
+ + + +
+
+ + + + diff --git a/apidocs/javadoc/jquery/external/jquery/jquery.js b/apidocs/javadoc/jquery/external/jquery/jquery.js new file mode 100644 index 00000000..fc6c299b --- /dev/null +++ b/apidocs/javadoc/jquery/external/jquery/jquery.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + +
+ +
+ +
+
+ +

Object AbstractContainerRuntime.Companion

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/AbstractContainerRuntime.html b/apidocs/javadoc/no/acntech/easycontainers/AbstractContainerRuntime.html new file mode 100644 index 00000000..f1014ef6 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/AbstractContainerRuntime.html @@ -0,0 +1,527 @@ + + + + AbstractContainerRuntime + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AbstractContainerRuntime

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.ContainerRuntime + + +
    +
    + +
    +
    +
    +public abstract class AbstractContainerRuntime
    + implements ContainerRuntime
    +                    
    +

    AbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime. It contains methods for starting and stopping containers, executing commands inside containers, transferring files to and from containers, and retrieving information about the container runtime.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Container + getContainer() + Retrieves the container associated with the runtime.
      Unit + start() + Starts the execution of the container.
      Unit + stop() + Stops the container runtime.
      Unit + delete(Boolean force) + Deletes the container with an optional force flag.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.ContainerRuntime

        + getName, getType, kill
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AbstractContainerRuntime

        +
        AbstractContainerRuntime(GenericContainer container)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getContainer

        +
         Container getContainer()
        +

        Retrieves the container associated with the runtime.

        + +
        + + + + +
        Returns:
        +

        the container as a Container object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        start

        +
         Unit start()
        +

        Starts the execution of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        stop

        +
         Unit stop()
        +

        Stops the container runtime.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        delete

        +
         Unit delete(Boolean force)
        +

        Deletes the container with an optional force flag.

        + +
        + + +
        Parameters:
        + + +
        force - if true, force the deletion of the container (default is false)
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/BaseContainerBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/BaseContainerBuilder.html new file mode 100644 index 00000000..816f9b6b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/BaseContainerBuilder.html @@ -0,0 +1,1476 @@ + + + + BaseContainerBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BaseContainerBuilder

+
+
+ +
+ +
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        BaseContainerBuilder

        +
        BaseContainerBuilder()
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + +
        +
      • +

        withExecutionMode

        +
         SELF withExecutionMode(ExecutionMode executionMode)
        +

        Sets the execution mode for the container.

        + +
        + + +
        Parameters:
        + + +
        executionMode - The execution mode to be set.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withName

        +
         SELF withName(ContainerName name)
        +

        Returns a new instance of the container object with the specified name.

        + +
        + + +
        Parameters:
        + + +
        name - the name of the container
        + + + + + +
        Returns:
        +

        a new instance of the container object with the specified name

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNamespace

        +
         SELF withNamespace(Namespace namespace)
        +

        Sets the namespace for the ContainerBuilder.

        + +
        + + +
        Parameters:
        + + +
        namespace - The namespace to set.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withLabel

        +
         SELF withLabel(LabelKey key, LabelValue value)
        +

        Adds a label to the container with the given key and value.

        + +
        + + +
        Parameters:
        + + +
        key - the key of the label
        + + + +
        value - the value of the label
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         SELF withEnv(String key, String value)
        +

        Adds an environment variable with the specified key and value.

        + +
        + + +
        Parameters:
        + + +
        key - The key of the environment variable.
        + + + +
        value - The value of the environment variable.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         SELF withEnv(EnvVarKey key, EnvVarValue value)
        +

        Sets an environment variable with the given key and value.

        + +
        + + +
        Parameters:
        + + +
        key - The key of the environment variable.
        + + + +
        value - The value of the environment variable.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         SELF withEnv(Map<EnvVarKey, EnvVarValue> env)
        +

        Sets the environment variables for the container.

        + +
        + + +
        Parameters:
        + + +
        env - a map containing the environment variable keys and values
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCommand

        +
         SELF withCommand(Executable command)
        +

        Sets the command for the container.

        + +
        + + +
        Parameters:
        + + +
        command - the executable command to be set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withArgs

        +
         SELF withArgs(Args args)
        +

        Sets the command arguments for the container.

        + +
        + + +
        Parameters:
        + + +
        args - The command arguments to be set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withImage

        +
         SELF withImage(ImageURL image)
        +

        Set the image to use for the container.

        + +
        + + +
        Parameters:
        + + +
        image - The image to use for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withExposedPort

        +
         SELF withExposedPort(PortMappingName name, NetworkPort port)
        +

        Adds an exposed port to the container configuration.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the port mapping.
        + + + +
        port - The network port to expose.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withPortMapping

        +
         SELF withPortMapping(NetworkPort port, NetworkPort mappedPort)
        +

        Maps a container exposed network port to another network port.

        + +
        + + +
        Parameters:
        + + +
        port - The network port to be mapped.
        + + + +
        mappedPort - The mapped network port.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNetworkName

        +
         SELF withNetworkName(NetworkName networkName)
        +

        Sets the network name for the container.

        + +
        + + +
        Parameters:
        + + +
        networkName - the network name to set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuRequest

        +
         SELF withCpuRequest(CPU cpuRequest)
        +

        Sets the CPU request for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuRequest - The CPU request for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuLimit

        +
         SELF withCpuLimit(CPU cpuLimit)
        +

        Sets the CPU limit for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuLimit - The CPU limit to be set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withMemoryLimit

        +
         SELF withMemoryLimit(Memory memoryLimit)
        +

        Sets the memory limit for the container.

        + +
        + + +
        Parameters:
        + + +
        memoryLimit - The memory limit to set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withIsEphemeral

        +
         SELF withIsEphemeral(Boolean ephemeral)
        +

        Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

        + +
        + + +
        Parameters:
        + + +
        ephemeral - The ephemeral flag to be set.
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        withOutputLineCallback

        +
         SELF withOutputLineCallback(OutputLineCallback outputLineCallback)
        +

        Sets the line callback for logging purposes.

        + +
        + + +
        Parameters:
        + + +
        outputLineCallback - The line callback to be used for logging.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withVolume

        +
         SELF withVolume(VolumeName name, UnixDir mountPath)
        +

        Sets the volume name and mount path for the current instance of the object.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the volume to be set.
        + + + +
        mountPath - The mount path to be set as the mount point for the volume.
        + + + + + +
        Returns:
        +

        An instance of the object with the volume name and mount path set.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withVolume

        +
         SELF withVolume(Volume volume)
        +

        Sets the volume for the container.

        + +
        + + +
        Parameters:
        + + +
        volume - The volume to be added or mapped into the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMaxLifeTime

        +
         SELF withMaxLifeTime(Duration maxLifeTime)
        +

        Sets the maximum lifetime for the container.

        + +
        + + +
        Parameters:
        + + +
        maxLifeTime - The maximum lifetime of the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMaxLifeTime

        +
         SELF withMaxLifeTime(Long value, ChronoUnit unit)
        +

        Sets the maximum lifetime for the container.

        + +
        + + +
        Parameters:
        + + +
        value - The value of the maximum lifetime.
        + + + +
        unit - The unit of time for the maximum lifetime.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCustomProperty

        +
         SELF withCustomProperty(String key, Object value)
        +

        Adds a custom property to the container.

        + +
        + + +
        Parameters:
        + + +
        key - the key of the custom property
        + + + +
        value - the value of the custom property
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/ContainerBuilderCallback.html b/apidocs/javadoc/no/acntech/easycontainers/ContainerBuilderCallback.html new file mode 100644 index 00000000..8d92bc72 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/ContainerBuilderCallback.html @@ -0,0 +1,393 @@ + + + + ContainerBuilderCallback + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ContainerBuilderCallback

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface ContainerBuilderCallback
    +
    +                    
    +

    An interface for defining a callback to configure a container builder. Implement the ContainerBuilderCallback interface to provide custom configuration logic for a container builder.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      abstract Unit + configure(ContainerBuilder<?> builder) + Configures a container builder.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        configure

        +
         abstract Unit configure(ContainerBuilder<?> builder)
        +

        Configures a container builder.

        + +
        + + +
        Parameters:
        + + +
        builder - the container builder to configure
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/ContainerException.html b/apidocs/javadoc/no/acntech/easycontainers/ContainerException.html new file mode 100644 index 00000000..c7e45842 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/ContainerException.html @@ -0,0 +1,440 @@ + + + + ContainerException + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ContainerException

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + +
    +
    + +
    +
    +
    +public class ContainerException
    +extends RuntimeException
    +                    
    +

    ContainerException is a subclass of RuntimeException that is used to represent exceptions that occur in the context of container operations.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final Throwablecause
      private final Stringmessage
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + +
      Modifier and TypeMethodDescription
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Throwable

        + addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ContainerException

        +
        ContainerException()
        +
        + +
      • +
      + + +
        +
      • +

        ContainerException

        +
        ContainerException(Throwable cause)
        +
        + +
      • +
      + + +
        +
      • +

        ContainerException

        +
        ContainerException(String message)
        +
        + +
      • +
      + + +
        +
      • +

        ContainerException

        +
        ContainerException(String message, Throwable cause)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/Environment.html b/apidocs/javadoc/no/acntech/easycontainers/Environment.html new file mode 100644 index 00000000..f51b55a4 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/Environment.html @@ -0,0 +1,698 @@ + + + + Environment + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Environment

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Environment
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.Companion.html new file mode 100644 index 00000000..b5793bdf --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object GenericContainer.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ContainerBuilder<?> + builder() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html new file mode 100644 index 00000000..ca437aea --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html @@ -0,0 +1,420 @@ + + + + GenericContainerBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GenericContainer.GenericContainerBuilder

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Container + build() + This method is used to build a Container object.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.BaseContainerBuilder

        + toString, withArgs, withCommand, withContainerFile, withContainerPlatformType, withCpuLimit, withCpuRequest, withCustomProperty, withEnv, withEnv, withEnv, withExecutionMode, withExposedPort, withImage, withIsEphemeral, withLabel, withMaxLifeTime, withMaxLifeTime, withMemoryLimit, withMemoryRequest, withName, withNamespace, withNetworkName, withOutputLineCallback, withPortMapping, withVolume, withVolume
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.ContainerBuilder

        + withArgs, withCommand, withContainerFile, withContainerFile, withContainerFile, withContainerFile, withCpuLimit, withCpuLimit, withCpuRequest, withCpuRequest, withEnvAsStringMap, withExposedPort, withImage, withLabel, withMaxLifeTime, withMemoryLimit, withMemoryLimit, withMemoryLimit, withMemoryRequest, withMemoryRequest, withName, withNamespace, withNetworkName, withPortMapping, withVolume
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GenericContainer.GenericContainerBuilder

        +
        GenericContainer.GenericContainerBuilder()
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        build

        +
         Container build()
        +

        This method is used to build a Container object.

        + +
        + + + + +
        Returns:
        +

        A Container object after building it.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.html b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.html new file mode 100644 index 00000000..c002504a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/GenericContainer.html @@ -0,0 +1,1507 @@ + + + + GenericContainer + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GenericContainer

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.Container + + +
    +
    + +
    +
    +
    +public class GenericContainer
    + implements Container
    +                    
    +

    GenericContainer represents a generic container implementation that can be customized and built using the provided builder. It implements the Container interface.

    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    + +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + +
        +
      • +

        getExecutionMode

        +
         ExecutionMode getExecutionMode()
        +

        Retrieves the execution mode of the container.

        + +
        + + + + +
        Returns:
        +

        the execution mode of the container as an ExecutionMode enum value

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getName

        +
         ContainerName getName()
        +

        Returns the name of the container.

        + +
        + + + + +
        Returns:
        +

        the name of the container as a ContainerName object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getNamespace

        +
         Namespace getNamespace()
        +

        Returns the namespace of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getLabels

        +
         Map<LabelKey, LabelValue> getLabels()
        +

        Retrieves the labels associated with the container.

        + +
        + + + + +
        Returns:
        +

        a map of LabelKey to LabelValue representing the labels

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getEnv

        +
         Map<EnvVarKey, EnvVarValue> getEnv()
        +

        Retrieves the environment variables associated with the container.

        + +
        + + + + +
        Returns:
        +

        a map containing the environment variable keys and values

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getCommand

        +
         Executable getCommand()
        +

        Retrieves the executable command for the container.

        <p> +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's +image for both Docker and kubernetes.
        + +
        + + + + +
        Returns:
        +

        the executable command as an Executable object, or null if no command is specified

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getArgs

        +
         Args getArgs()
        +

        Retrieves the command arguments for the container.

        <p> +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's
        + +
        + + + + +
        Returns:
        +

        the command arguments as an instance of Args, or null if there are no arguments.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getImage

        +
         ImageURL getImage()
        +

        Retrieves the image for the container.

        + +
        + + + + +
        Returns:
        +

        the URL of the image

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getExposedPorts

        +
         List<NetworkPort> getExposedPorts()
        +

        Returns the list of network ports exposed by the container.

        + +
        + + + + +
        Returns:
        +

        the list of exposed network ports as a List of NetworkPort objects

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getMappedPort

        +
         NetworkPort getMappedPort(NetworkPort port)
        +

        Returns the mapped port for the specified network port.

        + +
        + + +
        Parameters:
        + + +
        port - the network port for which to retrieve the mapped port
        + + + + + +
        Returns:
        +

        the mapped port as a NetworkPort object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getPortMappings

        +
         Map<NetworkPort, NetworkPort> getPortMappings()
        +

        Retrieves the port mappings for the container.

        + +
        + + + + +
        Returns:
        +

        a map of NetworkPort to NetworkPort representing the port mappings.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        isEphemeral

        +
         Boolean isEphemeral()
        +

        Checks whether the container is ephemeral.

        + +
        + + + + +
        Returns:
        +

        true if the container is ephemeral, false otherwise

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getHost

        +
         Host getHost()
        +

        Retrieves the host of the container.

        + +
        + + + + +
        Returns:
        +

        the host of the container as a Host object, or null if the host is not set

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getIpAddress

        +
         InetAddress getIpAddress()
        +

        Retrieves the IP address of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getDuration

        +
         Duration getDuration()
        +

        Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getExitCode

        +
         Integer getExitCode()
        +

        Retrieves the exit code of the container.

        + +
        + + + + +
        Returns:
        +

        the exit code of the container, or null if the container is still running or has never been started.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        execute

        +
         Pair<Integer, String> execute(Executable executable, Args args, Boolean useTty, UnixDir workingDir, InputStream input, OutputStream output, Long waitTimeValue, TimeUnit waitTimeUnit)
        +

        Executes a command in the container.

        <p> +Note that for Docker, std out and std err are combined in the std out result - hence the std error string is always empty.
        + +
        + + +
        Parameters:
        + + +
        executable - the command to execute
        + + + +
        args - the arguments to pass to the command
        + + + + + +
        workingDir - the working directory for the command
        + + + +
        input - the input stream to pass to the command
        + + + + + +
        waitTimeValue - the time to wait for the command to complete
        + + + +
        waitTimeUnit - the time unit for the wait time
        + + + + + +
        Returns:
        +

        a pair of the exit code and the std error output

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        putFile

        +
         Long putFile(Path localFile, UnixDir remoteDir, String remoteFilename)
        +

        Uploads a file to the container.

        + +
        + + +
        Parameters:
        + + +
        localFile - the path of the file to upload -
        + + + +
        remoteDir - the path where the file will be uploaded in the container - if it doesn't exist, it will be attempted created
        + + + +
        remoteFilename - the name of the file in the container - if null, the file will be uploaded with the same name as the local file
        + + + + + +
        Returns:
        +

        the size of the file in bytes

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getFile

        +
         Path getFile(UnixDir remoteDir, String remoteFilename, Path localPath)
        +

        Downloads a file from the container.

        + +
        + + +
        Parameters:
        + + +
        remoteDir - the path of the file to download
        + + + +
        remoteFilename - the name of the file in the container
        + + + +
        localPath - the path where the file will be downloaded to - if null, the file will be downloaded to the current directory, with the same name as the remote file, if not null, the file will be downloaded with the specified name unless the path is a directory, in which case the file will be downloaded to the directory with the same name as the remote file
        + + + + + +
        Returns:
        +

        the path of the downloaded file

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        putDirectory

        +
         Long putDirectory(Path localDir, UnixDir remoteDir)
        +

        Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        localDir - the path of the directory to upload
        + + + +
        remoteDir - the path where the directory will be uploaded in the container
        + + + + + +
        Returns:
        +

        the size of the directory in bytes

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getDirectory

        +
         Pair<Path, List<Path>> getDirectory(UnixDir remoteDir, Path localDir)
        +

        Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        remoteDir - the path of the directory to download
        + + + +
        localDir - the path where the directory will be downloaded to, defaults to a temporary directory
        + + + + + +
        Returns:
        +

        a pair of the path of the downloaded directory and a list of the paths of the downloaded files

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getState

        +
        @Synchronized() Container.State getState()
        +

        Retrieves the state of the container.

        + +
        + + + + +
        Returns:
        +

        the state of the container as a ContainerState enum value

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        waitForState

        +
         Boolean waitForState(Container.State state, Long timeout, TimeUnit unit)
        +

        Wait for the container to reach the specified state.

        + +
        + + +
        Parameters:
        + + +
        state - the expected state of the container
        + + + +
        timeout - the maximum time to wait for the container to reach the state, default is 0 which means indefinite wait
        + + + +
        unit - the time unit of the timeout, default is seconds
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        waitForCompletion

        +
         Boolean waitForCompletion(Long timeout, TimeUnit unit)
        +

        Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

        + +
        + + +
        Parameters:
        + + +
        timeout - the maximum time to wait for the container to stop, default is 0 which means indefinite wait
        + + + +
        unit - the time unit of the timeout, default is seconds
        + + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.Companion.html new file mode 100644 index 00000000..10ae181c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.Companion.html @@ -0,0 +1,402 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ImageBuilder.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ImageBuilder.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ImageBuilder + of(ContainerPlatformType type) + Creates and returns of ImageBuilder based on the provided container type.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        of

        +
         final ImageBuilder of(ContainerPlatformType type)
        +

        Creates and returns of ImageBuilder based on the provided container type.

        + +
        + + +
        Parameters:
        + + +
        type - the type of container, defaults to ContainerType.
        + + + + + +
        Returns:
        +

        an instance of ImageBuilder

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.State.html b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.State.html new file mode 100644 index 00000000..b67c281c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.State.html @@ -0,0 +1,510 @@ + + + + State + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ImageBuilder.State

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum ImageBuilder.State
    +extends Enum<ImageBuilder.State>
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ImageBuilder.State + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<ImageBuilder.State> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final EnumEntries<ImageBuilder.State> + getEntries() +
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final ImageBuilder.State valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<ImageBuilder.State> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.html new file mode 100644 index 00000000..e561ff8f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/ImageBuilder.html @@ -0,0 +1,1381 @@ + + + + ImageBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ImageBuilder

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public abstract class ImageBuilder
    +
    +                    
    +

    An abstract class for building Docker images. The class is designed to be extended by specific (concrete) implementations.

    <h2>Kubernetes quirks</h2> In order to build Docker images in a k8s cluster (using Kaniko) from a test environment running outside the cluster, you would normally use a shared volume between the host and the k8s cluster.

    <p> +In order to share a folder between the host and the k8s cluster the following config apply for Docker Desktop on +WSL (Windows Subsystem for Linux): +<ul> + <li> On the host the shared directory <i>must</i> be under /mnt/wsl/.. </li> + <li> In the k8s cluster the shared directory <i>must</i> be specified to be under /run/desktop/mnt/host/wsl/.. </li> +<code><pre> + apiVersion: v1 +kind: PersistentVolume +metadata: +name: kaniko-data-pv +labels: + type: local +spec: +storageClassName: hostpath +capacity: + storage: 100Mi +accessModes: + - ReadWriteMany +hostPath: /run/desktop/mnt/host/wsl/kaniko-data +</pre></code> +<p> +When creating and configuring the ImageBuilder, this path must be used as the local path. +<pre><code> + val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES) + .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/mnt/wsl/kaniko-data") + // other properties +</code></pre> +<p> +For KinD k8s the shared folder can be anywhere on the host file system, but the kind cluster must be configured +using a custom config applied at cluster startup in order for containers to mount the shared folder. +<p> +Example: +<p> +Host (wsl or native linux) path: /home/user/k8s-share/kaniko-data +<p> +Kind cluster config: +<code><pre> + kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +networking: +apiServerAddress: "0.0.0.0" +nodes: +- role: control-plane +extraMounts: + - hostPath: /home/[user]/kaniko-data + containerPath: /kaniko-data +</pre></code> +<p> +When creating and configuring the ImageBuilder (for kubernetes), this path must be used as the local path. +<pre><code> + val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES) + .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/home/[user]/kaniko-data") + // other properties +</code></pre>
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ImageBuilder

        +
        ImageBuilder()
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        withDockerContextDir

        +
         final ImageBuilder withDockerContextDir(Path dir)
        +

        Set the Docker context directory. This directory will be used as the build context when building the Docker image.

        + +
        + + +
        Parameters:
        + + +
        dir - the directory to use as the build context, if this exists the Dockerfile and all files in this directory are used to build the image.
        + + + + + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withImageRegistry

        +
         final ImageBuilder withImageRegistry(RegistryURL registry)
        +

        Sets the image registry for the ImageBuilder.

        + +
        + + +
        Parameters:
        + + +
        registry - the registry URL to be set
        + + + + + +
        Returns:
        +

        the current ImageBuilder instance

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withInsecureRegistry

        +
         final ImageBuilder withInsecureRegistry(Boolean insecureRegistry)
        +

        Sets the insecure registry flag for the image builder.

        + +
        + + +
        Parameters:
        + + +
        insecureRegistry - true to allow insecure registry, false otherwise
        + + + + + +
        Returns:
        +

        the updated image builder instance

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withRepository

        +
         final ImageBuilder withRepository(RepositoryName repository)
        +

        Sets the (registry) repository for the ImageBuilder.

        + +
        + + +
        Parameters:
        + + +
        repository - The repository to set for the ImageBuilder.
        + + + + + +
        Returns:
        +

        The updated ImageBuilder.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withName

        +
         final ImageBuilder withName(ImageName name)
        +

        Sets the name of the image.

        + +
        + + +
        Parameters:
        + + +
        name - The name to set for the image.
        + + + + + +
        Returns:
        +

        The instance of the ImageBuilder with the name set.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withTag

        +
         final ImageBuilder withTag(ImageTag tag)
        +

        Adds the given image tag to the builder.

        + +
        + + +
        Parameters:
        + + +
        tag - the image tag to add
        + + + + + +
        Returns:
        +

        the updated ImageBuilder instance

        + + + + +
        +
      • +
      + + + + + + + + + + + + + + +
        +
      • +

        withLabel

        +
         final ImageBuilder withLabel(LabelKey key, LabelValue value)
        +

        Adds a label to the ImageBuilder.

        + +
        + + +
        Parameters:
        + + +
        key - the label key
        + + + +
        value - the label value
        + + + + + +
        Returns:
        +

        the modified ImageBuilder instance with the added label

        + + + + +
        +
      • +
      + + + + + + + + + + + + + + +
        +
      • +

        withNamespace

        +
         final ImageBuilder withNamespace(Namespace namespace)
        +

        Sets the namespace for the ImageBuilder - this is only relevant for Kubernetes.

        + +
        + + +
        Parameters:
        + + +
        namespace - the namespace to set for the ImageBuilder
        + + + + + +
        Returns:
        +

        the updated ImageBuilder with the specified namespace set

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withVerbosity

        +
         final ImageBuilder withVerbosity(Verbosity verbosity)
        +

        Sets the verbosity level for the ImageBuilder.

        + +
        + + +
        Parameters:
        + + +
        verbosity - the verbosity level to set
        + + + + + +
        Returns:
        +

        the ImageBuilder instance

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withOutputLineCallback

        +
         final ImageBuilder withOutputLineCallback(OutputLineCallback outputLineCallback)
        +

        Sets the provided OutputLineCallback for this ImageBuilder instance.

        + +
        + + +
        Parameters:
        + + +
        outputLineCallback - the LineCallback to be used
        + + + + + +
        Returns:
        +

        the modified ImageBuilder instance

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCustomProperty

        +
         final ImageBuilder withCustomProperty(String key, Object value)
        +

        Adds a custom property to the image builder.

        + +
        + + +
        Parameters:
        + + +
        key - the key of the custom property
        + + + +
        value - the value of the custom property
        + + + + + +
        Returns:
        +

        the modified ImageBuilder object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getStartTime

        +
         abstract Instant getStartTime()
        +

        Retrieves the start time of the image build process.

        + +
        + + + + +
        Returns:
        +

        The start time of the image build as an Instant object, or null if the start time is unknown.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getFinishTime

        +
         abstract Instant getFinishTime()
        +

        Retrieves the finish time of the image building process.

        + +
        + + + + +
        Returns:
        +

        The finish time of the image building process as an Instant, or null if the process has not finished yet.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        buildImage

        +
         abstract Boolean buildImage()
        +

        Builds an image.

        + +
        + + + + +
        Returns:
        +

        true if the image is successfully built, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        toString

        +
         String toString()
        +

        Returns a string representation of this ImageBuilder.

        + +
        + + + + +
        Returns:
        +

        a string representation of this ImageBuilder

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getState

        +
        @Synchronized() final ImageBuilder.State getState()
        +

        Retrieves the current state.

        This method returns the current state of the object.

        + +
        + + + + +
        Returns:
        +

        the current state

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/PermissionException.html b/apidocs/javadoc/no/acntech/easycontainers/PermissionException.html new file mode 100644 index 00000000..8ba1681b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/PermissionException.html @@ -0,0 +1,440 @@ + + + + PermissionException + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class PermissionException

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + +
    +
    + +
    +
    +
    +public final class PermissionException
    +extends ContainerException
    +                    
    +

    PermissionException is a subclass of ContainerException that is used to represent exceptions that occur when there is a permission issue.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final Throwablecause
      private final Stringmessage
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + +
      Modifier and TypeMethodDescription
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Throwable

        + addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        PermissionException

        +
        PermissionException()
        +
        + +
      • +
      + + +
        +
      • +

        PermissionException

        +
        PermissionException(String message)
        +
        + +
      • +
      + + +
        +
      • +

        PermissionException

        +
        PermissionException(Throwable cause)
        +
        + +
      • +
      + + +
        +
      • +

        PermissionException

        +
        PermissionException(String message, Throwable cause)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html new file mode 100644 index 00000000..9c246546 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ElasticSearchContainer.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ElasticSearchContainer.ElasticSearchContainerBuilder + builder() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html new file mode 100644 index 00000000..e8f38bf5 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html @@ -0,0 +1,457 @@ + + + + ElasticSearchContainerBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ElasticSearchContainer.ElasticSearchContainerBuilder

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static StringIMAGE
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ElasticSearchContainer.ElasticSearchContainerBuilder + withVersion(SemanticVersion version) +
      Container + build() + This method is used to build a Container object.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.BaseContainerBuilder

        + toString, withArgs, withCommand, withContainerFile, withContainerPlatformType, withCpuLimit, withCpuRequest, withCustomProperty, withEnv, withEnv, withEnv, withExecutionMode, withExposedPort, withImage, withIsEphemeral, withLabel, withMaxLifeTime, withMaxLifeTime, withMemoryLimit, withMemoryRequest, withName, withNamespace, withNetworkName, withOutputLineCallback, withPortMapping, withVolume, withVolume
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.ContainerBuilder

        + withArgs, withCommand, withContainerFile, withContainerFile, withContainerFile, withContainerFile, withCpuLimit, withCpuLimit, withCpuRequest, withCpuRequest, withEnvAsStringMap, withExposedPort, withImage, withLabel, withMaxLifeTime, withMemoryLimit, withMemoryLimit, withMemoryLimit, withMemoryRequest, withMemoryRequest, withName, withNamespace, withNetworkName, withPortMapping, withVolume
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.html b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.html new file mode 100644 index 00000000..36a406dd --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/ElasticSearchContainer.html @@ -0,0 +1,406 @@ + + + + ElasticSearchContainer + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ElasticSearchContainer

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.Container + + +
    +
    + +
    +
    +
    +public final class ElasticSearchContainer
    +extends GenericContainer
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + +
      Modifier and TypeMethodDescription
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.GenericContainer

        + execute, getArgs, getCommand, getDirectory, getDuration, getEnv, getExecutionMode, getExitCode, getExposedPorts, getFile, getHost, getImage, getIpAddress, getLabels, getMappedPort, getMaxLifeTime, getName, getNamespace, getNetworkName, getOutputLineCallback, getPortMappings, getRuntime, getState, getVolumes, isEphemeral, putDirectory, putFile, toString, waitForCompletion, waitForState
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.Container

        + execute, getDirectory, getFile, hasPortMapping, onDelete, putDirectory, putFile
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.Companion.html new file mode 100644 index 00000000..3dd4a87e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object KanikoContainer.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final KanikoContainer.KanikoContainerBuilder + builder() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html new file mode 100644 index 00000000..54431d9d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html @@ -0,0 +1,1023 @@ + + + + KanikoContainerBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KanikoContainer.KanikoContainerBuilder

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.html b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.html new file mode 100644 index 00000000..9c4ea59c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/KanikoContainer.html @@ -0,0 +1,437 @@ + + + + KanikoContainer + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class KanikoContainer

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.Container + + +
    +
    + +
    +
    +
    +public final class KanikoContainer
    +extends GenericContainer
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Unit + onDelete() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.GenericContainer

        + execute, getArgs, getCommand, getDirectory, getDuration, getEnv, getExecutionMode, getExitCode, getExposedPorts, getFile, getHost, getImage, getIpAddress, getLabels, getMappedPort, getMaxLifeTime, getName, getNamespace, getNetworkName, getOutputLineCallback, getPortMappings, getRuntime, getState, getVolumes, isEphemeral, putDirectory, putFile, toString, waitForCompletion, waitForState
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.Container

        + execute, getDirectory, getFile, hasPortMapping, putDirectory, putFile
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/custom/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/custom/package-summary.html new file mode 100644 index 00000000..0bfa8e74 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/custom/package-summary.html @@ -0,0 +1,216 @@ + + + + Package no.acntech.easycontainers.custom + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.custom

+
+
+
+
+
+

See: Description

+
+
+ + + +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/docker/DockerClientFactory.html b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerClientFactory.html new file mode 100644 index 00000000..72f8381e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerClientFactory.html @@ -0,0 +1,395 @@ + + + + DockerClientFactory + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object DockerClientFactory

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class DockerClientFactory
    +
    +                    
    +

    The DockerClientFactory class is responsible for creating a DockerClient instance. It provides a method to create a default DockerClient using the Docker host configuration.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final DockerClient + createDefaultClient() + This method creates a default Docker client.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        createDefaultClient

        +
         final DockerClient createDefaultClient()
        +

        This method creates a default Docker client.

        + +
        + + + + +
        Returns:
        +

        The default DockerClient instance.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/docker/DockerConstants.html b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerConstants.html new file mode 100644 index 00000000..eb6b60cd --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerConstants.html @@ -0,0 +1,427 @@ + + + + DockerConstants + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object DockerConstants

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class DockerConstants
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/docker/DockerRegistryUtils.html b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerRegistryUtils.html new file mode 100644 index 00000000..27570c16 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/docker/DockerRegistryUtils.html @@ -0,0 +1,505 @@ + + + + DockerRegistryUtils + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object DockerRegistryUtils

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class DockerRegistryUtils
    +
    +                    
    +

    This object provides utility methods for interacting with a Docker registry.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getImageDigest(String registryUrl, String imageName, String tag) + Retrieves the digest of a Docker image from a specified registry using the provided image name and tag.
      final Unit + deleteImage(String registryUrl, String imageName, String digest, List<String> tags) + Deletes an image from a registry.
      final List<String> + getAllImageTags(String registryUrl, String imageName) + Retrieves all image tags for a given registry URL and image name.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getImageDigest

        +
         final String getImageDigest(String registryUrl, String imageName, String tag)
        +

        Retrieves the digest of a Docker image from a specified registry using the provided image name and tag.

        + +
        + + +
        Parameters:
        + + +
        registryUrl - The URL of the Docker registry.
        + + + +
        imageName - The name of the Docker image.
        + + + +
        tag - The tag of the Docker image.
        + + + + + +
        Returns:
        +

        The digest of the Docker image, or null if the operation fails or the digest is missing.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        deleteImage

        +
         final Unit deleteImage(String registryUrl, String imageName, String digest, List<String> tags)
        +

        Deletes an image from a registry.

        + +
        + + +
        Parameters:
        + + +
        registryUrl - The URL of the registry.
        + + + +
        imageName - The name of the image.
        + + + +
        digest - The digest of the image (optional).
        + + + +
        tags - The list of tags associated with the image (optional).
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getAllImageTags

        +
         final List<String> getAllImageTags(String registryUrl, String imageName)
        +

        Retrieves all image tags for a given registry URL and image name.

        + +
        + + +
        Parameters:
        + + +
        registryUrl - The URL of the registry.
        + + + +
        imageName - The name of the image.
        + + + + + +
        Returns:
        +

        The list of image tags as strings.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/docker/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/docker/package-summary.html new file mode 100644 index 00000000..1431362b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/docker/package-summary.html @@ -0,0 +1,188 @@ + + + + Package no.acntech.easycontainers.docker + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.docker

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    DockerClientFactoryThe DockerClientFactory class is responsible for creating a DockerClient instance.
    DockerConstants
    DockerRegistryUtilsThis object provides utility methods for interacting with a Docker registry.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/AccessChecker.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/AccessChecker.html new file mode 100644 index 00000000..7079b357 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/AccessChecker.html @@ -0,0 +1,1087 @@ + + + + AccessChecker + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AccessChecker

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class AccessChecker
    +
    +                    
    +

    AccessChecker is a class that provides methods to check access permissions for various operations in a Kubernetes cluster.

    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.html new file mode 100644 index 00000000..3140f453 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.html @@ -0,0 +1,510 @@ + + + + ContainerLogStreamer + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ContainerLogStreamer

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.lang.Runnable + + +
    +
    + +
    +
    +
    +public final class ContainerLogStreamer
    + implements Runnable
    +                    
    +

    Stream logs from a container in a Kubernetes pod. Implements Runnable and can be used in a Thread.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final StringpodName
      private final Stringnamespace
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getPodName() +
      final String + getNamespace() +
      Unit + run() +
      final Unit + stop() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ErrorSupport.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ErrorSupport.html new file mode 100644 index 00000000..01ffc0da --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/ErrorSupport.html @@ -0,0 +1,392 @@ + + + + ErrorSupport + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ErrorSupport

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ErrorSupport
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static ErrorSupportINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Unit + handleK8sException(Exception e, Logger log) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sClientFactory.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sClientFactory.html new file mode 100644 index 00000000..36868e5c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sClientFactory.html @@ -0,0 +1,392 @@ + + + + K8sClientFactory + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object K8sClientFactory

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class K8sClientFactory
    +
    +                    
    +

    A factory class for creating instances of Kubernetes clients.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static K8sClientFactoryINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final KubernetesClient + createDefaultClient() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sConstants.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sConstants.html new file mode 100644 index 00000000..4cbda52b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sConstants.html @@ -0,0 +1,427 @@ + + + + K8sConstants + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object K8sConstants

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class K8sConstants
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sJobRuntime.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sJobRuntime.html new file mode 100644 index 00000000..258e49f5 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sJobRuntime.html @@ -0,0 +1,454 @@ + + + + K8sJobRuntime + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class K8sJobRuntime

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.ContainerRuntime + + +
    +
    + +
    +
    +
    +public final class K8sJobRuntime
    +extends K8sRuntime
    +                    
    +

    Represents a Kubernetes Job runtime for a given container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      K8sJobRuntime(GenericContainer container, KubernetesClient client)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Unit + start() + Starts the execution of the container.
      Unit + stop() + Stop the job by deleting the Kubernetes Job resource.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.kubernetes.K8sRuntime

        + delete, getName, getType
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.AbstractContainerRuntime

        + getContainer
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.ContainerRuntime

        + kill
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        K8sJobRuntime

        +
        K8sJobRuntime(GenericContainer container, KubernetesClient client)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        start

        +
         Unit start()
        +

        Starts the execution of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        stop

        +
         Unit stop()
        +

        Stop the job by deleting the Kubernetes Job resource.

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sRuntime.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sRuntime.html new file mode 100644 index 00000000..8946b948 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sRuntime.html @@ -0,0 +1,599 @@ + + + + K8sRuntime + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class K8sRuntime

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.ContainerRuntime + + +
    +
    + +
    +
    +
    +public abstract class K8sRuntime
    +extends AbstractContainerRuntime
    +                    
    +

    Represents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both Kubernetes Jobs and Deployments.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      K8sRuntime(GenericContainer container, KubernetesClient client)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      ContainerName + getName() + Returns the name of the (first) Kubernetes container associated with the (first) pod.
      Unit + start() + Starts the execution of the container.
      Unit + stop() + Stops the container runtime.
      Unit + delete(Boolean force) + Deletes the container with an optional force flag.
      ContainerPlatformType + getType() + Retrieves the type of the container platform.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.AbstractContainerRuntime

        + getContainer
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.ContainerRuntime

        + kill
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        K8sRuntime

        +
        K8sRuntime(GenericContainer container, KubernetesClient client)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getName

        +
         ContainerName getName()
        +

        Returns the name of the (first) Kubernetes container associated with the (first) pod.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        start

        +
         Unit start()
        +

        Starts the execution of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        stop

        +
         Unit stop()
        +

        Stops the container runtime.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        delete

        +
         Unit delete(Boolean force)
        +

        Deletes the container with an optional force flag.

        + +
        + + +
        Parameters:
        + + +
        force - if true, force the deletion of the container (default is false)
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getType

        +
         ContainerPlatformType getType()
        +

        Retrieves the type of the container platform.

        + +
        + + + + +
        Returns:
        +

        the type of the container platform as a ContainerPlatformType enum value

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.html new file mode 100644 index 00000000..9c50b82d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.html @@ -0,0 +1,448 @@ + + + + K8sServiceRuntime + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class K8sServiceRuntime

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.model.ContainerRuntime + + +
    +
    + +
    +
    +
    +public final class K8sServiceRuntime
    +extends K8sRuntime
    +                    
    +

    Represents a Kubernetes service runtime that deploys and manages a container and associated resources.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Unit + stop() + Stops the container runtime.
      Unit + kill() + Kills the container by calling the stop() method.
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.kubernetes.K8sRuntime

        + delete, getName, getType, start
      • + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.AbstractContainerRuntime

        + getContainer
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        K8sServiceRuntime

        +
        K8sServiceRuntime(GenericContainer container, KubernetesClient client)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        stop

        +
         Unit stop()
        +

        Stops the container runtime.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        kill

        +
         Unit kill()
        +

        Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sUtils.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sUtils.html new file mode 100644 index 00000000..e6fdd85c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/K8sUtils.html @@ -0,0 +1,720 @@ + + + + K8sUtils + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object K8sUtils

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class K8sUtils
    +
    +                    
    +

    Object representing utility functions for interacting with Kubernetes cluster.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static K8sUtilsINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Boolean + isRunningInsideCluster() + Checks whether the current application is running inside a cluster.
      final Boolean + isRunningOutsideCluster() + Checks if the application is running outside of a cluster.
      final Boolean + canAccessClusterAPI() + Checks if the current user has access to the Cluster API.
      final Boolean + isLegalLabelKey(String key) + Checks if the given label key is legal.
      final Boolean + isLegalLabelValue(String value) + Checks if the given value is a legal label value.
      final String + normalizeConfigMapName(String name) +
      final String + normalizeLabelKey(String labelKey) + Normalizes the given label key by separating the prefix and name if a forward slash is present, normalizing the prefix and name by replacing invalid label characters with hyphens, removing multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, and converting the prefix and name to lowercase.
      final String + normalizeLabelValue(String value) + Normalizes the given label value by replacing invalid characters, removing multiple hyphens, trimming leading and trailing hyphens and underscores, and limiting the length to MAX_LABEL_LENGTH.
      final String + normalizeVolumeName(String value) +
      final String + instantToLabelValue(Instant instant) + Converts an Instant to a legal label value.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        isRunningInsideCluster

        +
         final Boolean isRunningInsideCluster()
        +

        Checks whether the current application is running inside a cluster.

        + +
        + + + + +
        Returns:
        +

        True if the application is running inside a cluster, False otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isRunningOutsideCluster

        +
         final Boolean isRunningOutsideCluster()
        +

        Checks if the application is running outside of a cluster.

        + +
        + + + + +
        Returns:
        +

        true if the application is running outside of a cluster, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        canAccessClusterAPI

        +
         final Boolean canAccessClusterAPI()
        +

        Checks if the current user has access to the Cluster API.

        + +
        + + + + +
        Returns:
        +

        true if the user has access to the Cluster API, false otherwise.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        isLegalLabelValue

        +
         final Boolean isLegalLabelValue(String value)
        +

        Checks if the given value is a legal label value.

        + +
        + + +
        Parameters:
        + + +
        value - the value to be checked
        + + + + + +
        Returns:
        +

        true if the value is a legal label value, false otherwise

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        normalizeLabelKey

        +
         final String normalizeLabelKey(String labelKey)
        +

        Normalizes the given label key by separating the prefix and name if a forward slash is present, normalizing the prefix and name by replacing invalid label characters with hyphens, removing multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, and converting the prefix and name to lowercase. The normalized label key is then constructed by concatenating the normalized prefix and name, separated by a forward slash if the prefix is not empty.

        + +
        + + +
        Parameters:
        + + +
        labelKey - The label key to be normalized.
        + + + + + +
        Returns:
        +

        The normalized label key.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        normalizeLabelValue

        +
         final String normalizeLabelValue(String value)
        +

        Normalizes the given label value by replacing invalid characters, removing multiple hyphens, trimming leading and trailing hyphens and underscores, and limiting the length to MAX_LABEL_LENGTH.

        + +
        + + +
        Parameters:
        + + +
        value - The label value to normalize.
        + + + + + +
        Returns:
        +

        The normalized label value.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        instantToLabelValue

        +
         final String instantToLabelValue(Instant instant)
        +

        Converts an Instant to a legal label value.

        + +
        + + +
        Parameters:
        + + +
        instant - The Instant to convert to a label value.
        + + + + + +
        Returns:
        +

        The label value representation of the Instant.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/PodPhase.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/PodPhase.html new file mode 100644 index 00000000..2d572c5f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/PodPhase.html @@ -0,0 +1,510 @@ + + + + PodPhase + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum PodPhase

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum PodPhase
    +extends Enum<PodPhase>
    +                    
    +

    Represents the different phases of a pod in a Kubernetes cluster.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final PodPhase + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<PodPhase> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final EnumEntries<PodPhase> + getEntries() + Represents the different phases of a pod in a Kubernetes cluster.
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final PodPhase valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<PodPhase> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getEntries

        +
         final EnumEntries<PodPhase> getEntries()
        +

        Represents the different phases of a pod in a Kubernetes cluster.

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/kubernetes/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/package-summary.html new file mode 100644 index 00000000..b8eeebca --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/kubernetes/package-summary.html @@ -0,0 +1,246 @@ + + + + Package no.acntech.easycontainers.kubernetes + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.kubernetes

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AccessCheckerAccessChecker is a class that provides methods to check access permissions for various operations in a Kubernetes cluster.
    ContainerLogStreamerStream logs from a container in a Kubernetes pod.
    K8sJobRuntimeRepresents a Kubernetes Job runtime for a given container.
    K8sRuntimeRepresents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both Kubernetes Jobs and Deployments.
    K8sServiceRuntimeRepresents a Kubernetes service runtime that deploys and manages a container and associated resources.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    ErrorSupport
    K8sClientFactoryA factory class for creating instances of Kubernetes clients.
    K8sConstants
    K8sUtilsObject representing utility functions for interacting with Kubernetes cluster.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    PodPhaseRepresents the different phases of a pod in a Kubernetes cluster.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Arg.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Arg.Companion.html new file mode 100644 index 00000000..efdd8a52 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Arg.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Arg.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Arg.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static Arg.CompanionINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Arg + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Arg.html b/apidocs/javadoc/no/acntech/easycontainers/model/Arg.html new file mode 100644 index 00000000..1a716f07 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Arg.html @@ -0,0 +1,502 @@ + + + + Arg + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Arg

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class Arg
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a kubernetes/docker command argument.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classArg.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Arg(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Args.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Args.Companion.html new file mode 100644 index 00000000..3a5f4626 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Args.Companion.html @@ -0,0 +1,464 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Args.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Args.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static Args.CompanionINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Args + ofWhiteSpaceSeparated(String value) + Creates an Args object from a whitespace separated string.
      final Args + of(List<String> values) +
      final Args + of(String values) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        ofWhiteSpaceSeparated

        +
         final Args ofWhiteSpaceSeparated(String value)
        +

        Creates an Args object from a whitespace separated string. Note that this wont work for arguments containing spaces/whites.

        + +
        + + +
        Parameters:
        + + +
        value - The whitespace separated string to create the Args object from.
        + + + + + +
        Returns:
        +

        The Args object.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        of

        +
         final Args of(String values)
        +
        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Args.html b/apidocs/javadoc/no/acntech/easycontainers/model/Args.html new file mode 100644 index 00000000..1cafbc86 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Args.html @@ -0,0 +1,483 @@ + + + + Args + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Args

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class Args
    +
    +                    
    +

    Value object representing a list of kubernetes/docker command arguments.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classArgs.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Args(List<Arg> args)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final List<Arg> + getArgs() +
      final List<String> + toStringList() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/CPU.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/CPU.Companion.html new file mode 100644 index 00000000..81ae52f2 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/CPU.Companion.html @@ -0,0 +1,423 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object CPU.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class CPU.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static CPU.CompanionINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final CPU + of(String value) +
      final CPU + of(Double value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/CPU.html b/apidocs/javadoc/no/acntech/easycontainers/model/CPU.html new file mode 100644 index 00000000..dca7e60c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/CPU.html @@ -0,0 +1,508 @@ + + + + CPU + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CPU

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class CPU
    + implements SimpleValueObject<Double>
    +                    
    +

    Value object representing a kubernetes/docker cpu request or limit.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classCPU.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      CPU(Double value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Double + getValue() +
      Double + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Container.State.html b/apidocs/javadoc/no/acntech/easycontainers/model/Container.State.html new file mode 100644 index 00000000..7f0bc584 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Container.State.html @@ -0,0 +1,528 @@ + + + + State + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum Container.State

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum Container.State
    +extends Enum<Container.State>
    +                    
    +

    Represents the state of a container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      UNINITIATED

      The container is in an uninitiated state.

      INITIALIZING

      The container is being initialized.

      RUNNING

      The container is running.

      FAILED

      The container has failed.

      TERMINATING

      The container is being terminated.

      UNKNOWN

      The container is in an unknown state.

      STOPPED

      The container has been gracefully or forcefully stopped.

      DELETED

      The container has been removed from the underlying container platform.

      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Container.State + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<Container.State> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final EnumEntries<Container.State> + getEntries() + Represents the state of a container.
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final Container.State valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<Container.State> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Container.html b/apidocs/javadoc/no/acntech/easycontainers/model/Container.html new file mode 100644 index 00000000..f932fa26 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Container.html @@ -0,0 +1,1693 @@ + + + + Container + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Container

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface Container
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getRuntime

        +
         abstract ContainerRuntime getRuntime()
        +

        Retrieves the (underlying) runtime of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getExecutionMode

        +
         abstract ExecutionMode getExecutionMode()
        +

        Retrieves the execution mode of the container.

        + +
        + + + + +
        Returns:
        +

        the execution mode of the container as an ExecutionMode enum value

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getName

        +
         abstract ContainerName getName()
        +

        Returns the name of the container.

        + +
        + + + + +
        Returns:
        +

        the name of the container as a ContainerName object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getNamespace

        +
         abstract Namespace getNamespace()
        +

        Returns the namespace of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getLabels

        +
         abstract Map<LabelKey, LabelValue> getLabels()
        +

        Retrieves the labels associated with the container.

        + +
        + + + + +
        Returns:
        +

        a map of LabelKey to LabelValue representing the labels

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getEnv

        +
         abstract Map<EnvVarKey, EnvVarValue> getEnv()
        +

        Retrieves the environment variables associated with the container.

        + +
        + + + + +
        Returns:
        +

        a map containing the environment variable keys and values

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getCommand

        +
         abstract Executable getCommand()
        +

        Retrieves the executable command for the container.

        <p> +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's +image for both Docker and kubernetes.
        + +
        + + + + +
        Returns:
        +

        the executable command as an Executable object, or null if no command is specified

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getArgs

        +
         abstract Args getArgs()
        +

        Retrieves the command arguments for the container.

        <p> +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's
        + +
        + + + + +
        Returns:
        +

        the command arguments as an instance of Args, or null if there are no arguments.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getImage

        +
         abstract ImageURL getImage()
        +

        Retrieves the image for the container.

        + +
        + + + + +
        Returns:
        +

        the URL of the image

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getExposedPorts

        +
         abstract List<NetworkPort> getExposedPorts()
        +

        Returns the list of network ports exposed by the container.

        + +
        + + + + +
        Returns:
        +

        the list of exposed network ports as a List of NetworkPort objects

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getMappedPort

        +
         abstract NetworkPort getMappedPort(NetworkPort port)
        +

        Returns the mapped port for the specified network port.

        + +
        + + +
        Parameters:
        + + +
        port - the network port for which to retrieve the mapped port
        + + + + + +
        Returns:
        +

        the mapped port as a NetworkPort object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getPortMappings

        +
         abstract Map<NetworkPort, NetworkPort> getPortMappings()
        +

        Retrieves the port mappings for the container.

        + +
        + + + + +
        Returns:
        +

        a map of NetworkPort to NetworkPort representing the port mappings.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        hasPortMapping

        +
         Boolean hasPortMapping(NetworkPort port)
        +

        Checks if the given network port has a mapping defined in the container's port mappings.

        + +
        + + +
        Parameters:
        + + +
        port - The network port to check
        + + + + + +
        Returns:
        +

        true if the port has a mapping, false otherwise

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isEphemeral

        +
         abstract Boolean isEphemeral()
        +

        Checks whether the container is ephemeral.

        + +
        + + + + +
        Returns:
        +

        true if the container is ephemeral, false otherwise

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getHost

        +
         abstract Host getHost()
        +

        Retrieves the host of the container.

        + +
        + + + + +
        Returns:
        +

        the host of the container as a Host object, or null if the host is not set

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getIpAddress

        +
         abstract InetAddress getIpAddress()
        +

        Retrieves the IP address of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getDuration

        +
         abstract Duration getDuration()
        +

        Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getExitCode

        +
         abstract Integer getExitCode()
        +

        Retrieves the exit code of the container.

        + +
        + + + + +
        Returns:
        +

        the exit code of the container, or null if the container is still running or has never been started.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        execute

        +
         abstract Pair<Integer, String> execute(Executable executable, Args args, Boolean useTty, UnixDir workingDir, InputStream input, OutputStream output, Long waitTimeValue, TimeUnit waitTimeUnit)
        +

        Executes a command in the container.

        <p> +Note that for Docker, std out and std err are combined in the std out result - hence the std error string is always empty.
        + +
        + + +
        Parameters:
        + + +
        executable - the command to execute
        + + + +
        args - the arguments to pass to the command
        + + + + + +
        workingDir - the working directory for the command
        + + + +
        input - the input stream to pass to the command
        + + + + + +
        waitTimeValue - the time to wait for the command to complete
        + + + +
        waitTimeUnit - the time unit for the wait time
        + + + + + +
        Returns:
        +

        a pair of the exit code and the std error output

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        putFile

        +
         abstract Long putFile(Path localFile, UnixDir remoteDir, String remoteFilename)
        +

        Uploads a file to the container.

        + +
        + + +
        Parameters:
        + + +
        localFile - the path of the file to upload -
        + + + +
        remoteDir - the path where the file will be uploaded in the container - if it doesn't exist, it will be attempted created
        + + + +
        remoteFilename - the name of the file in the container - if null, the file will be uploaded with the same name as the local file
        + + + + + +
        Returns:
        +

        the size of the file in bytes

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getFile

        +
         abstract Path getFile(UnixDir remoteDir, String remoteFilename, Path localPath)
        +

        Downloads a file from the container.

        + +
        + + +
        Parameters:
        + + +
        remoteDir - the path of the file to download
        + + + +
        remoteFilename - the name of the file in the container
        + + + +
        localPath - the path where the file will be downloaded to - if null, the file will be downloaded to the current directory, with the same name as the remote file, if not null, the file will be downloaded with the specified name unless the path is a directory, in which case the file will be downloaded to the directory with the same name as the remote file
        + + + + + +
        Returns:
        +

        the path of the downloaded file

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        putDirectory

        +
         abstract Long putDirectory(Path localDir, UnixDir remoteDir)
        +

        Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        localDir - the path of the directory to upload
        + + + +
        remoteDir - the path where the directory will be uploaded in the container
        + + + + + +
        Returns:
        +

        the size of the directory in bytes

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        putDirectory

        +
         Long putDirectory(String localDir, String remoteDir)
        +

        Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        localDir - the path of the directory to upload
        + + + +
        remoteDir - the path where the directory will be uploaded in the container
        + + + + + +
        Returns:
        +

        the size of the transferred directory in bytes

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getDirectory

        +
         abstract Pair<Path, List<Path>> getDirectory(UnixDir remoteDir, Path localDir)
        +

        Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        remoteDir - the path of the directory to download
        + + + +
        localDir - the path where the directory will be downloaded to, defaults to a temporary directory
        + + + + + +
        Returns:
        +

        a pair of the path of the downloaded directory and a list of the paths of the downloaded files

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getDirectory

        +
         Pair<Path, List<Path>> getDirectory(String remoteDir, String localDir)
        +

        Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

        + +
        + + +
        Parameters:
        + + +
        remoteDir - the path of the directory to download
        + + + +
        localDir - the path where the directory will be downloaded to, defaults to a temporary directory
        + + + + + +
        Returns:
        +

        a pair of the path of the downloaded directory and a list of the paths of the downloaded files

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getState

        +
         abstract Container.State getState()
        +

        Retrieves the state of the container.

        + +
        + + + + +
        Returns:
        +

        the state of the container as a ContainerState enum value

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        waitForState

        +
         abstract Boolean waitForState(Container.State state, Long timeout, TimeUnit unit)
        +

        Wait for the container to reach the specified state.

        + +
        + + +
        Parameters:
        + + +
        state - the expected state of the container
        + + + +
        timeout - the maximum time to wait for the container to reach the state, default is 0 which means indefinite wait
        + + + +
        unit - the time unit of the timeout, default is seconds
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        waitForCompletion

        +
         Boolean waitForCompletion(Long timeout, TimeUnit unit)
        +

        Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

        + +
        + + +
        Parameters:
        + + +
        timeout - the maximum time to wait for the container to stop, default is 0 which means indefinite wait
        + + + +
        unit - the time unit of the timeout, default is seconds
        + + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerBuilder.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerBuilder.html new file mode 100644 index 00000000..ef32218a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerBuilder.html @@ -0,0 +1,2485 @@ + + + + ContainerBuilder + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ContainerBuilder

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface ContainerBuilder<SELF extends ContainerBuilder<SELF>>
    +
    +                    
    +

    A builder interface for creating container configurations.

    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + +
        +
      • +

        withExecutionMode

        +
         abstract SELF withExecutionMode(ExecutionMode executionMode)
        +

        Sets the execution mode for the container.

        + +
        + + +
        Parameters:
        + + +
        executionMode - The execution mode to be set.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withName

        +
         abstract SELF withName(ContainerName name)
        +

        Returns a new instance of the container object with the specified name.

        + +
        + + +
        Parameters:
        + + +
        name - the name of the container
        + + + + + +
        Returns:
        +

        a new instance of the container object with the specified name

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withName

        +
         SELF withName(String name)
        +

        Sets the name of the container.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNamespace

        +
         abstract SELF withNamespace(Namespace namespace)
        +

        Sets the namespace for the ContainerBuilder.

        + +
        + + +
        Parameters:
        + + +
        namespace - The namespace to set.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNamespace

        +
         SELF withNamespace(String namespace)
        +

        Sets the namespace for the container.

        + +
        + + +
        Parameters:
        + + +
        namespace - The namespace to set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withLabel

        +
         abstract SELF withLabel(LabelKey key, LabelValue value)
        +

        Adds a label to the container with the given key and value.

        + +
        + + +
        Parameters:
        + + +
        key - the key of the label
        + + + +
        value - the value of the label
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withLabel

        +
         SELF withLabel(String key, String value)
        +

        Adds a label with the provided key-value pair to the container.

        + +
        + + +
        Parameters:
        + + +
        key - the label key
        + + + +
        value - the label value
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         SELF withEnv(String key, String value)
        +

        Adds an environment variable with the specified key and value.

        + +
        + + +
        Parameters:
        + + +
        key - The key of the environment variable.
        + + + +
        value - The value of the environment variable.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         abstract SELF withEnv(EnvVarKey key, EnvVarValue value)
        +

        Sets an environment variable with the given key and value.

        + +
        + + +
        Parameters:
        + + +
        key - The key of the environment variable.
        + + + +
        value - The value of the environment variable.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnv

        +
         abstract SELF withEnv(Map<EnvVarKey, EnvVarValue> env)
        +

        Sets the environment variables for the container.

        + +
        + + +
        Parameters:
        + + +
        env - a map containing the environment variable keys and values
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withEnvAsStringMap

        +
         SELF withEnvAsStringMap(Map<String, String> env)
        +

        Sets the environment variables of the container using a map of string key-value pairs.

        + +
        + + +
        Parameters:
        + + +
        env - the environment variables as a map of string key-value pairs
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCommand

        +
         abstract SELF withCommand(Executable command)
        +

        Sets the command for the container.

        + +
        + + +
        Parameters:
        + + +
        command - the executable command to be set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCommand

        +
         SELF withCommand(String command)
        +

        Sets the command for the container.

        + +
        + + +
        Parameters:
        + + +
        command - the command to be set for the container
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withArgs

        +
         abstract SELF withArgs(Args args)
        +

        Sets the command arguments for the container.

        + +
        + + +
        Parameters:
        + + +
        args - The command arguments to be set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withArgs

        +
         SELF withArgs(List<String> args)
        +

        Sets the arguments for the container.

        + +
        + + +
        Parameters:
        + + +
        args - the arguments as an instance of Args.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withImage

        +
         abstract SELF withImage(ImageURL image)
        +

        Set the image to use for the container.

        + +
        + + +
        Parameters:
        + + +
        image - The image to use for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withImage

        +
         SELF withImage(String image)
        +

        Sets the image for the container using the given image URL.

        + +
        + + +
        Parameters:
        + + +
        image - the image URL to set for the container
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withExposedPort

        +
         abstract SELF withExposedPort(PortMappingName name, NetworkPort port)
        +

        Adds an exposed port to the container configuration.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the port mapping.
        + + + +
        port - The network port to expose.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withExposedPort

        +
         SELF withExposedPort(String name, Integer port)
        +

        Sets the exposed port for the container by specifying the name and port number.

        + +
        + + +
        Parameters:
        + + +
        name - the name of the port mapping
        + + + +
        port - the port number to expose
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withPortMapping

        +
         abstract SELF withPortMapping(NetworkPort port, NetworkPort mappedPort)
        +

        Maps a container exposed network port to another network port.

        + +
        + + +
        Parameters:
        + + +
        port - The network port to be mapped.
        + + + +
        mappedPort - The mapped network port.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withPortMapping

        +
         SELF withPortMapping(Integer port, Integer mappedPort)
        +

        Sets the port mapping for the container.

        + +
        + + +
        Parameters:
        + + +
        port - The port of the container.
        + + + +
        mappedPort - The mapped port for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNetworkName

        +
         abstract SELF withNetworkName(NetworkName networkName)
        +

        Sets the network name for the container.

        + +
        + + +
        Parameters:
        + + +
        networkName - the network name to set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withNetworkName

        +
         SELF withNetworkName(String networkName)
        +

        Sets the network name for the container.

        + +
        + + +
        Parameters:
        + + +
        networkName - the name of the network to be set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuRequest

        +
         abstract SELF withCpuRequest(CPU cpuRequest)
        +

        Sets the CPU request for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuRequest - The CPU request for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuRequest

        +
         SELF withCpuRequest(Double cpuRequest)
        +

        Sets the CPU request for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuRequest - the CPU request for the container
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuRequest

        +
         SELF withCpuRequest(String cpuRequest)
        +

        Sets the CPU request for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuRequest - the CPU request for the container
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuLimit

        +
         abstract SELF withCpuLimit(CPU cpuLimit)
        +

        Sets the CPU limit for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuLimit - The CPU limit to be set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuLimit

        +
         SELF withCpuLimit(Double cpuLimit)
        +

        Sets the CPU limit for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuLimit - The CPU limit as a CPU object.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCpuLimit

        +
         SELF withCpuLimit(String cpuLimit)
        +

        Sets the CPU limit for the container.

        + +
        + + +
        Parameters:
        + + +
        cpuLimit - The CPU limit to set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withMemoryRequest

        +
         SELF withMemoryRequest(String memoryRequest)
        +

        Performs the task with the given memory request.

        + +
        + + +
        Parameters:
        + + +
        memoryRequest - The memory request to be used.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMemoryRequest

        +
         SELF withMemoryRequest(BigInteger memoryRequest)
        +

        Sets the memory request for the container.

        + +
        + + +
        Parameters:
        + + +
        memoryRequest - the memory request to be set
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMemoryLimit

        +
         abstract SELF withMemoryLimit(Memory memoryLimit)
        +

        Sets the memory limit for the container.

        + +
        + + +
        Parameters:
        + + +
        memoryLimit - The memory limit to set for the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMemoryLimit

        +
         SELF withMemoryLimit(String memoryLimit)
        +

        Sets the memory limit for the current operation.

        + +
        + + +
        Parameters:
        + + +
        memoryLimit - the memory limit to be set.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMemoryLimit

        +
         SELF withMemoryLimit(BigInteger memoryLimit)
        +

        Sets the memory limit for the container in bytes.

        + +
        + + +
        Parameters:
        + + +
        memoryLimit - The memory limit for the container as a BigInteger.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMemoryLimit

        +
         SELF withMemoryLimit(Long memoryLimit)
        +

        Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

        + +
        + + +
        Parameters:
        + + +
        memoryLimit - The memory limit for the container as a long.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withIsEphemeral

        +
         abstract SELF withIsEphemeral(Boolean ephemeral)
        +

        Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

        + +
        + + +
        Parameters:
        + + +
        ephemeral - The ephemeral flag to be set.
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        withOutputLineCallback

        +
         abstract SELF withOutputLineCallback(OutputLineCallback outputLineCallback)
        +

        Sets the line callback for logging purposes.

        + +
        + + +
        Parameters:
        + + +
        outputLineCallback - The line callback to be used for logging.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withContainerFile

        +
         SELF withContainerFile(ContainerFileName name, UnixDir path, Map<String, String> data, String keyValSeparator)
        +

        Adds a container file to the builder.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the file in the container
        + + + +
        path - The path in the container where the file will be mounted.
        + + + +
        data - The content of the file as a key-value map
        + + + +
        keyValSeparator - The separator between the key and value in the content of the file (default is ": ")
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + + + + + + +
        +
      • +

        withContainerFile

        +
         SELF withContainerFile(ContainerFileName name, UnixDir path, String content)
        +

        Adds a file to the container with the specified name, path, and content.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the file in the container
        + + + +
        path - The path in the container where the file will be mounted.
        + + + +
        content - The content of the file
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        withVolume

        +
         SELF withVolume(VolumeName name, UnixDir mountPath)
        +

        Sets the volume name and mount path for the current instance of the object.

        + +
        + + +
        Parameters:
        + + +
        name - The name of the volume to be set.
        + + + +
        mountPath - The mount path to be set as the mount point for the volume.
        + + + + + +
        Returns:
        +

        An instance of the object with the volume name and mount path set.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withVolume

        +
         abstract SELF withVolume(Volume volume)
        +

        Sets the volume for the container.

        + +
        + + +
        Parameters:
        + + +
        volume - The volume to be added or mapped into the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMaxLifeTime

        +
         abstract SELF withMaxLifeTime(Duration maxLifeTime)
        +

        Sets the maximum lifetime for the container.

        + +
        + + +
        Parameters:
        + + +
        maxLifeTime - The maximum lifetime of the container.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMaxLifeTime

        +
         SELF withMaxLifeTime(Long value, ChronoUnit unit)
        +

        Sets the maximum lifetime for the container.

        + +
        + + +
        Parameters:
        + + +
        value - The value of the maximum lifetime.
        + + + +
        unit - The unit of time for the maximum lifetime.
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withMaxLifeTime

        +
         SELF withMaxLifeTime(Long value, TimeUnit unit)
        +

        Sets the maximum life time for the object.

        + +
        + + +
        Parameters:
        + + +
        value - the value of the maximum lifetime
        + + + +
        unit - the time unit of the maximum lifetime
        + + + + + +
        Returns:
        +

        this object with the maximum lifetime set

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        withCustomProperty

        +
         abstract SELF withCustomProperty(String key, Object value)
        +

        Adds a custom property to the container.

        + +
        + + +
        Parameters:
        + + +
        key - the key of the custom property
        + + + +
        value - the value of the custom property
        + + + + + +
        Returns:
        +

        The updated ContainerBuilder instance.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        build

        +
         abstract Container build()
        +

        This method is used to build a Container object.

        + +
        + + + + +
        Returns:
        +

        A Container object after building it.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFile.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFile.html new file mode 100644 index 00000000..b6a573c6 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFile.html @@ -0,0 +1,546 @@ + + + + ContainerFile + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ContainerFile

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class ContainerFile
    +
    +                    
    +

    Value object representing a file to be added or mapped into a container.

    <ul> +<li>For Docker this becomes a <i>bind mount</i>, and if hostFile is set, the file will be mounted from the host, otherwise +a temporary file will be as the source for the bind mount. Either way the file will be populated with 'content' if set</li><li>Note that a in Docker a bind mount is a synchronization mechanism between the host and the container, and any changes to +the file made by any of the parties will be reflected in the other party.</li><li>For Kubernetes an object of this class becomes a <i>ConfigMap</i> and the 'content' parameter will be used to populate the +contents of the key mapped to a file. Note that Kubernetes implementation will use the individual mount file approach +hence avoiding obscuring an existing directory in the container's file system. </li> +</ul>
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ContainerFileName + getName() +
      final UnixDir + getMountPath() +
      final String + getContent() +
      final Path + getHostFile() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ContainerFile

        +
        ContainerFile(ContainerFileName name, UnixDir mountPath, String content, Path hostFile)
        +
        + +
        +
        Parameters:
        + + +
        name - The name of the file in the container.
        + + + +
        mountPath - The path in the container where the file will be mounted.
        + + + +
        content - Optional content - valid for both Docker and Kubernetes - if set, the mounted file will be populated with this content.
        + + + +
        hostFile - Only valid for Docker - if not set a temporary file will be created and used as the source for the bind mount.
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.Companion.html new file mode 100644 index 00000000..590c7b4a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ContainerFileName.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ContainerFileName + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.html new file mode 100644 index 00000000..9513e04a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerFileName.html @@ -0,0 +1,502 @@ + + + + ContainerFileName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ContainerFileName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class ContainerFileName
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a file name for a file to be added or mapped into a container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ContainerFileName

        +
        ContainerFileName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.Companion.html new file mode 100644 index 00000000..889d82ea --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ContainerName.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ContainerName.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ContainerName + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.html new file mode 100644 index 00000000..798f537b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerName.html @@ -0,0 +1,502 @@ + + + + ContainerName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ContainerName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class ContainerName
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing the common rules for Docker and Kubernetes container names. Note that both container platforms have specific rules beyond these common rules.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classContainerName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ContainerName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ContainerName

        +
        ContainerName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerPlatformType.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerPlatformType.html new file mode 100644 index 00000000..b8097063 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerPlatformType.html @@ -0,0 +1,492 @@ + + + + ContainerPlatformType + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ContainerPlatformType

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum ContainerPlatformType
    +extends Enum<ContainerPlatformType>
    +                    
    +

    Enum class representing the container types supported by the library.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      DOCKER
      KUBERNETES
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ContainerPlatformType + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<ContainerPlatformType> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final EnumEntries<ContainerPlatformType> + getEntries() + Enum class representing the container types supported by the library.
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final ContainerPlatformType valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<ContainerPlatformType> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ContainerRuntime.html b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerRuntime.html new file mode 100644 index 00000000..146c414d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ContainerRuntime.html @@ -0,0 +1,585 @@ + + + + ContainerRuntime + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ContainerRuntime

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface ContainerRuntime
    +
    +                    
    +

    Interface representing the runtime of a container - either Docker or Kubernetes.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      abstract ContainerPlatformType + getType() + Retrieves the type of the container platform.
      abstract Container + getContainer() + Retrieves the container associated with the runtime.
      abstract Unit + start() + Starts the execution of the container.
      abstract Unit + stop() + Stops the container runtime.
      Unit + kill() + Kills the container by calling the stop() method.
      abstract Unit + delete(Boolean force) + Deletes the container with an optional force flag.
      abstract ContainerName + getName() + Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getType

        +
         abstract ContainerPlatformType getType()
        +

        Retrieves the type of the container platform.

        + +
        + + + + +
        Returns:
        +

        the type of the container platform as a ContainerPlatformType enum value

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getContainer

        +
         abstract Container getContainer()
        +

        Retrieves the container associated with the runtime.

        + +
        + + + + +
        Returns:
        +

        the container as a Container object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        start

        +
         abstract Unit start()
        +

        Starts the execution of the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        stop

        +
         abstract Unit stop()
        +

        Stops the container runtime.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        kill

        +
         Unit kill()
        +

        Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        delete

        +
         abstract Unit delete(Boolean force)
        +

        Deletes the container with an optional force flag.

        + +
        + + +
        Parameters:
        + + +
        force - if true, force the deletion of the container (default is false)
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getName

        +
         abstract ContainerName getName()
        +

        Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.Companion.html new file mode 100644 index 00000000..c31a0db4 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object EnvVarKey.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class EnvVarKey.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final EnvVarKey + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.html b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.html new file mode 100644 index 00000000..aae4e87d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarKey.html @@ -0,0 +1,502 @@ + + + + EnvVarKey + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class EnvVarKey

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class EnvVarKey
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing an environment variable key.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classEnvVarKey.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      EnvVarKey(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        EnvVarKey

        +
        EnvVarKey(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.Companion.html new file mode 100644 index 00000000..0a9a6a46 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object EnvVarValue.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class EnvVarValue.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final EnvVarValue + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.html b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.html new file mode 100644 index 00000000..337c07dc --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/EnvVarValue.html @@ -0,0 +1,502 @@ + + + + EnvVarValue + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class EnvVarValue

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class EnvVarValue
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing an environment variable value.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classEnvVarValue.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      EnvVarValue(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        EnvVarValue

        +
        EnvVarValue(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Executable.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Executable.Companion.html new file mode 100644 index 00000000..ecab66d1 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Executable.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Executable.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Executable.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Executable + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Executable.html b/apidocs/javadoc/no/acntech/easycontainers/model/Executable.html new file mode 100644 index 00000000..fd9b6296 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Executable.html @@ -0,0 +1,502 @@ + + + + Executable + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Executable

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class Executable
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing an executable, i.e. a command line with optional arguments.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classExecutable.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Executable(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        Executable

        +
        Executable(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ExecutionMode.html b/apidocs/javadoc/no/acntech/easycontainers/model/ExecutionMode.html new file mode 100644 index 00000000..d5db5170 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ExecutionMode.html @@ -0,0 +1,492 @@ + + + + ExecutionMode + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ExecutionMode

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum ExecutionMode
    +extends Enum<ExecutionMode>
    +                    
    +

    Enum class representing the execution mode of the container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      SERVICE

      Service mode - continuous execution

      TASK

      Task mode - single execution with an exit value

      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ExecutionMode + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<ExecutionMode> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final EnumEntries<ExecutionMode> + getEntries() + Enum class representing the execution mode of the container.
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final ExecutionMode valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<ExecutionMode> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Host.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Host.Companion.html new file mode 100644 index 00000000..1915af3c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Host.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Host.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Host.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static Host.CompanionINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Host + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Host.html b/apidocs/javadoc/no/acntech/easycontainers/model/Host.html new file mode 100644 index 00000000..efa0ae13 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Host.html @@ -0,0 +1,514 @@ + + + + Host + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Host

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class Host
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a host.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classHost.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Host(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.Companion.html new file mode 100644 index 00000000..63a2f492 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.Companion.html @@ -0,0 +1,429 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ImageName.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ImageName.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ImageName + of(String value) +
      final ImageName + getDEFAULT() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.html new file mode 100644 index 00000000..58140473 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageName.html @@ -0,0 +1,502 @@ + + + + ImageName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ImageName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class ImageName
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a Docker (registry) image name.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classImageName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ImageName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ImageName

        +
        ImageName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.Companion.html new file mode 100644 index 00000000..f30ec5c7 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.Companion.html @@ -0,0 +1,429 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ImageTag.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ImageTag.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ImageTag + of(String value) +
      final ImageTag + getLATEST() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.html new file mode 100644 index 00000000..1abc6156 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageTag.html @@ -0,0 +1,502 @@ + + + + ImageTag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ImageTag

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class ImageTag
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a Docker image tag.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classImageTag.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ImageTag(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.Companion.html new file mode 100644 index 00000000..45932a95 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.Companion.html @@ -0,0 +1,423 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object ImageURL.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class ImageURL.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final ImageURL + of(String registryUrl, String repositoryName, String imageName, String tag) +
      final ImageURL + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.html b/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.html new file mode 100644 index 00000000..a726df51 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/ImageURL.html @@ -0,0 +1,597 @@ + + + + ImageURL + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ImageURL

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class ImageURL
    +
    +                    
    +

    Represents a Docker image URL consisting of a registry URL, repository name, image name, and tag.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classImageURL.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final RegistryURL + getRegistryUrl() + The registry URL of the image.
      final RepositoryName + getRepositoryName() + The repository name of the image.
      final ImageName + getImageName() + The image name.
      final ImageTag + getTag() + The image tag.
      final String + toFQDN() + Returns the Fully Qualified Domain Name (FQDN) of the image URL.
      String + toString() + Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN).
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + + + + + + + + + + + +
        +
      • +

        getTag

        +
         final ImageTag getTag()
        +

        The image tag. Default is ImageTag.LATEST.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        toFQDN

        +
         final String toFQDN()
        +

        Returns the Fully Qualified Domain Name (FQDN) of the image URL. The FQDN is constructed by concatenating the registry URL, repository name, image name, and tag.

        + +
        + + + + +
        Returns:
        +

        the Fully Qualified Domain Name (FQDN) of the image URL

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        toString

        +
         String toString()
        +

        Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN). The FQDN is constructed by concatenating the registry URL, repository name, image name, and image tag, separated by forward slashes

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.Companion.html new file mode 100644 index 00000000..ab7df16b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object LabelKey.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class LabelKey.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final LabelKey + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.html b/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.html new file mode 100644 index 00000000..750d572c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/LabelKey.html @@ -0,0 +1,502 @@ + + + + LabelKey + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LabelKey

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class LabelKey
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a docker/kubernetes label key.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classLabelKey.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      LabelKey(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.Companion.html new file mode 100644 index 00000000..5c8737e1 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object LabelValue.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class LabelValue.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final LabelValue + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.html b/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.html new file mode 100644 index 00000000..5d9db37e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/LabelValue.html @@ -0,0 +1,502 @@ + + + + LabelValue + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LabelValue

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class LabelValue
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a docker/kubernetes label value.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classLabelValue.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      LabelValue(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        LabelValue

        +
        LabelValue(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Memory.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Memory.Companion.html new file mode 100644 index 00000000..72b0ca48 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Memory.Companion.html @@ -0,0 +1,645 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Memory.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Memory.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Memory.html b/apidocs/javadoc/no/acntech/easycontainers/model/Memory.html new file mode 100644 index 00000000..48874718 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Memory.html @@ -0,0 +1,719 @@ + + + + Memory + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Memory

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class Memory
    + implements SimpleValueObject<BigInteger>
    +                    
    +

    Value object representing kubernetes/docker memory.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classMemory.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Memory(BigInteger bytes)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.Companion.html new file mode 100644 index 00000000..35eecc67 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.Companion.html @@ -0,0 +1,466 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Namespace.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Namespace.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Namespace + of(String value) +
      final Namespace + getDEFAULT() +
      final Namespace + getTEST() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.html b/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.html new file mode 100644 index 00000000..9ca85062 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Namespace.html @@ -0,0 +1,471 @@ + + + + Namespace + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Namespace

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class Namespace
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a kubernetes namespace.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classNamespace.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Namespace(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        Namespace

        +
        Namespace(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.Companion.html new file mode 100644 index 00000000..8210bea2 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object NetworkName.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class NetworkName.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final NetworkName + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.html b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.html new file mode 100644 index 00000000..67e8fd98 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkName.html @@ -0,0 +1,502 @@ + + + + NetworkName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class NetworkName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class NetworkName
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a Docker image tag.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classNetworkName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      NetworkName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NetworkName

        +
        NetworkName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.Companion.html new file mode 100644 index 00000000..f315088d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.Companion.html @@ -0,0 +1,534 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object NetworkPort.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class NetworkPort.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.html b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.html new file mode 100644 index 00000000..20ba39e3 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/NetworkPort.html @@ -0,0 +1,502 @@ + + + + NetworkPort + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class NetworkPort

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class NetworkPort
    + implements SimpleValueObject<Int>
    +                    
    +

    Value object representing a network port - range 1-65535.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classNetworkPort.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      NetworkPort(Integer value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Integer + getValue() +
      Integer + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.Companion.html new file mode 100644 index 00000000..4a13cd36 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.Companion.html @@ -0,0 +1,540 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object PortMappingName.Companion

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.html b/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.html new file mode 100644 index 00000000..a80b680f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/PortMappingName.html @@ -0,0 +1,502 @@ + + + + PortMappingName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class PortMappingName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class PortMappingName
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a port mapping name

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classPortMappingName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      PortMappingName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        PortMappingName

        +
        PortMappingName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.Companion.html new file mode 100644 index 00000000..a78a5096 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.Companion.html @@ -0,0 +1,503 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object RegistryURL.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class RegistryURL.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.html b/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.html new file mode 100644 index 00000000..69c88dc4 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/RegistryURL.html @@ -0,0 +1,511 @@ + + + + RegistryURL + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RegistryURL

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class RegistryURL
    + implements SimpleValueObject<String>
    +                    
    +

    Represents a URL of a registry.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classRegistryURL.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      RegistryURL(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        RegistryURL

        +
        RegistryURL(String value)
        +
        + +
        +
        Parameters:
        + + +
        value - the value of the registry URL
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.Companion.html new file mode 100644 index 00000000..67f92638 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.Companion.html @@ -0,0 +1,466 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object RepositoryName.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final RepositoryName + of(String value) +
      final RepositoryName + getDEFAULT() +
      final RepositoryName + getTEST() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.html b/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.html new file mode 100644 index 00000000..0b18f585 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/RepositoryName.html @@ -0,0 +1,503 @@ + + + + RepositoryName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RepositoryName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class RepositoryName
    + implements SimpleValueObject<String>
    +                    
    +

    Represents a repository name in a software repository system.

    A repository name is a value object that holds a single value of type String. It is used to identify a specific repository within a registry. The repository name must adhere to certain rules:

    • It must consist of lowercase alphanumeric characters, and may contain hyphens, underscores, and periods.

    • It must have a minimum length of 2 and a maximum length of 255 characters.

    Example Usage:

    val repoName = RepositoryName.of("myrepo")
    +val defaultName = RepositoryName.DEFAULT
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classRepositoryName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      RepositoryName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        RepositoryName

        +
        RepositoryName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.Companion.html new file mode 100644 index 00000000..97285741 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object SemanticVersion.Companion

+
+
+ +
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final SemanticVersion + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.html b/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.html new file mode 100644 index 00000000..70e1e21f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/SemanticVersion.html @@ -0,0 +1,502 @@ + + + + SemanticVersion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SemanticVersion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class SemanticVersion
    + implements SimpleValueObject<String>
    +                    
    +

    Value object representing a file name for a file to be added or mapped into a container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classSemanticVersion.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      SemanticVersion(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SemanticVersion

        +
        SemanticVersion(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.Companion.html new file mode 100644 index 00000000..ed94b42d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.Companion.html @@ -0,0 +1,577 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object UnixDir.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class UnixDir.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final UnixDir + of(String value) +
      final UnixDir + getROOT() +
      final UnixDir + getETC() +
      final UnixDir + getHOME() +
      final UnixDir + getTMP() +
      final UnixDir + getMNT() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.html b/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.html new file mode 100644 index 00000000..ed0147aa --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/UnixDir.html @@ -0,0 +1,511 @@ + + + + UnixDir + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UnixDir

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class UnixDir
    + implements SimpleValueObject<String>
    +                    
    +

    Represents a complete (starting with root '/') Unix directory path as a value object.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classUnixDir.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      UnixDir(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() +
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        UnixDir

        +
        UnixDir(String value)
        +
        + +
        +
        Parameters:
        + + +
        value - The underlying String value representing the directory path.
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.Companion.html new file mode 100644 index 00000000..86353582 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object Verbosity.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class Verbosity.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Verbosity + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.html b/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.html new file mode 100644 index 00000000..81b3c075 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Verbosity.html @@ -0,0 +1,566 @@ + + + + Verbosity + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum Verbosity

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + , + + + kotlin.Comparable + + +
    +
    + +
    +
    +
    +public enum Verbosity
    +extends Enum<Verbosity>
    +                    
    +

    Enum class representing different levels of verbosity.

    Each verbosity level has a corresponding string value. The levels are: PANIC, FATAL, ERROR, WARN, INFO, DEBUG, TRACE.

    Usage: To get the verbosity level from a string value, use of(value: String) function.

    Example: val level = Verbosity.of("info")

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classVerbosity.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      PANIC
      FATAL
      ERROR
      WARN
      INFO
      DEBUG
      TRACE
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Verbosity + valueOf(String value) + Returns the enum constant of this type with the specified name.
      final Array<Verbosity> + values() + Returns an array containing the constants of this enum type, in the order they're declared.
      final String + getValue() +
      final EnumEntries<Verbosity> + getEntries() + Enum class representing different levels of verbosity.
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Enum

        + getName, getOrdinal
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        valueOf

        +
         final Verbosity valueOf(String value)
        +

        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        values

        +
         final Array<Verbosity> values()
        +

        Returns an array containing the constants of this enum type, in the order they're declared.

        This method may be used to iterate over the constants.

        + +
        + + + + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getEntries

        +
         final EnumEntries<Verbosity> getEntries()
        +

        Enum class representing different levels of verbosity.

        Each verbosity level has a corresponding string value. The levels are: PANIC, FATAL, ERROR, WARN, INFO, DEBUG, TRACE.

        Usage: To get the verbosity level from a string value, use of(value: String) function.

        Example: val level = Verbosity.of("info")

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/Volume.html b/apidocs/javadoc/no/acntech/easycontainers/model/Volume.html new file mode 100644 index 00000000..b018f8b8 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/Volume.html @@ -0,0 +1,602 @@ + + + + Volume + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Volume

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class Volume
    +
    +                    
    +

    Value object representing a volume to be added or mapped into a container.

    <ul> +<li>For Docker, if the VolumeName exists as a Docker named volume, it will be used, and the hostDir will be ignored</li><li>For Kubernetes the VolumeName must <i>either<</i> refer to a corresponding PersistentVolume +- see <a href="https://kubernetes.io/docs/concepts/storage/volumes/">PersistentVolume</a>, <i>or</i> +memoryBacked must be true. In case of a PersistentVolume, the PersistentVolumeClaimName will be created and used irrespective +of the existence of the PersistentVolume - and will hence fail if no PersistentVolume exist.</li> +</ul>
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        Volume

        +
        Volume(String name, String mountPath)
        +
        + +
      • +
      + + +
        +
      • +

        Volume

        +
        Volume(VolumeName name, UnixDir mountDir, Path hostDir, Boolean memoryBacked, Memory memory)
        +
        + +
        +
        Parameters:
        + + +
        name - The name of the volume
        + + + +
        mountDir - The path in the container where the volume will be mounted
        + + + +
        hostDir - Only valid for Docker - if set, the volume will be mounted from the host
        + + + +
        memoryBacked - Valid for Docker and Kubernetes - if true, the volume will be memory backed using tmpfs for Docker and emptyDir with medium 'Memory' for Kubernetes
        + + + +
        memory - Valid for Docker and Kubernetes - if memoryBacked is true, this parameter will be used as the size limit for the memory backed volume
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.Companion.html b/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.Companion.html new file mode 100644 index 00000000..32482b17 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.Companion.html @@ -0,0 +1,392 @@ + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object VolumeName.Companion

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class VolumeName.Companion
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final VolumeName + of(String value) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.html b/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.html new file mode 100644 index 00000000..88abe4ee --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/VolumeName.html @@ -0,0 +1,502 @@ + + + + VolumeName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class VolumeName

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.SimpleValueObject + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +@JvmInline() 
    +public final class VolumeName
    + implements SimpleValueObject<String>
    +                    
    +

    Represents a volume name.

    A volume name is a string value object that holds the name of a volume to be added or mapped into a container.

    The volume name must comply with the following rules:

    • The length of the name must be between 1 and 63 characters, inclusive.

    • The name can only contain alphanumeric characters, underscores (_), and hyphens (-).

    The volume name is validated upon construction using the StringValueObjectValidator class.

    The VolumeName class provides the following functionality:

    • Construction of a VolumeName object using the companion object's of function.

    • Unwrapping the volume name value using the unwrap function.

    • Converting the volume name to a string representation using the toString function.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      public classVolumeName.Companion +
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      VolumeName(String value)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final String + getValue() + The underlying string value of the volume name.
      String + unwrap() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class no.acntech.easycontainers.model.base.SimpleValueObject

        + compareTo
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        VolumeName

        +
        VolumeName(String value)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/base/SimpleValueObject.html b/apidocs/javadoc/no/acntech/easycontainers/model/base/SimpleValueObject.html new file mode 100644 index 00000000..5937fbfb --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/base/SimpleValueObject.html @@ -0,0 +1,425 @@ + + + + SimpleValueObject + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface SimpleValueObject

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + kotlin.Comparable + + , + + + no.acntech.easycontainers.model.base.ValueObject + + +
    +
    + +
    +
    +
    +public interface SimpleValueObject<P extends Comparable<P>>
    + implements ValueObject, Comparable<SimpleValueObject<P>>
    +                    
    +

    A DDD ValueObject holding a single value. The unwrap method can e.g. assist in mapping the SimpleValueObject to a DTO or to a repository object.

    The SimpleValueObject would normally restrict the underlying value using domain specific rules - e.g. applying range restrictions (for numbers), non-null, non-blank and length restrictions for Strings, etc.

    A SimpleValueObject is usually constructed using a single-argument constructor or (even better) with a static <code>of(P p)</code> method - or both.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      abstract P + unwrap() +
      Integer + compareTo(SimpleValueObject<P> other) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+ +
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/base/ValueObject.html b/apidocs/javadoc/no/acntech/easycontainers/model/base/ValueObject.html new file mode 100644 index 00000000..a6837969 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/base/ValueObject.html @@ -0,0 +1,360 @@ + + + + ValueObject + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ValueObject

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface ValueObject
    +
    +                    
    +

    Marker interface for DDD Value Objects (domain primitives) - see e.g. https://en.wikipedia.org/wiki/Value_object. A ValueObject <i>must</i> be final, pre-validated (before or during construction) and immutable.

    <p> +Some articles with more in-depth explanation of value objects and their importance in software design:<br> +<ul> +<li>https://freecontent.manning.com/domain-primitives-what-they-are-and-how-you-can-use-them-to-make-more-secure-software/</li> +<li>https://medium.com/@edin.sahbaz/the-pitfalls-of-primitive-obsession-an-insight-into-code-quality-using-net-c-b1898bcffb4d</li> +</ul>
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + +
      Modifier and TypeMethodDescription
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/base/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/model/base/package-summary.html new file mode 100644 index 00000000..3fc35970 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/base/package-summary.html @@ -0,0 +1,186 @@ + + + + Package no.acntech.easycontainers.model.base + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.model.base

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    SimpleValueObjectA DDD ValueObject holding a single value.
    ValueObjectMarker interface for DDD Value Objects (domain primitives) - see e.g.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/model/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/model/package-summary.html new file mode 100644 index 00000000..43022d53 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/model/package-summary.html @@ -0,0 +1,364 @@ + + + + Package no.acntech.easycontainers.model + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.model

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    Companion
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ArgValue object representing a kubernetes/docker command argument.
    ArgsValue object representing a list of kubernetes/docker command arguments.
    CPUValue object representing a kubernetes/docker cpu request or limit.
    ContainerFileValue object representing a file to be added or mapped into a container.
    ContainerFileNameValue object representing a file name for a file to be added or mapped into a container.
    ContainerNameValue object representing the common rules for Docker and Kubernetes container names.
    EnvVarKeyValue object representing an environment variable key.
    EnvVarValueValue object representing an environment variable value.
    ExecutableValue object representing an executable, i.e.
    HostValue object representing a host.
    ImageNameValue object representing a Docker (registry) image name.
    ImageTagValue object representing a Docker image tag.
    ImageURLRepresents a Docker image URL consisting of a registry URL, repository name, image name, and tag.
    LabelKeyValue object representing a docker/kubernetes label key.
    LabelValueValue object representing a docker/kubernetes label value.
    MemoryValue object representing kubernetes/docker memory.
    NamespaceValue object representing a kubernetes namespace.
    NetworkNameValue object representing a Docker image tag.
    NetworkPortValue object representing a network port - range 1-65535.
    PortMappingNameValue object representing a port mapping name
    RegistryURLRepresents a URL of a registry.
    RepositoryNameRepresents a repository name in a software repository system.
    SemanticVersionValue object representing a file name for a file to be added or mapped into a container.
    UnixDirRepresents a complete (starting with root '/') Unix directory path as a value object.
    VolumeValue object representing a volume to be added or mapped into a container.
    VolumeNameRepresents a volume name.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    StateRepresents the state of a container.
    ContainerPlatformTypeEnum class representing the container types supported by the library.
    ExecutionModeEnum class representing the execution mode of the container.
    VerbosityEnum class representing different levels of verbosity.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Container
    ContainerBuilderA builder interface for creating container configurations.
    ContainerRuntimeInterface representing the runtime of a container - either Docker or Kubernetes.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/output/LineReader.html b/apidocs/javadoc/no/acntech/easycontainers/output/LineReader.html new file mode 100644 index 00000000..a06131f4 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/output/LineReader.html @@ -0,0 +1,433 @@ + + + + LineReader + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LineReader

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class LineReader
    +
    +                    
    +

    The LineReader class is responsible for reading lines from an input stream and invoking an OutputLineCallback for each line of output. Ideally, it should be used in a separate thread to avoid blocking the main thread.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Unit + read() + Reads lines from an input stream and invokes a callback function for each line of output.
      final Unit + stop() + Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    + +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        read

        +
         final Unit read()
        +

        Reads lines from an input stream and invokes a callback function for each line of output. If the stream is exhausted, the thread is interrupted, or its explicitly stopped by calling stop on the reader, the reading process will stop.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        stop

        +
         final Unit stop()
        +

        Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream.

        + +
        + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/output/OutputLineCallback.html b/apidocs/javadoc/no/acntech/easycontainers/output/OutputLineCallback.html new file mode 100644 index 00000000..abca704e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/output/OutputLineCallback.html @@ -0,0 +1,393 @@ + + + + OutputLineCallback + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface OutputLineCallback

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface OutputLineCallback
    +
    +                    
    +

    Functional interface for handling output from a container.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      abstract Unit + onLine(String line) + Callback for each line of output, new line character(s) are not included.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        onLine

        +
         abstract Unit onLine(String line)
        +

        Callback for each line of output, new line character(s) are not included.

        + +
        + + +
        Parameters:
        + + +
        line - the line of output (excluding new line character(s)) or null if end of stream
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/output/Slf4JOutputLineCallback.html b/apidocs/javadoc/no/acntech/easycontainers/output/Slf4JOutputLineCallback.html new file mode 100644 index 00000000..0dd322c1 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/output/Slf4JOutputLineCallback.html @@ -0,0 +1,433 @@ + + + + Slf4JOutputLineCallback + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Slf4JOutputLineCallback

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.output.OutputLineCallback + + +
    +
    + +
    +
    +
    +public final class Slf4JOutputLineCallback
    + implements OutputLineCallback
    +                    
    +

    OutputLineCallback implementation that logs output lines to a SLF4J logger.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Slf4JOutputLineCallback(Logger logger, Level level, Marker marker, String prefix)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Unit + onLine(String line) + Callback for each line of output, new line character(s) are not included.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        Slf4JOutputLineCallback

        +
        Slf4JOutputLineCallback(Logger logger, Level level, Marker marker, String prefix)
        +
        + +
        +
        Parameters:
        + + +
        logger - the SLF4J logger to use
        + + + +
        level - the log level to use
        + + + +
        marker - the marker to use
        + + + +
        prefix - the prefix to use for each log line
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        onLine

        +
         Unit onLine(String line)
        +

        Callback for each line of output, new line character(s) are not included.

        + +
        + + +
        Parameters:
        + + +
        line - the line of output (excluding new line character(s)) or null if end of stream
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/output/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/output/package-summary.html new file mode 100644 index 00000000..b0e9ba9a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/output/package-summary.html @@ -0,0 +1,210 @@ + + + + Package no.acntech.easycontainers.output + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.output

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    LineReaderThe LineReader class is responsible for reading lines from an input stream and invoking an OutputLineCallback for each line of output.
    Slf4JOutputLineCallbackOutputLineCallback implementation that logs output lines to a SLF4J logger.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    OutputLineCallbackFunctional interface for handling output from a container.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/package-summary.html new file mode 100644 index 00000000..df35a261 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/package-summary.html @@ -0,0 +1,274 @@ + + + + Package no.acntech.easycontainers + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    Companion
    Environment
    Companion
    Companion
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AbstractContainerRuntimeAbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime.
    BaseContainerBuilderAbstract base class for container builders.
    ContainerExceptionContainerException is a subclass of RuntimeException that is used to represent exceptions that occur in the context of container operations.
    GenericContainerBuilder
    GenericContainerGenericContainer represents a generic container implementation that can be customized and built using the provided builder.
    ImageBuilderAn abstract class for building Docker images.
    PermissionExceptionPermissionException is a subclass of ContainerException that is used to represent exceptions that occur when there is a permission issue.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    ContainerBuilderCallbackAn interface for defining a callback to configure a container builder.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    State
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/collections/CollectionExtentionsKt.html b/apidocs/javadoc/no/acntech/easycontainers/util/collections/CollectionExtentionsKt.html new file mode 100644 index 00000000..952a767a --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/collections/CollectionExtentionsKt.html @@ -0,0 +1,590 @@ + + + + CollectionExtentionsKt + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CollectionExtentionsKt

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class CollectionExtentionsKt
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final static String + prettyPrint(Map<?, ?> $self, Boolean sortKeys, Integer offset, Character paddingChar, String keyValueSeparator) + Returns a string representation of the map in a pretty format.
      final static String + prettyPrint(List<?> $self, Integer offset, Character paddingChar) + Returns a string representation of the list in a pretty format.
      final static Map<String, String> + toStringMap(Map<?, ?> $self) + Converts each key-value pair in the map to a string representation, where the key is converted to a String using its toString() method, and the value is converted to a String using its toString() method.
      final static List<String> + toStringList(List<?> $self) + Converts each element in the list to a string representation.
      final static Set<String> + toStringSet(Set<?> $self) + Converts each element in the set to a string representation.
      final static Collection<String> + toStringCollection(Collection<?> $self) +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        prettyPrint

        +
         final static String prettyPrint(Map<?, ?> $self, Boolean sortKeys, Integer offset, Character paddingChar, String keyValueSeparator)
        +

        Returns a string representation of the map in a pretty format.

        + +
        + + +
        Parameters:
        + + + + +
        sortKeys - determines whether the keys should be sorted in ascending order (default is true)
        + + + +
        offset - the number of spaces for indentation (default is 4)
        + + + +
        paddingChar - the character used for padding (default is ' ')
        + + + +
        keyValueSeparator - the separator between the key and value (default is ": ")
        + + + + + +
        Returns:
        +

        the string representation of the map

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        prettyPrint

        +
         final static String prettyPrint(List<?> $self, Integer offset, Character paddingChar)
        +

        Returns a string representation of the list in a pretty format.

        + +
        + + +
        Parameters:
        + + + + +
        offset - the number of spaces for indentation (default is 2)
        + + + +
        paddingChar - the character used for padding (default is ' ')
        + + + + + +
        Returns:
        +

        the string representation of the list

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        toStringMap

        +
         final static Map<String, String> toStringMap(Map<?, ?> $self)
        +

        Converts each key-value pair in the map to a string representation, where the key is converted to a String using its toString() method, and the value is converted to a String using its toString() method. If the key or value is null, it is converted to the string "null".

        + +
        + + + + +
        Returns:
        +

        a new map where each key-value pair is converted to a string representation.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        toStringList

        +
         final static List<String> toStringList(List<?> $self)
        +

        Converts each element in the list to a string representation. If the element is null, it is converted to the string "null".

        + +
        + + + + +
        Returns:
        +

        a new list where each element is converted to its string representation.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        toStringSet

        +
         final static Set<String> toStringSet(Set<?> $self)
        +

        Converts each element in the set to a string representation. If the element is null, it is converted to the string "null".

        + +
        + + + + +
        Returns:
        +

        a new list where each element is converted to its string representation.

        + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/collections/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/collections/package-summary.html new file mode 100644 index 00000000..a0365574 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/collections/package-summary.html @@ -0,0 +1,184 @@ + + + + Package no.acntech.easycontainers.util.collections + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.collections

+
+
+
+
+
+

See: Description

+
+
+ + + +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/io/FileUtils.html b/apidocs/javadoc/no/acntech/easycontainers/util/io/FileUtils.html new file mode 100644 index 00000000..47fdf455 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/io/FileUtils.html @@ -0,0 +1,704 @@ + + + + FileUtils + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object FileUtils

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class FileUtils
    +
    +                    
    +

    The FileUtils class provides utility functions related to file operations.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static FileUtilsINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Boolean + isCompleteUnixPath(String path) + Checks if the provided path is a complete Unix path.
      final File + tarFile(Path filePath, String entryName) + Creates a TAR file containing the specified file and entry name.
      final Path + tar(Path dir, Path tarball, Boolean includeParentDir) + Creates a TAR archive of the specified directory.
      final Long + tar(Path dir, OutputStream output, Boolean includeParentDir) +
      final InputStream + tar(Path dir, Boolean includeParentDir) + Creates an input stream containing a TAR archive of the specified directory.
      final Path + untarFile(File tarFile, Path destination) + Untars a single file from the specified TAR file to the specified destination.
      final Pair<Path, List<Path>> + untar(File tarball, Path destination) + Extracts the contents of a tarball to a specified destination directory.
      final Pair<Path, List<Path>> + untar(InputStream input, Path destination) + Extracts the contents of a tarball from the given input stream to the specified destination directory.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        isCompleteUnixPath

        +
         final Boolean isCompleteUnixPath(String path)
        +

        Checks if the provided path is a complete Unix path.

        + +
        + + +
        Parameters:
        + + +
        path - The path to check.
        + + + + + +
        Returns:
        +

        Returns true if the provided path is a complete Unix path, otherwise false.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        tarFile

        +
         final File tarFile(Path filePath, String entryName)
        +

        Creates a TAR file containing the specified file and entry name.

        + +
        + + +
        Parameters:
        + + +
        filePath - The file to be included in the TAR file.
        + + + +
        entryName - The name of the entry (file) inside the TAR file.
        + + + + + +
        Returns:
        +

        The TAR file as a File object.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        tar

        +
         final Path tar(Path dir, Path tarball, Boolean includeParentDir)
        +

        Creates a TAR archive of the specified directory.

        + +
        + + +
        Parameters:
        + + +
        dir - The directory to be included in the TAR archive.
        + + + +
        tarball - The path of the TAR archive to be created.
        + + + +
        includeParentDir - Specifies whether to include the parent directory in the TAR archive.
        + + + + + +
        Returns:
        +

        The path of the TAR archive.

        + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        tar

        +
         final InputStream tar(Path dir, Boolean includeParentDir)
        +

        Creates an input stream containing a TAR archive of the specified directory. Note that the piping to the input is done in a separate (virtual) thread.

        + +
        + + +
        Parameters:
        + + +
        dir - The directory to be included in the TAR archive.
        + + + +
        includeParentDir - Specifies whether to include the parent directory in the TAR archive.
        + + + + + +
        Returns:
        +

        An input stream containing the TAR archive.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        untarFile

        +
         final Path untarFile(File tarFile, Path destination)
        +

        Untars a single file from the specified TAR file to the specified destination. If the destination is a directory, the file will be extracted to the directory with the same name as the TAR entry. If the destination is a file, the file will be extracted to the destination file.

        + +
        + + +
        Parameters:
        + + +
        tarFile - The TAR file to extract.
        + + + +
        destination - The destination to extract the TAR file to - either a directory or a file.
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        untar

        +
         final Pair<Path, List<Path>> untar(File tarball, Path destination)
        +

        Extracts the contents of a tarball to a specified destination directory.

        + +
        + + +
        Parameters:
        + + +
        tarball - The tarball file to be extracted.
        + + + +
        destination - The destination directory where the contents should be extracted to.
        + + + + + +
        Returns:
        +

        A Pair containing the path of the destination directory and a list of extracted files.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        untar

        +
         final Pair<Path, List<Path>> untar(InputStream input, Path destination)
        +

        Extracts the contents of a tarball from the given input stream to the specified destination directory.

        + +
        + + +
        Parameters:
        + + +
        input - The input stream of the tarball to be extracted.
        + + + +
        destination - The destination directory where the contents should be extracted to.
        + + + + + +
        Returns:
        +

        A Pair containing the path of the destination directory and a list of extracted files.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/io/FunctionsKt.html b/apidocs/javadoc/no/acntech/easycontainers/util/io/FunctionsKt.html new file mode 100644 index 00000000..a132dfd1 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/io/FunctionsKt.html @@ -0,0 +1,506 @@ + + + + FunctionsKt + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FunctionsKt

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class FunctionsKt
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final static Unit + closeQuietly(Closeable $self) + Closes a Closeable object quietly, without throwing any exception.
      final static String + toUtf8String(ByteArrayOutputStream $self) + Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string.
      final static <T extends Any> InputStream + pipe(Function1<OutputStream, T> operation) + Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream.
      final static <T extends Any> InputStream + pipe(Function1<OutputStream, T> operation, Boolean buffered) + Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        closeQuietly

        +
         final static Unit closeQuietly(Closeable $self)
        +

        Closes a Closeable object quietly, without throwing any exception.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        toUtf8String

        +
         final static String toUtf8String(ByteArrayOutputStream $self)
        +

        Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string.

        + +
        + + + + +
        Returns:
        +

        the UTF-8 string representation of the content in this ByteArrayOutputStream.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        pipe

        +
         final static <T extends Any> InputStream pipe(Function1<OutputStream, T> operation)
        +

        Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously. Streams are buffered.

        + +
        + + +
        Parameters:
        + + +
        operation - The operation to execute in a separate thread.
        + + + + + +
        Returns:
        +

        An InputStream that reads from the output of the operation.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        pipe

        +
         final static <T extends Any> InputStream pipe(Function1<OutputStream, T> operation, Boolean buffered)
        +

        Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously.

        + +
        + + +
        Parameters:
        + + +
        operation - The operation to execute in a separate thread.
        + + + +
        buffered - Specifies whether the InputStream and OutputStream should be buffered.
        + + + + + +
        Returns:
        +

        An InputStream that reads from the output of the operation.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/io/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/io/package-summary.html new file mode 100644 index 00000000..0da173ef --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/io/package-summary.html @@ -0,0 +1,208 @@ + + + + Package no.acntech.easycontainers.util.io + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.io

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    FileUtilsThe FileUtils class provides utility functions related to file operations.
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    FunctionsKt
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/lang/FunctionsKt.html b/apidocs/javadoc/no/acntech/easycontainers/util/lang/FunctionsKt.html new file mode 100644 index 00000000..00e47002 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/lang/FunctionsKt.html @@ -0,0 +1,768 @@ + + + + FunctionsKt + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FunctionsKt

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class FunctionsKt
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + +
        +
      • +

        asStringMap

        +
         final static Map<String, Object> asStringMap(Object $self, Map<String, Object> defaultOverrides, Set<Object> visited, Integer depth, Integer maxDepth)
        +

        Converts an object to a Map representation, including its properties or Java bean properties.

        + +
        + + +
        Parameters:
        + + + + +
        defaultOverrides - a map of default properties to override the retrieved properties
        + + + + + + + + + + + +
        Returns:
        +

        a map representation of the object, with property names as keys and property values as values

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        prettyPrintMe

        +
         final static String prettyPrintMe(Object $self, Map<String, Object> fallbackMap)
        +

        Returns a string representation of the calling object in a pretty format.

        + +
        + + +
        Parameters:
        + + + + +
        fallbackMap - the fallback map to use if conversion to map fails (default is an empty map)
        + + + + + +
        Returns:
        +

        the string representation of the object

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        identityTransform

        +
         final static <T extends Any> Function1<T, T> identityTransform()
        +
        + +
        + + + + + + + +
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        guardedExecution

        +
         final static Unit guardedExecution(Function0<Unit> block, List<KClass<out Exception>> errors, Function1<Exception, Unit> onError, Function1<Exception, Unit> noMatchHandler, Function0<Unit> finallyBlock)
        +

        Guards a given block of code, and calls the onError function if any of the specified exceptions (or their subclasses) are thrown. If the thrown exception is not one of the specified exceptions (or a subclass), the noMatchHandler function is called. The finallyBlock is always executed, defaulting to an empty function.

        <p> +Example usage: +<pre><code> +guardedExecution( + { + // Code which might throw an exception + throw IllegalStateException("An error has occurred!") + }, + listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") }, + { e: Exception -> println("No match handler for: ${e.message}") }, + { println("Finally block executed") } +) +</code></pre>
        + +
        + + +
        Parameters:
        + + +
        block - The block of code to guard.
        + + + +
        errors - The exceptions to guard against.
        + + + +
        onError - The function to call if any of the specified exceptions are thrown.
        + + + +
        noMatchHandler - The function to call if the thrown exception is not one of the specified exceptions.
        + + + +
        finallyBlock - The block of code to execute after the guarded block, regardless of whether an exception was thrown or not.
        + + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        guardedExecution

        +
         final static Unit guardedExecution(Function0<Unit> block, Pair<List<KClass<out Exception>>, Function1<Exception, Unit>> handlers, Function1<Exception, Unit> noMatchHandler, Function0<Unit> finallyBlock)
        +

        A more generic version of the guardedExecution function, which allows for specifying a list of pairs of exception classes and their corresponding handler functions. If an exception is thrown, the first matching handler is called. If no handler matches, the noMatchHandler is called. If noMatchHandler is not specified, the exception is rethrown. The finallyBlock is always executed, defaulting to an empty function.

        Example usage:

        <pre><code> +guardedExecution( + { + // Code which might throw an exception + throw IllegalStateException("An error has occurred!") + }, + arrayOf( + listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") }, + listOf(RuntimeException::class) to { e: Exception -> println("Handle RuntimeException: ${e.message}") } + ), + { e: Exception -> println("No match handler for: ${e.message}") }, + { println("Finally block executed") } +) +</code></pre>
        + +
        + + +
        Parameters:
        + + +
        block - The block of code to guard.
        + + + +
        handlers - A list of pairs, where the first element is a list of exception classes, and the second element is the handler function to be called if any of the exception classes matches.
        + + + +
        noMatchHandler - The function to call if no handler matches the error's class.
        + + + +
        finallyBlock - The block of code to execute after the guarded block, regardless of whether an exception was thrown or not.
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/lang/RangeValidator.html b/apidocs/javadoc/no/acntech/easycontainers/util/lang/RangeValidator.html new file mode 100644 index 00000000..cc27db3e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/lang/RangeValidator.html @@ -0,0 +1,560 @@ + + + + RangeValidator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RangeValidator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.util.lang.Validator + + +
    +
    + +
    +
    +
    +public final class RangeValidator<P extends Comparable<P>>
    + implements Validator<P>
    +                    
    +

    Represents a validation range for a comparable value.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      RangeValidator(P inclusiveMin, P exclusiveMin, P inclusiveMax, P exclusiveMax)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final P + getInclusiveMin() + the inclusive minimum value of the range (optional)
      final P + getExclusiveMin() + the exclusive minimum value of the range (optional)
      final P + getInclusiveMax() + the inclusive maximum value of the range (optional)
      final P + getExclusiveMax() + the exclusive maximum value of the range (optional)
      Unit + validate(P t) + Validates the given object.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        RangeValidator

        +
        RangeValidator(P inclusiveMin, P exclusiveMin, P inclusiveMax, P exclusiveMax)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getInclusiveMin

        +
         final P getInclusiveMin()
        +

        the inclusive minimum value of the range (optional)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getExclusiveMin

        +
         final P getExclusiveMin()
        +

        the exclusive minimum value of the range (optional)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getInclusiveMax

        +
         final P getInclusiveMax()
        +

        the inclusive maximum value of the range (optional)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getExclusiveMax

        +
         final P getExclusiveMax()
        +

        the exclusive maximum value of the range (optional)

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        validate

        +
         Unit validate(P t)
        +

        Validates the given object.

        + +
        + + +
        Parameters:
        + + +
        t - the object to validate
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/lang/ValidationException.html b/apidocs/javadoc/no/acntech/easycontainers/util/lang/ValidationException.html new file mode 100644 index 00000000..f5a20903 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/lang/ValidationException.html @@ -0,0 +1,440 @@ + + + + ValidationException + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ValidationException

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + java.io.Serializable + + +
    +
    + +
    +
    +
    +public final class ValidationException
    +extends RuntimeException
    +                    
    +

    Exception that is thrown when a validation error occurs.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final Throwablecause
      private final Stringmessage
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + +
      Modifier and TypeMethodDescription
      +
      +
        + +
      • + + +

        Methods inherited from class kotlin.Throwable

        + addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace
      • + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ValidationException

        +
        ValidationException()
        +
        + +
      • +
      + + +
        +
      • +

        ValidationException

        +
        ValidationException(String message)
        +
        + +
      • +
      + + +
        +
      • +

        ValidationException

        +
        ValidationException(String message, Throwable cause)
        +
        + +
      • +
      + + +
        +
      • +

        ValidationException

        +
        ValidationException(Throwable cause)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/lang/Validator.html b/apidocs/javadoc/no/acntech/easycontainers/util/lang/Validator.html new file mode 100644 index 00000000..ccba6a9c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/lang/Validator.html @@ -0,0 +1,393 @@ + + + + Validator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Validator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public interface Validator<T extends Object>
    +
    +                    
    +

    Interface for validating objects.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      abstract Unit + validate(T t) + Validates the given object.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        validate

        +
         abstract Unit validate(T t)
        +

        Validates the given object.

        + +
        + + +
        Parameters:
        + + +
        t - the object to validate
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/lang/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/lang/package-summary.html new file mode 100644 index 00000000..44da1c16 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/lang/package-summary.html @@ -0,0 +1,212 @@ + + + + Package no.acntech.easycontainers.util.lang + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.lang

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    RangeValidatorRepresents a validation range for a comparable value.
    ValidationExceptionException that is thrown when a validation error occurs.
    FunctionsKt
    + +
    + +
  • + +
  • + + + + + +
    + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    ValidatorInterface for validating objects.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/net/NetworkUtils.html b/apidocs/javadoc/no/acntech/easycontainers/util/net/NetworkUtils.html new file mode 100644 index 00000000..6a6f9d1b --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/net/NetworkUtils.html @@ -0,0 +1,485 @@ + + + + NetworkUtils + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object NetworkUtils

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class NetworkUtils
    +
    +                    
    +

    The NetworkUtils class provides utility methods related to network operations.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      public final static NetworkUtilsINSTANCE
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Boolean + isIp4Address(String ipAddress) + Checks if the given string represents a valid IPv4 address.
      final List<String> + getLocalIpAddresses() + Retrieves the list of local IP addresses.
      final Boolean + isTcpPortOpen(String host, Integer port, Integer timeoutMillis) + Checks if a given port on a host is open and reachable - similar to the <code>'nc -z'</code> *nix command.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        isIp4Address

        +
         final Boolean isIp4Address(String ipAddress)
        +

        Checks if the given string represents a valid IPv4 address.

        + +
        + + +
        Parameters:
        + + +
        ipAddress - the string representing the IP address to be checked
        + + + + + +
        Returns:
        +

        true if the given string is a valid IPv4 address, false otherwise

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getLocalIpAddresses

        +
         final List<String> getLocalIpAddresses()
        +

        Retrieves the list of local IP addresses.

        This method loops through all the network interfaces of the system and collects the IP addresses that are not loopback addresses and are site local addresses. The collected IP addresses are added to a list and returned.

        + +
        + + + + +
        Returns:
        +

        A list of local IP addresses.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isTcpPortOpen

        +
         final Boolean isTcpPortOpen(String host, Integer port, Integer timeoutMillis)
        +

        Checks if a given port on a host is open and reachable - similar to the <code>'nc -z'</code> *nix command.

        + +
        + + +
        Parameters:
        + + +
        host - the hostname or IP address of the host
        + + + +
        port - the port number to check
        + + + +
        timeoutMillis - the timeout in milliseconds for the connection attempt (default is 5000 milliseconds)
        + + + + + +
        Returns:
        +

        true if the port is open and reachable, false otherwise

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/net/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/net/package-summary.html new file mode 100644 index 00000000..2291b24e --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/net/package-summary.html @@ -0,0 +1,184 @@ + + + + Package no.acntech.easycontainers.util.net + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.net

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    NetworkUtilsThe NetworkUtils class provides utility methods related to network operations.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/platform/PlatformUtils.html b/apidocs/javadoc/no/acntech/easycontainers/util/platform/PlatformUtils.html new file mode 100644 index 00000000..efe2dc57 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/platform/PlatformUtils.html @@ -0,0 +1,779 @@ + + + + PlatformUtils + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Object PlatformUtils

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public class PlatformUtils
    +
    +                    
    +

    Utility class for platform-specific operations.

    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        isLinux

        +
         final Boolean isLinux()
        +

        Checks if the current operating system is Linux.

        + +
        + + + + +
        Returns:
        +

        true if the current operating system is Linux, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isWindows

        +
         final Boolean isWindows()
        +

        Checks if the current operating system is Windows.

        + +
        + + + + +
        Returns:
        +

        true if the current operating system is Windows, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isMac

        +
         final Boolean isMac()
        +

        Checks if the current operating system is macOS.

        + +
        + + + + +
        Returns:
        +

        true if the operating system is macOS, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        isWslInstalled

        +
         final Boolean isWslInstalled()
        +

        Checks if Windows Subsystem for Linux (WSL) is installed on the system.

        + +
        + + + + +
        Returns:
        +

        true if WSL is installed, false otherwise.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        getWslDistroNames

        +
         final List<String> getWslDistroNames()
        +

        Retrieves the names of the Windows Subsystem for Linux (WSL) distributions installed on the system. Returns an empty list if the current operating system is not Windows.

        + +
        + + + + +
        Returns:
        +

        a list of strings containing the names of the WSL distributions.

        + + + + +
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        convertWindowsPathToUnixWslPath

        +
         final String convertWindowsPathToUnixWslPath(String windowsPath, String distroName)
        +

        Converts a Windows-style path to a Linux-style path for use in WSL. Example: "C:\Users\path" -> "/mnt/c/Users/path"

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        convertUnixPathToWindowsWslPath

        +
         final String convertUnixPathToWindowsWslPath(String linuxPath, String distroName)
        +

        Converts a Linux-style path to a Windows-style path for use in WSL. Example: "/home/johndoe/myfile.txt" -> "\\wsl$\Ubuntu\home\johndoe\myfile.txt"

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        convertToDockerPath

        +
         final String convertToDockerPath(Path path)
        +

        Converts a Path to a string that can be used in a Docker command. Example: "C:\Users\path" -> "/mnt/c/Users/path" (WSL) or "C:/Users/path" (Docker Desktop)

        + +
        + + + + + + + +
        +
      • +
      + + + + + + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/platform/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/platform/package-summary.html new file mode 100644 index 00000000..6a5aee0d --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/platform/package-summary.html @@ -0,0 +1,184 @@ + + + + Package no.acntech.easycontainers.util.platform + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.platform

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + +
    Object Summary 
    ObjectDescription
    PlatformUtilsUtility class for platform-specific operations.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/FunctionsKt.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/FunctionsKt.html new file mode 100644 index 00000000..49e82c3c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/FunctionsKt.html @@ -0,0 +1,477 @@ + + + + FunctionsKt + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FunctionsKt

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class FunctionsKt
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final static RegexWHITESPACE_REGEX
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Regex + getWHITESPACE_REGEX() +
      final static List<String> + splitOnWhites(String $self) + Splits a string into a list of substrings using whitespace as the delimiter.
      final static String + truncate(String $self, Integer length, String affix, Boolean fromStart) + Truncates the string if its length exceeds the specified maximum length.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + +
        +
      • +

        splitOnWhites

        +
         final static List<String> splitOnWhites(String $self)
        +

        Splits a string into a list of substrings using whitespace as the delimiter.

        + +
        + + + + +
        Returns:
        +

        The list of substrings obtained by splitting the receiver string on whitespaces.

        + + + + +
        +
      • +
      + + + + +
        +
      • +

        truncate

        +
         final static String truncate(String $self, Integer length, String affix, Boolean fromStart)
        +

        Truncates the string if its length exceeds the specified maximum length. An affix can be appended to the truncated string. By default, the truncation is performed from the end of the string with the affix appended as a suffix.

        + +
        + + +
        Parameters:
        + + + + +
        length - The maximum length of the string.
        + + + +
        affix - The prefix or suffix to be added to the truncated string.
        + + + +
        fromStart - Boolean indicating whether the truncation should be performed from the start of the string or from the end.
        + + + + + +
        Returns:
        +

        The truncated string with the specified affix appended.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/LengthValidator.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/LengthValidator.html new file mode 100644 index 00000000..2107ff7c --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/LengthValidator.html @@ -0,0 +1,486 @@ + + + + LengthValidator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class LengthValidator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.util.lang.Validator + + +
    +
    + +
    +
    +
    +public final class LengthValidator
    + implements Validator<String>
    +                    
    +

    A validator that forces a string to be of a certain length.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final Integermin
      private final Integermax
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Integer + getMin() + The minimum length of the string.
      final Integer + getMax() + The maximum length of the string.
      Unit + validate(String t) + Validates the given object.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        LengthValidator

        +
        LengthValidator(Integer min, Integer max)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getMin

        +
         final Integer getMin()
        +

        The minimum length of the string.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getMax

        +
         final Integer getMax()
        +

        The maximum length of the string.

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        validate

        +
         Unit validate(String t)
        +

        Validates the given object.

        + +
        + + +
        Parameters:
        + + +
        t - the object to validate
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/RegexValidator.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/RegexValidator.html new file mode 100644 index 00000000..e94a315f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/RegexValidator.html @@ -0,0 +1,542 @@ + + + + RegexValidator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RegexValidator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.util.lang.Validator + + +
    +
    + +
    +
    +
    +public final class RegexValidator
    + implements Validator<String>
    +                    
    +

    A validator that uses regular expressions to validate strings.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private final Regexpattern
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Constructor Summary

      +
      + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      RegexValidator(Regex pattern)
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Regex + getPattern() + The regular expression pattern used for validation.
      Unit + validate(String t) + Validates the given object.
      Boolean + equals(Object other) +
      Integer + hashCode() +
      String + toString() +
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        RegexValidator

        +
        RegexValidator(Regex pattern)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    + +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/StringConstantsKt.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/StringConstantsKt.html new file mode 100644 index 00000000..36dfd522 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/StringConstantsKt.html @@ -0,0 +1,625 @@ + + + + StringConstantsKt + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class StringConstantsKt

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class StringConstantsKt
    +
    +                    
    +
    + +
    + + + + + +
    +
  • +
+
+
+ +
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/StringValidator.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/StringValidator.html new file mode 100644 index 00000000..cdc4be49 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/StringValidator.html @@ -0,0 +1,441 @@ + + + + StringValidator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class StringValidator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + + no.acntech.easycontainers.util.lang.Validator + + +
    +
    + +
    +
    +
    +public final class StringValidator
    + implements Validator<String>
    +                    
    +

    Validates a String value object based on a given range and additional validators.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Field Summary

      +
      + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      Unit + validate(String t) + Validates the given object.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        StringValidator

        +
        StringValidator(Integer minLength, Integer maxLength, RangeValidator<String> rangeValidator, Validator<String> lexicalValidator, Validator<String> syntaxValidator, Validator<String> semanticsValidator)
        +
        + +
        +
        Parameters:
        + + +
        minLength - the minimum length of the String value object (optional)
        + + + +
        maxLength - the maximum length of the String value object (optional)
        + + + +
        rangeValidator - the range validator for the String value object (optional)
        + + + +
        lexicalValidator - the lexical validator for the String value object (optional)
        + + + +
        syntaxValidator - the syntax validator for the String value object (optional)
        + + + +
        semanticsValidator - the semantics validator for the String value object (optional)
        + + +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        validate

        +
         Unit validate(String t)
        +

        Validates the given object.

        + +
        + + +
        Parameters:
        + + +
        t - the object to validate
        + + + + + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/text/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/text/package-summary.html new file mode 100644 index 00000000..a8eb49d1 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/text/package-summary.html @@ -0,0 +1,192 @@ + + + + Package no.acntech.easycontainers.util.text + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.text

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    LengthValidatorA validator that forces a string to be of a certain length.
    RegexValidatorA validator that uses regular expressions to validate strings.
    StringValidatorValidates a String value object based on a given range and additional validators.
    FunctionsKt
    StringConstantsKt
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/time/WaitTimeCalculator.html b/apidocs/javadoc/no/acntech/easycontainers/util/time/WaitTimeCalculator.html new file mode 100644 index 00000000..ddb7451f --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/time/WaitTimeCalculator.html @@ -0,0 +1,523 @@ + + + + WaitTimeCalculator + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class WaitTimeCalculator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces:
    +
    + +
    +
    + +
    +
    +
    +public final class WaitTimeCalculator
    +
    +                    
    +

    WaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, unit and start time.

    + +
    + + + + + +
    +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Nested Class Summary

      +
      + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      +
      +
    • +
    +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Summary

      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Modifier and TypeMethodDescription
      final Long + getWaitTimeValue() + The wait time value
      final TimeUnit + getWaitTimeUnit() + The wait time unit
      final Long + getStartTime() + The start time of the wait time calculation
      final Long + getRemainingTime(TimeUnit unit) + Calculates the remaining time based on the unit provided, calculated from the start time for this instance.
      +
      +
        + +
      • + + +

        Methods inherited from class java.lang.Object

        + clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, + wait, wait, wait
      • +
      +
    • +
    +
    + +
  • +
+
+
+
    +
  • + + +
    +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        WaitTimeCalculator

        +
        WaitTimeCalculator(Long waitTimeValue, TimeUnit waitTimeUnit, Long startTime)
        +
        + +
      • +
      + +
    • +
    +
    + + + +
    +
      +
    • + + +

      Method Detail

      + + + + +
        +
      • +

        getWaitTimeValue

        +
         final Long getWaitTimeValue()
        +

        The wait time value

        + +
        + + + + + + + +
        +
      • +
      + + + + + + + + + +
        +
      • +

        getStartTime

        +
         final Long getStartTime()
        +

        The start time of the wait time calculation

        + +
        + + + + + + + +
        +
      • +
      + + + + +
        +
      • +

        getRemainingTime

        +
         final Long getRemainingTime(TimeUnit unit)
        +

        Calculates the remaining time based on the unit provided, calculated from the start time for this instance.

        + +
        + + +
        Parameters:
        + + +
        unit - The time unit to return the remaining time in.
        + + + + + +
        Returns:
        +

        The remaining time in the specified time unit.

        + + + + +
        +
      • +
      + +
    • +
    +
    + +
  • +
+
+
+
+ + + + diff --git a/apidocs/javadoc/no/acntech/easycontainers/util/time/package-summary.html b/apidocs/javadoc/no/acntech/easycontainers/util/time/package-summary.html new file mode 100644 index 00000000..328daf01 --- /dev/null +++ b/apidocs/javadoc/no/acntech/easycontainers/util/time/package-summary.html @@ -0,0 +1,184 @@ + + + + Package no.acntech.easycontainers.util.time + + + + + + + + + + + + + + + + + +
+ +
+
+
+

Package no.acntech.easycontainers.util.time

+
+
+
+
+
+

See: Description

+
+
+ +
    + +
  • + + + + + +
    + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    WaitTimeCalculatorWaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, unit and start time.
    + +
    + +
  • + +
+ +
+
+
+ +
+ + + diff --git a/apidocs/javadoc/package-list b/apidocs/javadoc/package-list new file mode 100644 index 00000000..de01c6c0 --- /dev/null +++ b/apidocs/javadoc/package-list @@ -0,0 +1,52 @@ +$dokka.format:javadoc-v1 +$dokka.linkExtension:html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/custom/KanikoContainer.Companion.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html +$dokka.location:no.acntech.easycontainers.model/Arg.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Arg.Companion.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Args.Companion.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion///PointingToDeclaration/no/acntech/easycontainers/model/CPU.Companion.html +$dokka.location:no.acntech.easycontainers.model/Container.State///PointingToDeclaration/no/acntech/easycontainers/model/Container.State.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ContainerFileName.Companion.html +$dokka.location:no.acntech.easycontainers.model/ContainerName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ContainerName.Companion.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey.Companion///PointingToDeclaration/no/acntech/easycontainers/model/EnvVarKey.Companion.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue.Companion///PointingToDeclaration/no/acntech/easycontainers/model/EnvVarValue.Companion.html +$dokka.location:no.acntech.easycontainers.model/Executable.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Executable.Companion.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Host.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageName.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageTag.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageTag.Companion.html +$dokka.location:no.acntech.easycontainers.model/ImageURL.Companion///PointingToDeclaration/no/acntech/easycontainers/model/ImageURL.Companion.html +$dokka.location:no.acntech.easycontainers.model/LabelKey.Companion///PointingToDeclaration/no/acntech/easycontainers/model/LabelKey.Companion.html +$dokka.location:no.acntech.easycontainers.model/LabelValue.Companion///PointingToDeclaration/no/acntech/easycontainers/model/LabelValue.Companion.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Memory.Companion.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Namespace.Companion.html +$dokka.location:no.acntech.easycontainers.model/NetworkName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/NetworkName.Companion.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion///PointingToDeclaration/no/acntech/easycontainers/model/NetworkPort.Companion.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/PortMappingName.Companion.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion///PointingToDeclaration/no/acntech/easycontainers/model/RegistryURL.Companion.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/RepositoryName.Companion.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion.Companion///PointingToDeclaration/no/acntech/easycontainers/model/SemanticVersion.Companion.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion///PointingToDeclaration/no/acntech/easycontainers/model/UnixDir.Companion.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.Companion///PointingToDeclaration/no/acntech/easycontainers/model/Verbosity.Companion.html +$dokka.location:no.acntech.easycontainers.model/VolumeName.Companion///PointingToDeclaration/no/acntech/easycontainers/model/VolumeName.Companion.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime.Companion///PointingToDeclaration/no/acntech/easycontainers/AbstractContainerRuntime.Companion.html +$dokka.location:no.acntech.easycontainers/GenericContainer.Companion///PointingToDeclaration/no/acntech/easycontainers/GenericContainer.Companion.html +$dokka.location:no.acntech.easycontainers/GenericContainer.GenericContainerBuilder///PointingToDeclaration/no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.Companion///PointingToDeclaration/no/acntech/easycontainers/ImageBuilder.Companion.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State///PointingToDeclaration/no/acntech/easycontainers/ImageBuilder.State.html +no.acntech.easycontainers +no.acntech.easycontainers.custom +no.acntech.easycontainers.docker +no.acntech.easycontainers.kubernetes +no.acntech.easycontainers.model +no.acntech.easycontainers.model.base +no.acntech.easycontainers.output +no.acntech.easycontainers.util.collections +no.acntech.easycontainers.util.io +no.acntech.easycontainers.util.lang +no.acntech.easycontainers.util.net +no.acntech.easycontainers.util.platform +no.acntech.easycontainers.util.text +no.acntech.easycontainers.util.time + diff --git a/apidocs/javadoc/package-search-index.js b/apidocs/javadoc/package-search-index.js new file mode 100644 index 00000000..3d273bdc --- /dev/null +++ b/apidocs/javadoc/package-search-index.js @@ -0,0 +1 @@ +var packageSearchIndex = [{"l":"no.acntech.easycontainers","url":"no/acntech/easycontainers/package-summary.html"}, {"l":"no.acntech.easycontainers.custom","url":"no/acntech/easycontainers/custom/package-summary.html"}, {"l":"no.acntech.easycontainers.docker","url":"no/acntech/easycontainers/docker/package-summary.html"}, {"l":"no.acntech.easycontainers.kubernetes","url":"no/acntech/easycontainers/kubernetes/package-summary.html"}, {"l":"no.acntech.easycontainers.model","url":"no/acntech/easycontainers/model/package-summary.html"}, {"l":"no.acntech.easycontainers.model.base","url":"no/acntech/easycontainers/model/base/package-summary.html"}, {"l":"no.acntech.easycontainers.output","url":"no/acntech/easycontainers/output/package-summary.html"}, {"l":"no.acntech.easycontainers.util.collections","url":"no/acntech/easycontainers/util/collections/package-summary.html"}, {"l":"no.acntech.easycontainers.util.io","url":"no/acntech/easycontainers/util/io/package-summary.html"}, {"l":"no.acntech.easycontainers.util.lang","url":"no/acntech/easycontainers/util/lang/package-summary.html"}, {"l":"no.acntech.easycontainers.util.net","url":"no/acntech/easycontainers/util/net/package-summary.html"}, {"l":"no.acntech.easycontainers.util.platform","url":"no/acntech/easycontainers/util/platform/package-summary.html"}, {"l":"no.acntech.easycontainers.util.text","url":"no/acntech/easycontainers/util/text/package-summary.html"}, {"l":"no.acntech.easycontainers.util.time","url":"no/acntech/easycontainers/util/time/package-summary.html"}, {"l":"All packages","url":"index.html"}] diff --git a/apidocs/javadoc/resources/glass.png b/apidocs/javadoc/resources/glass.png new file mode 100644 index 00000000..a7f591f4 Binary files /dev/null and b/apidocs/javadoc/resources/glass.png differ diff --git a/apidocs/javadoc/resources/x.png b/apidocs/javadoc/resources/x.png new file mode 100644 index 00000000..30548a75 Binary files /dev/null and b/apidocs/javadoc/resources/x.png differ diff --git a/apidocs/javadoc/search.js b/apidocs/javadoc/search.js new file mode 100644 index 00000000..f839a92f --- /dev/null +++ b/apidocs/javadoc/search.js @@ -0,0 +1,212 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +const constants = { + noResult: { + l: "No results found", + renderable: "No results found" + }, + labels: { + modules: 'Modules', + packages: 'Packages', + types: 'Types', + members: 'Members', + tags: 'SearchTags' + } +} + +//It is super important to have vars here since they are lifter outside the block +//ES6 syntax doesn't provide those feature and therefore will fail when one of those values wouldn't be initialized +//eg. when a request for a given package fails +if(typeof moduleSearchIndex === 'undefined'){ + var moduleSearchIndex; +} +if(typeof packageSearchIndex === 'undefined'){ + var packageSearchIndex; +} +if(typeof typeSearchIndex === 'undefined'){ + var typeSearchIndex; +} +if(typeof memberSearchIndex === 'undefined'){ + var memberSearchIndex; +} +if(typeof tagSearchIndex === 'undefined'){ + var tagSearchIndex; +} + +const clearElementValue = (element) => { + element.val('') +} + +$(function init() { + const search = $("#search") + const reset = $("#reset") + + clearElementValue(search) + reset.on('click', () => { + clearElementValue(search) + search.focus() + }) +}) + +const itemHasResults = (item) => { + return item.l !== constants.noResult +} + +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + }, + _renderMenu: function(ul, items) { + const menu = this; + let category + $.each(items, (index, item) => { + const shouldCategoryLabelBeRendered = itemHasResults(item) && item.category !== category + if (shouldCategoryLabelBeRendered) { + ul.append(`
  • ${item.category}
  • `); + category = item.category; + } + + const li = menu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", `${item.category} : ${item.l}`); + } else { + li.attr("aria-label", item.l); + } + li.attr("class", "resultItem"); + }); + }, + _renderItem: (ul, item) => { + const li = $("
  • ").appendTo(ul); + const div = $("
    ").appendTo(li); + div.html(item.renderable); + return li; + } +}); + +const highlight = (match) => `` + match + `` +const escapeHtml = (str) => str.replace("&", "&").replace("<", "<").replace(">", ">") + +const labelForPackage = (element) => (element.m) ? (element.m + "/" + element.l) : element.l +const labelForNested = (element) => { + var label = "" + if(element.p) label += `${element.p}.` + if(element.l !== element.c && element.c) label += `${element.c}.` + return label + element.l +} +const nestedName = (e) => e.l.substring(e.l.lastIndexOf(".") + 1) + +const renderableFromLabel = (label, regex) => escapeHtml(label).replace(regex, highlight) + +$(() => { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + const exactRegexp = $.ui.autocomplete.escapeRegex(request.term) + "$" + const exactMatcher = new RegExp("^" + exactRegexp, "i"); + const camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + const camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + const secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + const processWithExactLabel = (dataset, category) => { + const exactOrCamelMatches = [] + const secondaryMatches = [] + + dataset.map(element => { + element.category = category + return element + }).forEach((element) => { + if(exactMatcher.test(element.l)){ + element.renderable = renderableFromLabel(element.l, exactMatcher) + exactOrCamelMatches.push(element) + } else if(camelCaseMatcher.test(element.l)){ + element.renderable = renderableFromLabel(element.l, camelCaseMatcher) + exactOrCamelMatches.push(element) + } else if(secondaryMatcher.test(element.l)){ + element.renderable = renderableFromLabel(element.l, secondaryMatcher) + secondaryMatches.push(element) + } + }) + + return [...exactOrCamelMatches, ...secondaryMatches] + } + + const processPackages = (dataset) => { + const exactOrCamelMatches = [] + const secondaryMatches = [] + + dataset.map(element => { + element.category = constants.labels.packages + return element + }).forEach((element) => { + const label = labelForPackage(element); + if(exactMatcher.test(element.l)){ + element.renderable = renderableFromLabel(element.l, exactMatcher) + exactOrCamelMatches.push(element) + } else if(camelCaseMatcher.test(label)){ + element.renderable = renderableFromLabel(label, camelCaseMatcher) + exactOrCamelMatches.push(element) + } else if(secondaryMatcher.test(label)){ + element.renderable = renderableFromLabel(label, secondaryMatcher) + secondaryMatches.push(element) + } + }) + + return [...exactOrCamelMatches, ...secondaryMatches] + } + + const processNested = (dataset, label) => { + const exactOrCamelMatches = [] + const secondaryMatches = [] + + dataset.map(element => { + element.category = label + return element + }).forEach((element) => { + const label = nestedName(element); + if(exactMatcher.test(label)) { + element.renderable = renderableFromLabel(labelForNested(element), new RegExp(exactRegexp, "i")) + exactOrCamelMatches.push(element) + } else if(camelCaseMatcher.test(label)){ + element.renderable = renderableFromLabel(labelForNested(element), new RegExp(camelCaseRegexp)) + exactOrCamelMatches.push(element) + } else if(secondaryMatcher.test(labelForNested(element))){ + element.renderable = renderableFromLabel(labelForNested(element), secondaryMatcher) + secondaryMatches.push(element) + } + }) + + return [...exactOrCamelMatches, ...secondaryMatches] + } + + const modules = moduleSearchIndex ? processWithExactLabel(moduleSearchIndex, constants.labels.modules) : [] + const packages = packageSearchIndex ? processPackages(packageSearchIndex) : [] + const types = typeSearchIndex ? processNested(typeSearchIndex, constants.labels.types) : [] + const members = memberSearchIndex ? processNested(memberSearchIndex, constants.labels.members) : [] + const tags = tagSearchIndex ? processWithExactLabel(tagSearchIndex, constants.labels.tags) : [] + + const result = [...modules, ...packages, ...types, ...members, ...tags] + return response(result); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(constants.noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== constants.noResult.l) { + window.location.href = pathtoroot + ui.item.url; + $("#search").focus(); + } + } + }); +}); + diff --git a/apidocs/javadoc/stylesheet.css b/apidocs/javadoc/stylesheet.css new file mode 100644 index 00000000..1a4d95b7 --- /dev/null +++ b/apidocs/javadoc/stylesheet.css @@ -0,0 +1,889 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size: 14px; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +.subNav .navList { + padding-top:5px; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; + padding-top:10px; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +.contentContainer .description dl dt p, .contentContainer .details dl dt p, .serializedFormContainer dl dt p, +.contentContainer .description dl dd p, .contentContainer .details dl dd p, .serializedFormContainer dl dd p { + margin:5px 0 10px 0px; +} + +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary table, .memberSummary table, .typeSummary table, .useSummary table, .constantsSummary table, .deprecatedSummary table, +.requiresSummary table, .packagesSummary table, .providesSummary table, .usesSummary table { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary table, .memberSummary table, .requiresSummary table, .packagesSummary table, .providesSummary table, .usesSummary table { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constantsSummary caption a:link, .constantsSummary caption a:visited, +.useSummary caption a:link, .useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.overviewSummary [role=tablist] button, .memberSummary [role=tablist] button, +.typeSummary [role=tablist] button, .packagesSummary [role=tablist] button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; +} +.overviewSummary [role=tablist] .activeTableTab, .memberSummary [role=tablist] .activeTableTab, +.typeSummary [role=tablist] .activeTableTab, .packagesSummary [role=tablist] .activeTableTab { + background: #F8981D; + color: #253441; +} +.overviewSummary [role=tablist] .tableTab, .memberSummary [role=tablist] .tableTab, +.typeSummary [role=tablist] .tableTab, .packagesSummary [role=tablist] .tableTab { + background: #4D7A97; + color: #FFFFFF; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .authorLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .sinceLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; + width:400px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/apidocs/javadoc/tag-search-index.js b/apidocs/javadoc/tag-search-index.js new file mode 100644 index 00000000..83e045b0 --- /dev/null +++ b/apidocs/javadoc/tag-search-index.js @@ -0,0 +1 @@ +var tagSearchIndex = [] diff --git a/apidocs/javadoc/type-search-index.js b/apidocs/javadoc/type-search-index.js new file mode 100644 index 00000000..4c7834ec --- /dev/null +++ b/apidocs/javadoc/type-search-index.js @@ -0,0 +1 @@ +var typeSearchIndex = [{"p":"no.acntech.easycontainers","l":"AbstractContainerRuntime.Companion","url":"no/acntech/easycontainers/AbstractContainerRuntime.Companion.html"}, {"p":"no.acntech.easycontainers","l":"AbstractContainerRuntime","url":"no/acntech/easycontainers/AbstractContainerRuntime.html"}, {"p":"no.acntech.easycontainers","l":"BaseContainerBuilder","url":"no/acntech/easycontainers/BaseContainerBuilder.html"}, {"p":"no.acntech.easycontainers","l":"ContainerBuilderCallback","url":"no/acntech/easycontainers/ContainerBuilderCallback.html"}, {"p":"no.acntech.easycontainers","l":"ContainerException","url":"no/acntech/easycontainers/ContainerException.html"}, {"p":"no.acntech.easycontainers","l":"Environment","url":"no/acntech/easycontainers/Environment.html"}, {"p":"no.acntech.easycontainers","l":"GenericContainer.GenericContainerBuilder","url":"no/acntech/easycontainers/GenericContainer.GenericContainerBuilder.html"}, {"p":"no.acntech.easycontainers","l":"GenericContainer.Companion","url":"no/acntech/easycontainers/GenericContainer.Companion.html"}, {"p":"no.acntech.easycontainers","l":"GenericContainer","url":"no/acntech/easycontainers/GenericContainer.html"}, {"p":"no.acntech.easycontainers","l":"ImageBuilder.State","url":"no/acntech/easycontainers/ImageBuilder.State.html"}, {"p":"no.acntech.easycontainers","l":"ImageBuilder.Companion","url":"no/acntech/easycontainers/ImageBuilder.Companion.html"}, {"p":"no.acntech.easycontainers","l":"ImageBuilder","url":"no/acntech/easycontainers/ImageBuilder.html"}, {"p":"no.acntech.easycontainers","l":"PermissionException","url":"no/acntech/easycontainers/PermissionException.html"}, {"p":"no.acntech.easycontainers.custom","l":"ElasticSearchContainer.ElasticSearchContainerBuilder","url":"no/acntech/easycontainers/custom/ElasticSearchContainer.ElasticSearchContainerBuilder.html"}, {"p":"no.acntech.easycontainers.custom","l":"ElasticSearchContainer.Companion","url":"no/acntech/easycontainers/custom/ElasticSearchContainer.Companion.html"}, {"p":"no.acntech.easycontainers.custom","l":"ElasticSearchContainer","url":"no/acntech/easycontainers/custom/ElasticSearchContainer.html"}, {"p":"no.acntech.easycontainers.custom","l":"KanikoContainer.KanikoContainerBuilder","url":"no/acntech/easycontainers/custom/KanikoContainer.KanikoContainerBuilder.html"}, {"p":"no.acntech.easycontainers.custom","l":"KanikoContainer.Companion","url":"no/acntech/easycontainers/custom/KanikoContainer.Companion.html"}, {"p":"no.acntech.easycontainers.custom","l":"KanikoContainer","url":"no/acntech/easycontainers/custom/KanikoContainer.html"}, {"p":"no.acntech.easycontainers.docker","l":"DockerClientFactory","url":"no/acntech/easycontainers/docker/DockerClientFactory.html"}, {"p":"no.acntech.easycontainers.docker","l":"DockerConstants","url":"no/acntech/easycontainers/docker/DockerConstants.html"}, {"p":"no.acntech.easycontainers.docker","l":"DockerRegistryUtils","url":"no/acntech/easycontainers/docker/DockerRegistryUtils.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"AccessChecker","url":"no/acntech/easycontainers/kubernetes/AccessChecker.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"ContainerLogStreamer","url":"no/acntech/easycontainers/kubernetes/ContainerLogStreamer.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"ErrorSupport","url":"no/acntech/easycontainers/kubernetes/ErrorSupport.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sClientFactory","url":"no/acntech/easycontainers/kubernetes/K8sClientFactory.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sConstants","url":"no/acntech/easycontainers/kubernetes/K8sConstants.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sJobRuntime","url":"no/acntech/easycontainers/kubernetes/K8sJobRuntime.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sRuntime","url":"no/acntech/easycontainers/kubernetes/K8sRuntime.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sServiceRuntime","url":"no/acntech/easycontainers/kubernetes/K8sServiceRuntime.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"K8sUtils","url":"no/acntech/easycontainers/kubernetes/K8sUtils.html"}, {"p":"no.acntech.easycontainers.kubernetes","l":"PodPhase","url":"no/acntech/easycontainers/kubernetes/PodPhase.html"}, {"p":"no.acntech.easycontainers.model","l":"Arg.Companion","url":"no/acntech/easycontainers/model/Arg.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Arg","url":"no/acntech/easycontainers/model/Arg.html"}, {"p":"no.acntech.easycontainers.model","l":"Args.Companion","url":"no/acntech/easycontainers/model/Args.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Args","url":"no/acntech/easycontainers/model/Args.html"}, {"p":"no.acntech.easycontainers.model","l":"CPU.Companion","url":"no/acntech/easycontainers/model/CPU.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"CPU","url":"no/acntech/easycontainers/model/CPU.html"}, {"p":"no.acntech.easycontainers.model","l":"Container.State","url":"no/acntech/easycontainers/model/Container.State.html"}, {"p":"no.acntech.easycontainers.model","l":"Container","url":"no/acntech/easycontainers/model/Container.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerBuilder","url":"no/acntech/easycontainers/model/ContainerBuilder.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerFile","url":"no/acntech/easycontainers/model/ContainerFile.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerFileName.Companion","url":"no/acntech/easycontainers/model/ContainerFileName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerFileName","url":"no/acntech/easycontainers/model/ContainerFileName.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerName.Companion","url":"no/acntech/easycontainers/model/ContainerName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerName","url":"no/acntech/easycontainers/model/ContainerName.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerPlatformType","url":"no/acntech/easycontainers/model/ContainerPlatformType.html"}, {"p":"no.acntech.easycontainers.model","l":"ContainerRuntime","url":"no/acntech/easycontainers/model/ContainerRuntime.html"}, {"p":"no.acntech.easycontainers.model","l":"EnvVarKey.Companion","url":"no/acntech/easycontainers/model/EnvVarKey.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"EnvVarKey","url":"no/acntech/easycontainers/model/EnvVarKey.html"}, {"p":"no.acntech.easycontainers.model","l":"EnvVarValue.Companion","url":"no/acntech/easycontainers/model/EnvVarValue.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"EnvVarValue","url":"no/acntech/easycontainers/model/EnvVarValue.html"}, {"p":"no.acntech.easycontainers.model","l":"Executable.Companion","url":"no/acntech/easycontainers/model/Executable.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Executable","url":"no/acntech/easycontainers/model/Executable.html"}, {"p":"no.acntech.easycontainers.model","l":"ExecutionMode","url":"no/acntech/easycontainers/model/ExecutionMode.html"}, {"p":"no.acntech.easycontainers.model","l":"Host.Companion","url":"no/acntech/easycontainers/model/Host.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Host","url":"no/acntech/easycontainers/model/Host.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageName.Companion","url":"no/acntech/easycontainers/model/ImageName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageName","url":"no/acntech/easycontainers/model/ImageName.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageTag.Companion","url":"no/acntech/easycontainers/model/ImageTag.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageTag","url":"no/acntech/easycontainers/model/ImageTag.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageURL.Companion","url":"no/acntech/easycontainers/model/ImageURL.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"ImageURL","url":"no/acntech/easycontainers/model/ImageURL.html"}, {"p":"no.acntech.easycontainers.model","l":"LabelKey.Companion","url":"no/acntech/easycontainers/model/LabelKey.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"LabelKey","url":"no/acntech/easycontainers/model/LabelKey.html"}, {"p":"no.acntech.easycontainers.model","l":"LabelValue.Companion","url":"no/acntech/easycontainers/model/LabelValue.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"LabelValue","url":"no/acntech/easycontainers/model/LabelValue.html"}, {"p":"no.acntech.easycontainers.model","l":"Memory.Companion","url":"no/acntech/easycontainers/model/Memory.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Memory","url":"no/acntech/easycontainers/model/Memory.html"}, {"p":"no.acntech.easycontainers.model","l":"Namespace.Companion","url":"no/acntech/easycontainers/model/Namespace.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Namespace","url":"no/acntech/easycontainers/model/Namespace.html"}, {"p":"no.acntech.easycontainers.model","l":"NetworkName.Companion","url":"no/acntech/easycontainers/model/NetworkName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"NetworkName","url":"no/acntech/easycontainers/model/NetworkName.html"}, {"p":"no.acntech.easycontainers.model","l":"NetworkPort.Companion","url":"no/acntech/easycontainers/model/NetworkPort.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"NetworkPort","url":"no/acntech/easycontainers/model/NetworkPort.html"}, {"p":"no.acntech.easycontainers.model","l":"PortMappingName.Companion","url":"no/acntech/easycontainers/model/PortMappingName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"PortMappingName","url":"no/acntech/easycontainers/model/PortMappingName.html"}, {"p":"no.acntech.easycontainers.model","l":"RegistryURL.Companion","url":"no/acntech/easycontainers/model/RegistryURL.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"RegistryURL","url":"no/acntech/easycontainers/model/RegistryURL.html"}, {"p":"no.acntech.easycontainers.model","l":"RepositoryName.Companion","url":"no/acntech/easycontainers/model/RepositoryName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"RepositoryName","url":"no/acntech/easycontainers/model/RepositoryName.html"}, {"p":"no.acntech.easycontainers.model","l":"SemanticVersion.Companion","url":"no/acntech/easycontainers/model/SemanticVersion.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"SemanticVersion","url":"no/acntech/easycontainers/model/SemanticVersion.html"}, {"p":"no.acntech.easycontainers.model","l":"UnixDir.Companion","url":"no/acntech/easycontainers/model/UnixDir.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"UnixDir","url":"no/acntech/easycontainers/model/UnixDir.html"}, {"p":"no.acntech.easycontainers.model","l":"Verbosity.Companion","url":"no/acntech/easycontainers/model/Verbosity.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"Verbosity","url":"no/acntech/easycontainers/model/Verbosity.html"}, {"p":"no.acntech.easycontainers.model","l":"Volume","url":"no/acntech/easycontainers/model/Volume.html"}, {"p":"no.acntech.easycontainers.model","l":"VolumeName.Companion","url":"no/acntech/easycontainers/model/VolumeName.Companion.html"}, {"p":"no.acntech.easycontainers.model","l":"VolumeName","url":"no/acntech/easycontainers/model/VolumeName.html"}, {"p":"no.acntech.easycontainers.model.base","l":"SimpleValueObject","url":"no/acntech/easycontainers/model/base/SimpleValueObject.html"}, {"p":"no.acntech.easycontainers.model.base","l":"ValueObject","url":"no/acntech/easycontainers/model/base/ValueObject.html"}, {"p":"no.acntech.easycontainers.output","l":"LineReader","url":"no/acntech/easycontainers/output/LineReader.html"}, {"p":"no.acntech.easycontainers.output","l":"OutputLineCallback","url":"no/acntech/easycontainers/output/OutputLineCallback.html"}, {"p":"no.acntech.easycontainers.output","l":"Slf4JOutputLineCallback","url":"no/acntech/easycontainers/output/Slf4JOutputLineCallback.html"}, {"p":"no.acntech.easycontainers.util.collections","l":"CollectionExtentionsKt","url":"no/acntech/easycontainers/util/collections/CollectionExtentionsKt.html"}, {"p":"no.acntech.easycontainers.util.io","l":"FileUtils","url":"no/acntech/easycontainers/util/io/FileUtils.html"}, {"p":"no.acntech.easycontainers.util.io","l":"FunctionsKt","url":"no/acntech/easycontainers/util/io/FunctionsKt.html"}, {"p":"no.acntech.easycontainers.util.lang","l":"RangeValidator","url":"no/acntech/easycontainers/util/lang/RangeValidator.html"}, {"p":"no.acntech.easycontainers.util.lang","l":"ValidationException","url":"no/acntech/easycontainers/util/lang/ValidationException.html"}, {"p":"no.acntech.easycontainers.util.lang","l":"Validator","url":"no/acntech/easycontainers/util/lang/Validator.html"}, {"p":"no.acntech.easycontainers.util.lang","l":"FunctionsKt","url":"no/acntech/easycontainers/util/lang/FunctionsKt.html"}, {"p":"no.acntech.easycontainers.util.net","l":"NetworkUtils","url":"no/acntech/easycontainers/util/net/NetworkUtils.html"}, {"p":"no.acntech.easycontainers.util.platform","l":"PlatformUtils","url":"no/acntech/easycontainers/util/platform/PlatformUtils.html"}, {"p":"no.acntech.easycontainers.util.text","l":"LengthValidator","url":"no/acntech/easycontainers/util/text/LengthValidator.html"}, {"p":"no.acntech.easycontainers.util.text","l":"RegexValidator","url":"no/acntech/easycontainers/util/text/RegexValidator.html"}, {"p":"no.acntech.easycontainers.util.text","l":"StringValidator","url":"no/acntech/easycontainers/util/text/StringValidator.html"}, {"p":"no.acntech.easycontainers.util.text","l":"FunctionsKt","url":"no/acntech/easycontainers/util/text/FunctionsKt.html"}, {"p":"no.acntech.easycontainers.util.text","l":"StringConstantsKt","url":"no/acntech/easycontainers/util/text/StringConstantsKt.html"}, {"p":"no.acntech.easycontainers.util.time","l":"WaitTimeCalculator","url":"no/acntech/easycontainers/util/time/WaitTimeCalculator.html"}, {"l":"All classes","url":"allclasses.html"}] diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/builder.html new file mode 100644 index 00000000..826f03d3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/builder.html @@ -0,0 +1,80 @@ + + + + + builder + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/index.html new file mode 100644 index 00000000..0db01d96 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/-i-m-a-g-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/-i-m-a-g-e.html new file mode 100644 index 00000000..688d42fd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/-i-m-a-g-e.html @@ -0,0 +1,80 @@ + + + + + IMAGE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    IMAGE

    +
    +
    const val IMAGE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/index.html new file mode 100644 index 00000000..884c5f66 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val IMAGE: String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-elastic-search-container-builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-elastic-search-container-builder.html new file mode 100644 index 00000000..98739162 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-elastic-search-container-builder.html @@ -0,0 +1,80 @@ + + + + + ElasticSearchContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ElasticSearchContainerBuilder

    +
    +
    constructor()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/build.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/build.html new file mode 100644 index 00000000..38b0348f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/build.html @@ -0,0 +1,80 @@ + + + + + build + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    build

    +
    +
    open override fun build(): Container(source)

    This method is used to build a Container object.

    Return

    A Container object after building it.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/index.html new file mode 100644 index 00000000..8f6cb9f2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/index.html @@ -0,0 +1,517 @@ + + + + + ElasticSearchContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun build(): Container

    This method is used to build a Container object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command arguments for the container.

    Sets the arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): GenericContainer.GenericContainerBuilder

    Adds a file to the container with the specified name, path, and content.

    Adds a container file to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU request for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a custom property to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables for the container.

    Adds an environment variable with the specified key and value.

    Sets an environment variable with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the execution mode for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds an exposed port to the container configuration.

    Sets the exposed port for the container by specifying the name and port number.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Set the image to use for the container.

    Sets the image for the container using the given image URL.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a label to the container with the given key and value.

    Adds a label with the provided key-value pair to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the maximum lifetime for the container.

    Sets the maximum life time for the object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory limit for the container.

    Sets the memory limit for the container in bytes.

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    Sets the memory limit for the current operation.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory request for the container.

    Performs the task with the given memory request.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a new instance of the container object with the specified name.

    Sets the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the namespace for the ContainerBuilder.

    Sets the namespace for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the network name for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the line callback for logging purposes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Maps a container exposed network port to another network port.

    Sets the port mapping for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the volume for the container.

    Sets the volume name and mount path for the current instance of the object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/with-version.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/with-version.html new file mode 100644 index 00000000..84358967 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/with-version.html @@ -0,0 +1,80 @@ + + + + + withVersion + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container.html new file mode 100644 index 00000000..3cc82217 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container.html @@ -0,0 +1,80 @@ + + + + + ElasticSearchContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ElasticSearchContainer

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/index.html new file mode 100644 index 00000000..42549545 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/index.html @@ -0,0 +1,622 @@ + + + + + ElasticSearchContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    + + +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun execute(executable: Executable, args: Args?, useTty: Boolean, workingDir: UnixDir?, input: InputStream?, output: OutputStream, waitTimeValue: Long?, waitTimeUnit: TimeUnit?): Pair<Int?, String?>

    Executes a command in the container.

    open fun execute(command: List<String>, useTty: Boolean = false, workingDir: String? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getArgs(): Args?

    Retrieves the command arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getCommand(): Executable?

    Retrieves the executable command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair<Path, List<Path>>
    open fun getDirectory(remoteDir: String, localDir: String): Pair<Path, List<Path>>

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDuration(): Duration?

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getEnv(): Map<EnvVarKey, EnvVarValue>

    Retrieves the environment variables associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExecutionMode(): ExecutionMode

    Retrieves the execution mode of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExitCode(): Int?

    Retrieves the exit code of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExposedPorts(): List<NetworkPort>

    Returns the list of network ports exposed by the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path

    Downloads a file from the container.

    open fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getHost(): Host?

    Retrieves the host of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getImage(): ImageURL

    Retrieves the image for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getIpAddress(): InetAddress?

    Retrieves the IP address of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getLabels(): Map<LabelKey, LabelValue>

    Retrieves the labels associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMappedPort(port: NetworkPort): NetworkPort

    Returns the mapped port for the specified network port.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMaxLifeTime(): Duration?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNamespace(): Namespace

    Returns the namespace of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNetworkName(): NetworkName?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the log output callback of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the port mappings for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getRuntime(): ContainerRuntime

    Retrieves the (underlying) runtime of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the state of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getVolumes(): List<Volume>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given network port has a mapping defined in the container's port mappings.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun isEphemeral(): Boolean

    Checks whether the container is ephemeral.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun onDelete()
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    open fun putDirectory(localDir: String, remoteDir: String): Long

    Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long

    Uploads a file to the container.

    open fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForCompletion(timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForState(state: Container.State, timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to reach the specified state.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/builder.html new file mode 100644 index 00000000..099e532f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/builder.html @@ -0,0 +1,80 @@ + + + + + builder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    builder

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/index.html new file mode 100644 index 00000000..01037296 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-d-e-f-a-u-l-t_-k-a-n-i-k-o_-i-m-a-g-e_-u-r-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-d-e-f-a-u-l-t_-k-a-n-i-k-o_-i-m-a-g-e_-u-r-l.html new file mode 100644 index 00000000..87ec815b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-d-e-f-a-u-l-t_-k-a-n-i-k-o_-i-m-a-g-e_-u-r-l.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_KANIKO_IMAGE_URL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_KANIKO_IMAGE_URL

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-k-a-n-i-k-o_-d-a-t-a_-v-o-l-u-m-e_-m-o-u-n-t_-p-a-t-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-k-a-n-i-k-o_-d-a-t-a_-v-o-l-u-m-e_-m-o-u-n-t_-p-a-t-h.html new file mode 100644 index 00000000..ea49d621 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-k-a-n-i-k-o_-d-a-t-a_-v-o-l-u-m-e_-m-o-u-n-t_-p-a-t-h.html @@ -0,0 +1,80 @@ + + + + + KANIKO_DATA_VOLUME_MOUNT_PATH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    KANIKO_DATA_VOLUME_MOUNT_PATH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/index.html new file mode 100644 index 00000000..903535d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/index.html @@ -0,0 +1,119 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-kaniko-container-builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-kaniko-container-builder.html new file mode 100644 index 00000000..420b4c6f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-kaniko-container-builder.html @@ -0,0 +1,80 @@ + + + + + KanikoContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    KanikoContainerBuilder

    +
    +
    constructor()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/build.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/build.html new file mode 100644 index 00000000..6ed71f76 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/build.html @@ -0,0 +1,80 @@ + + + + + build + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    build

    +
    +
    open override fun build(): Container(source)

    This method is used to build a Container object.

    Return

    A Container object after building it.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/index.html new file mode 100644 index 00000000..a7cd187e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/index.html @@ -0,0 +1,652 @@ + + + + + KanikoContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun build(): Container

    This method is used to build a Container object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command arguments for the container.

    Sets the arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): GenericContainer.GenericContainerBuilder

    Adds a file to the container with the specified name, path, and content.

    Adds a container file to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU request for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a custom property to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    If set, the subDir will be appended to the mount path for the Docker context volume.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Add a volume for the Dockerfile and Docker context. For Docker this is a named volume, for Kubernetes this is a PersistentVolumeClaim name (in the test setup this name is 'kaniko-data-pvc'). If the name doest not end with '-pvc', both the base name and the '-pvc' suffix will be attempted used, i.e. Easycontainers will check the existence of both 'your-volume-name' and 'your-volume-name-pvc', in that order.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables for the container.

    Adds an environment variable with the specified key and value.

    Sets an environment variable with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the execution mode for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds an exposed port to the container configuration.

    Sets the exposed port for the container by specifying the name and port number.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Set the image to use for the container.

    Sets the image for the container using the given image URL.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a label to the container with the given key and value.

    Adds a label with the provided key-value pair to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the maximum lifetime for the container.

    Sets the maximum life time for the object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory limit for the container.

    Sets the memory limit for the container in bytes.

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    Sets the memory limit for the current operation.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory request for the container.

    Performs the task with the given memory request.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a new instance of the container object with the specified name.

    Sets the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the namespace for the ContainerBuilder.

    Sets the namespace for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the network name for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the line callback for logging purposes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Maps a container exposed network port to another network port.

    Sets the port mapping for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the volume for the container.

    Sets the volume name and mount path for the current instance of the object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/to-string.html new file mode 100644 index 00000000..d3c01f1a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-delete-docker-context.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-delete-docker-context.html new file mode 100644 index 00000000..ab8ea18c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-delete-docker-context.html @@ -0,0 +1,80 @@ + + + + + withDeleteDockerContext + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withDeleteDockerContext

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-sub-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-sub-dir.html new file mode 100644 index 00000000..8e4b95e2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-sub-dir.html @@ -0,0 +1,80 @@ + + + + + withDockerContextSubDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withDockerContextSubDir

    +
    +

    If set, the subDir will be appended to the mount path for the Docker context volume.


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html new file mode 100644 index 00000000..0a4eeb1b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html @@ -0,0 +1,82 @@ + + + + + withDockerContextVolume + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withDockerContextVolume

    +
    +

    Add a volume for the Dockerfile and Docker context. For Docker this is a named volume, for Kubernetes this is a PersistentVolumeClaim name (in the test setup this name is 'kaniko-data-pvc'). If the name doest not end with '-pvc', both the base name and the '-pvc' suffix will be attempted used, i.e. Easycontainers will check the existence of both 'your-volume-name' and 'your-volume-name-pvc', in that order.

    +Note that a ContainerException will be thrown (for kubernetes) if a PersistentVolumeClaim (as explained above) does not +exist in the namespace.


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-image-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-image-name.html new file mode 100644 index 00000000..a103294c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-image-name.html @@ -0,0 +1,80 @@ + + + + + withImageName + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-insecure-registry.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-insecure-registry.html new file mode 100644 index 00000000..5e602271 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-insecure-registry.html @@ -0,0 +1,80 @@ + + + + + withInsecureRegistry + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withInsecureRegistry

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-registry.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-registry.html new file mode 100644 index 00000000..3f53a48b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-registry.html @@ -0,0 +1,80 @@ + + + + + withRegistry + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-repository.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-repository.html new file mode 100644 index 00000000..eac64b93 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-repository.html @@ -0,0 +1,80 @@ + + + + + withRepository + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tag.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tag.html new file mode 100644 index 00000000..298a557e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tag.html @@ -0,0 +1,80 @@ + + + + + withTag + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tags.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tags.html new file mode 100644 index 00000000..8da22d3e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tags.html @@ -0,0 +1,80 @@ + + + + + withTags + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-verbosity.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-verbosity.html new file mode 100644 index 00000000..8407f9d7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-verbosity.html @@ -0,0 +1,80 @@ + + + + + withVerbosity + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container.html new file mode 100644 index 00000000..e899a403 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container.html @@ -0,0 +1,80 @@ + + + + + KanikoContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    KanikoContainer

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/index.html new file mode 100644 index 00000000..d5f783df --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/index.html @@ -0,0 +1,622 @@ + + + + + KanikoContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun execute(executable: Executable, args: Args?, useTty: Boolean, workingDir: UnixDir?, input: InputStream?, output: OutputStream, waitTimeValue: Long?, waitTimeUnit: TimeUnit?): Pair<Int?, String?>

    Executes a command in the container.

    open fun execute(command: List<String>, useTty: Boolean = false, workingDir: String? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getArgs(): Args?

    Retrieves the command arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getCommand(): Executable?

    Retrieves the executable command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair<Path, List<Path>>
    open fun getDirectory(remoteDir: String, localDir: String): Pair<Path, List<Path>>

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDuration(): Duration?

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getEnv(): Map<EnvVarKey, EnvVarValue>

    Retrieves the environment variables associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExecutionMode(): ExecutionMode

    Retrieves the execution mode of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExitCode(): Int?

    Retrieves the exit code of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExposedPorts(): List<NetworkPort>

    Returns the list of network ports exposed by the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path

    Downloads a file from the container.

    open fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getHost(): Host?

    Retrieves the host of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getImage(): ImageURL

    Retrieves the image for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getIpAddress(): InetAddress?

    Retrieves the IP address of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getLabels(): Map<LabelKey, LabelValue>

    Retrieves the labels associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMappedPort(port: NetworkPort): NetworkPort

    Returns the mapped port for the specified network port.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMaxLifeTime(): Duration?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNamespace(): Namespace

    Returns the namespace of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNetworkName(): NetworkName?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the log output callback of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the port mappings for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getRuntime(): ContainerRuntime

    Retrieves the (underlying) runtime of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the state of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getVolumes(): List<Volume>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given network port has a mapping defined in the container's port mappings.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun isEphemeral(): Boolean

    Checks whether the container is ephemeral.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun onDelete()
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    open fun putDirectory(localDir: String, remoteDir: String): Long

    Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long

    Uploads a file to the container.

    open fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForCompletion(timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForState(state: Container.State, timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to reach the specified state.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/on-delete.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/on-delete.html new file mode 100644 index 00000000..2597d6cf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/on-delete.html @@ -0,0 +1,80 @@ + + + + + onDelete + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    onDelete

    +
    +
    open override fun onDelete()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/index.html new file mode 100644 index 00000000..9bf0622a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.custom/index.html @@ -0,0 +1,118 @@ + + + + + no.acntech.easycontainers.custom + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    + + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/create-default-client.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/create-default-client.html new file mode 100644 index 00000000..8d40cdb7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/create-default-client.html @@ -0,0 +1,80 @@ + + + + + createDefaultClient + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    createDefaultClient

    +
    +
    fun createDefaultClient(): DockerClient(source)

    This method creates a default Docker client.

    Return

    The default DockerClient instance.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/index.html new file mode 100644 index 00000000..f1e4db78 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/index.html @@ -0,0 +1,104 @@ + + + + + DockerClientFactory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DockerClientFactory

    +

    The DockerClientFactory class is responsible for creating a DockerClient instance. It provides a method to create a default DockerClient using the Docker host configuration.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun createDefaultClient(): DockerClient

    This method creates a default Docker client.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-b-r-i-d-g-e_-n-e-t-w-o-r-k.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-b-r-i-d-g-e_-n-e-t-w-o-r-k.html new file mode 100644 index 00000000..099a7570 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-b-r-i-d-g-e_-n-e-t-w-o-r-k.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_BRIDGE_NETWORK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_BRIDGE_NETWORK

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-a-p-i_-v-e-r-s-i-o-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-a-p-i_-v-e-r-s-i-o-n.html new file mode 100644 index 00000000..ce06b856 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-a-p-i_-v-e-r-s-i-o-n.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_DOCKER_API_VERSION + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_DOCKER_API_VERSION

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html new file mode 100644 index 00000000..9c9d2a25 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_DOCKER_DAEMON_ENDPOINT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_DOCKER_DAEMON_ENDPOINT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-i-n-s-e-c-u-r-e_-p-o-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-i-n-s-e-c-u-r-e_-p-o-r-t.html new file mode 100644 index 00000000..f6d950c5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-i-n-s-e-c-u-r-e_-p-o-r-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_DOCKER_TCP_INSECURE_PORT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_DOCKER_TCP_INSECURE_PORT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-s-e-c-u-r-e_-p-o-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-s-e-c-u-r-e_-p-o-r-t.html new file mode 100644 index 00000000..bb675edf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-s-e-c-u-r-e_-p-o-r-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_DOCKER_TCP_SECURE_PORT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_DOCKER_TCP_SECURE_PORT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-e-n-v_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-e-n-v_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html new file mode 100644 index 00000000..240876ab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-e-n-v_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html @@ -0,0 +1,80 @@ + + + + + ENV_DOCKER_DAEMON_ENDPOINT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ENV_DOCKER_DAEMON_ENDPOINT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-b-r-i-d-g-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-b-r-i-d-g-e.html new file mode 100644 index 00000000..b569166a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-b-r-i-d-g-e.html @@ -0,0 +1,80 @@ + + + + + NETWORK_MODE_BRIDGE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NETWORK_MODE_BRIDGE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-h-o-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-h-o-s-t.html new file mode 100644 index 00000000..17c0b1d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-h-o-s-t.html @@ -0,0 +1,80 @@ + + + + + NETWORK_MODE_HOST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NETWORK_MODE_HOST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-n-o-n-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-n-o-n-e.html new file mode 100644 index 00000000..b496a09d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-n-o-n-e.html @@ -0,0 +1,80 @@ + + + + + NETWORK_MODE_NONE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NETWORK_MODE_NONE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-n-o-d-e_-c-o-n-t-a-i-n-e-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-n-o-d-e_-c-o-n-t-a-i-n-e-r.html new file mode 100644 index 00000000..86f96d26 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-n-o-d-e_-c-o-n-t-a-i-n-e-r.html @@ -0,0 +1,80 @@ + + + + + NETWORK_NODE_CONTAINER + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NETWORK_NODE_CONTAINER

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-p-r-o-p_-e-n-a-b-l-e_-n-a-t-i-v-e_-d-o-c-k-e-r_-e-n-t-r-y-p-o-i-n-t_-s-t-r-a-t-e-g-y.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-p-r-o-p_-e-n-a-b-l-e_-n-a-t-i-v-e_-d-o-c-k-e-r_-e-n-t-r-y-p-o-i-n-t_-s-t-r-a-t-e-g-y.html new file mode 100644 index 00000000..11b06b7e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-p-r-o-p_-e-n-a-b-l-e_-n-a-t-i-v-e_-d-o-c-k-e-r_-e-n-t-r-y-p-o-i-n-t_-s-t-r-a-t-e-g-y.html @@ -0,0 +1,80 @@ + + + + + PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/index.html new file mode 100644 index 00000000..e165c71b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-constants/index.html @@ -0,0 +1,254 @@ + + + + + DockerConstants + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DockerConstants

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/delete-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/delete-image.html new file mode 100644 index 00000000..d16b998e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/delete-image.html @@ -0,0 +1,80 @@ + + + + + deleteImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    deleteImage

    +
    +
    fun deleteImage(registryUrl: String, imageName: String, digest: String? = null, tags: List<String> = emptyList())(source)

    Deletes an image from a registry.

    Parameters

    registryUrl

    The URL of the registry.

    imageName

    The name of the image.

    digest

    The digest of the image (optional). If provided, the image with the specified digest will be deleted.

    tags

    The list of tags associated with the image (optional). If no digest is provided, all images with the specified tags will be deleted.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-all-image-tags.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-all-image-tags.html new file mode 100644 index 00000000..592d9ca3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-all-image-tags.html @@ -0,0 +1,80 @@ + + + + + getAllImageTags + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getAllImageTags

    +
    +
    fun getAllImageTags(registryUrl: String, imageName: String): List<String>(source)

    Retrieves all image tags for a given registry URL and image name.

    Return

    The list of image tags as strings.

    Parameters

    registryUrl

    The URL of the registry.

    imageName

    The name of the image.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-image-digest.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-image-digest.html new file mode 100644 index 00000000..ee326728 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-image-digest.html @@ -0,0 +1,80 @@ + + + + + getImageDigest + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getImageDigest

    +
    +
    fun getImageDigest(registryUrl: String, imageName: String, tag: String): String?(source)

    Retrieves the digest of a Docker image from a specified registry using the provided image name and tag.

    Return

    The digest of the Docker image, or null if the operation fails or the digest is missing.

    Parameters

    registryUrl

    The URL of the Docker registry.

    imageName

    The name of the Docker image.

    tag

    The tag of the Docker image.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/index.html new file mode 100644 index 00000000..b2961c80 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/index.html @@ -0,0 +1,134 @@ + + + + + DockerRegistryUtils + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DockerRegistryUtils

    +

    This object provides utility methods for interacting with a Docker registry.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun deleteImage(registryUrl: String, imageName: String, digest: String? = null, tags: List<String> = emptyList())

    Deletes an image from a registry.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun getAllImageTags(registryUrl: String, imageName: String): List<String>

    Retrieves all image tags for a given registry URL and image name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun getImageDigest(registryUrl: String, imageName: String, tag: String): String?

    Retrieves the digest of a Docker image from a specified registry using the provided image name and tag.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/index.html new file mode 100644 index 00000000..d4233d54 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.docker/index.html @@ -0,0 +1,133 @@ + + + + + no.acntech.easycontainers.docker + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The DockerClientFactory class is responsible for creating a DockerClient instance. It provides a method to create a default DockerClient using the Docker host configuration.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    This object provides utility methods for interacting with a Docker registry.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-access-checker.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-access-checker.html new file mode 100644 index 00000000..da1560d0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-access-checker.html @@ -0,0 +1,80 @@ + + + + + AccessChecker + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AccessChecker

    +
    +
    constructor(client: KubernetesClient)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-a-p-p-s_-g-r-o-u-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-a-p-p-s_-g-r-o-u-p.html new file mode 100644 index 00000000..c270c5c0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-a-p-p-s_-g-r-o-u-p.html @@ -0,0 +1,80 @@ + + + + + APPS_GROUP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    APPS_GROUP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-b-a-t-c-h_-g-r-o-u-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-b-a-t-c-h_-g-r-o-u-p.html new file mode 100644 index 00000000..126a0433 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-b-a-t-c-h_-g-r-o-u-p.html @@ -0,0 +1,80 @@ + + + + + BATCH_GROUP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    BATCH_GROUP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-o-n-f-i-g_-m-a-p-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-o-n-f-i-g_-m-a-p-s.html new file mode 100644 index 00000000..8fa12c8f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-o-n-f-i-g_-m-a-p-s.html @@ -0,0 +1,80 @@ + + + + + CONFIG_MAPS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CONFIG_MAPS

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-r-e-a-t-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-r-e-a-t-e.html new file mode 100644 index 00000000..8425d93c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-r-e-a-t-e.html @@ -0,0 +1,80 @@ + + + + + CREATE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CREATE

    +
    +
    const val CREATE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-f-a-u-l-t_-g-r-o-u-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-f-a-u-l-t_-g-r-o-u-p.html new file mode 100644 index 00000000..67a77249 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-f-a-u-l-t_-g-r-o-u-p.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_GROUP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_GROUP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-l-e-t-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-l-e-t-e.html new file mode 100644 index 00000000..a9326ed5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-l-e-t-e.html @@ -0,0 +1,80 @@ + + + + + DELETE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DELETE

    +
    +
    const val DELETE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-p-l-o-y-m-e-n-t-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-p-l-o-y-m-e-n-t-s.html new file mode 100644 index 00000000..2b910e90 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-p-l-o-y-m-e-n-t-s.html @@ -0,0 +1,80 @@ + + + + + DEPLOYMENTS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEPLOYMENTS

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-g-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-g-e-t.html new file mode 100644 index 00000000..2ccf6cc5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-g-e-t.html @@ -0,0 +1,80 @@ + + + + + GET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GET

    +
    +
    const val GET: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-j-o-b-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-j-o-b-s.html new file mode 100644 index 00000000..06b04056 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-j-o-b-s.html @@ -0,0 +1,80 @@ + + + + + JOBS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    JOBS

    +
    +
    const val JOBS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-l-i-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-l-i-s-t.html new file mode 100644 index 00000000..4aa5f519 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-l-i-s-t.html @@ -0,0 +1,80 @@ + + + + + LIST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LIST

    +
    +
    const val LIST: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-n-a-m-e-s-p-a-c-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-n-a-m-e-s-p-a-c-e.html new file mode 100644 index 00000000..66965d02 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-n-a-m-e-s-p-a-c-e.html @@ -0,0 +1,80 @@ + + + + + NAMESPACE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NAMESPACE

    +
    +
    const val NAMESPACE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d-s.html new file mode 100644 index 00000000..5e271f5b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d-s.html @@ -0,0 +1,80 @@ + + + + + PODS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PODS

    +
    +
    const val PODS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d_-l-o-g-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d_-l-o-g-s.html new file mode 100644 index 00000000..17c2c059 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d_-l-o-g-s.html @@ -0,0 +1,80 @@ + + + + + POD_LOGS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    POD_LOGS

    +
    +
    const val POD_LOGS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-s-e-r-v-i-c-e-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-s-e-r-v-i-c-e-s.html new file mode 100644 index 00000000..be11fd9e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-s-e-r-v-i-c-e-s.html @@ -0,0 +1,80 @@ + + + + + SERVICES + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SERVICES

    +
    +
    const val SERVICES: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-u-p-d-a-t-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-u-p-d-a-t-e.html new file mode 100644 index 00000000..9d117b21 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-u-p-d-a-t-e.html @@ -0,0 +1,80 @@ + + + + + UPDATE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UPDATE

    +
    +
    const val UPDATE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-w-a-t-c-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-w-a-t-c-h.html new file mode 100644 index 00000000..c0177e5b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-w-a-t-c-h.html @@ -0,0 +1,80 @@ + + + + + WATCH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    WATCH

    +
    +
    const val WATCH: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/index.html new file mode 100644 index 00000000..ddec2953 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/index.html @@ -0,0 +1,329 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val APPS_GROUP: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val BATCH_GROUP: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val CONFIG_MAPS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val CREATE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DELETE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DEPLOYMENTS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val GET: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val JOBS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val LIST: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val NAMESPACE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val POD_LOGS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val PODS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val SERVICES: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val UPDATE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val WATCH: String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-config-maps.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-config-maps.html new file mode 100644 index 00000000..41b1e958 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-config-maps.html @@ -0,0 +1,80 @@ + + + + + canCreateConfigMaps + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canCreateConfigMaps

    +
    +
    fun canCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-deployments.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-deployments.html new file mode 100644 index 00000000..396205ac --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-deployments.html @@ -0,0 +1,80 @@ + + + + + canCreateDeployments + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canCreateDeployments

    +
    +
    fun canCreateDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-jobs.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-jobs.html new file mode 100644 index 00000000..17106d44 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-jobs.html @@ -0,0 +1,80 @@ + + + + + canCreateJobs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canCreateJobs

    +
    +
    fun canCreateJobs(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-namespaces.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-namespaces.html new file mode 100644 index 00000000..ec9880b1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-namespaces.html @@ -0,0 +1,80 @@ + + + + + canCreateNamespaces + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canCreateNamespaces

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-services.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-services.html new file mode 100644 index 00000000..5e5b187d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-services.html @@ -0,0 +1,80 @@ + + + + + canCreateServices + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canCreateServices

    +
    +
    fun canCreateServices(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-namespaces.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-namespaces.html new file mode 100644 index 00000000..7d661ca3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-namespaces.html @@ -0,0 +1,80 @@ + + + + + canListNamespaces + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canListNamespaces

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-pods.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-pods.html new file mode 100644 index 00000000..2925da27 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-pods.html @@ -0,0 +1,80 @@ + + + + + canListPods + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canListPods

    +
    +
    fun canListPods(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-deployments.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-deployments.html new file mode 100644 index 00000000..10877242 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-deployments.html @@ -0,0 +1,80 @@ + + + + + canMonitorDeployments + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canMonitorDeployments

    +
    +
    fun canMonitorDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-jobs.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-jobs.html new file mode 100644 index 00000000..90b0fcb7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-jobs.html @@ -0,0 +1,80 @@ + + + + + canMonitorJobs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canMonitorJobs

    +
    +
    fun canMonitorJobs(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-pods.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-pods.html new file mode 100644 index 00000000..292d0a66 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-pods.html @@ -0,0 +1,80 @@ + + + + + canMonitorPods + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canMonitorPods

    +
    +
    fun canMonitorPods(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/index.html new file mode 100644 index 00000000..f627d0df --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/index.html @@ -0,0 +1,427 @@ + + + + + AccessChecker + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AccessChecker

    +
    class AccessChecker(client: KubernetesClient)(source)

    AccessChecker is a class that provides methods to check access permissions for various operations in a Kubernetes cluster.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(client: KubernetesClient)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canCreateDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canCreateJobs(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canCreateServices(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canListPods(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canMonitorDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canMonitorJobs(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun canMonitorPods(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireCreateDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireCreateJobs(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireCreateServices(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireListPods(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireMonitorDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireMonitorJobs(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun requireMonitorPods(namespace: String = DEFAULT_NAMESPACE): Boolean
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-config-maps.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-config-maps.html new file mode 100644 index 00000000..c1447def --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-config-maps.html @@ -0,0 +1,80 @@ + + + + + requireCreateConfigMaps + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireCreateConfigMaps

    +
    +
    fun requireCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-deployments.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-deployments.html new file mode 100644 index 00000000..e962cbcd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-deployments.html @@ -0,0 +1,80 @@ + + + + + requireCreateDeployments + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireCreateDeployments

    +
    +
    fun requireCreateDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-jobs.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-jobs.html new file mode 100644 index 00000000..d30a613e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-jobs.html @@ -0,0 +1,80 @@ + + + + + requireCreateJobs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireCreateJobs

    +
    +
    fun requireCreateJobs(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-namespaces.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-namespaces.html new file mode 100644 index 00000000..b0abd695 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-namespaces.html @@ -0,0 +1,80 @@ + + + + + requireCreateNamespaces + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireCreateNamespaces

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-services.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-services.html new file mode 100644 index 00000000..a419ed4b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-services.html @@ -0,0 +1,80 @@ + + + + + requireCreateServices + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireCreateServices

    +
    +
    fun requireCreateServices(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-namespaces.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-namespaces.html new file mode 100644 index 00000000..df7cbcc3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-namespaces.html @@ -0,0 +1,80 @@ + + + + + requireListNamespaces + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireListNamespaces

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-pods.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-pods.html new file mode 100644 index 00000000..18a598bf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-pods.html @@ -0,0 +1,80 @@ + + + + + requireListPods + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireListPods

    +
    +
    fun requireListPods(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-deployments.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-deployments.html new file mode 100644 index 00000000..edaa4e4c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-deployments.html @@ -0,0 +1,80 @@ + + + + + requireMonitorDeployments + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireMonitorDeployments

    +
    +
    fun requireMonitorDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-jobs.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-jobs.html new file mode 100644 index 00000000..a358a860 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-jobs.html @@ -0,0 +1,80 @@ + + + + + requireMonitorJobs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireMonitorJobs

    +
    +
    fun requireMonitorJobs(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-pods.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-pods.html new file mode 100644 index 00000000..cb7ffc99 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-pods.html @@ -0,0 +1,80 @@ + + + + + requireMonitorPods + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    requireMonitorPods

    +
    +
    fun requireMonitorPods(namespace: String = DEFAULT_NAMESPACE): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/-container-log-streamer.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/-container-log-streamer.html new file mode 100644 index 00000000..9125eafb --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/-container-log-streamer.html @@ -0,0 +1,80 @@ + + + + + ContainerLogStreamer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerLogStreamer

    +
    +
    constructor(podName: String, namespace: String = K8sConstants.DEFAULT_NAMESPACE, client: KubernetesClient = KubernetesClientBuilder().build(), outputLineCallback: OutputLineCallback = OutputLineCallback(::println))(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/index.html new file mode 100644 index 00000000..54edb044 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/index.html @@ -0,0 +1,172 @@ + + + + + ContainerLogStreamer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerLogStreamer

    +
    class ContainerLogStreamer(val podName: String, val namespace: String = K8sConstants.DEFAULT_NAMESPACE, client: KubernetesClient = KubernetesClientBuilder().build(), outputLineCallback: OutputLineCallback = OutputLineCallback(::println)) : Runnable(source)

    Stream logs from a container in a Kubernetes pod. Implements Runnable and can be used in a Thread.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(podName: String, namespace: String = K8sConstants.DEFAULT_NAMESPACE, client: KubernetesClient = KubernetesClientBuilder().build(), outputLineCallback: OutputLineCallback = OutputLineCallback(::println))
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun run()
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun stop()
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/namespace.html new file mode 100644 index 00000000..2643a7f8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/namespace.html @@ -0,0 +1,80 @@ + + + + + namespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    namespace

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/pod-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/pod-name.html new file mode 100644 index 00000000..4dacc157 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/pod-name.html @@ -0,0 +1,80 @@ + + + + + podName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    podName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/run.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/run.html new file mode 100644 index 00000000..26844139 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/run.html @@ -0,0 +1,80 @@ + + + + + run + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    run

    +
    +
    open override fun run()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/stop.html new file mode 100644 index 00000000..a599d255 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    fun stop()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/handle-k8s-exception.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/handle-k8s-exception.html new file mode 100644 index 00000000..d40d6d39 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/handle-k8s-exception.html @@ -0,0 +1,80 @@ + + + + + handleK8sException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    handleK8sException

    +
    +
    fun handleK8sException(e: Exception, log: Logger)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/index.html new file mode 100644 index 00000000..b9b0ac35 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/index.html @@ -0,0 +1,104 @@ + + + + + ErrorSupport + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ErrorSupport

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun handleK8sException(e: Exception, log: Logger)
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/create-default-client.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/create-default-client.html new file mode 100644 index 00000000..8c67ca14 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/create-default-client.html @@ -0,0 +1,80 @@ + + + + + createDefaultClient + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    createDefaultClient

    +
    +
    fun createDefaultClient(): KubernetesClient(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/index.html new file mode 100644 index 00000000..a262a037 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/index.html @@ -0,0 +1,104 @@ + + + + + K8sClientFactory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sClientFactory

    +

    A factory class for creating instances of Kubernetes clients.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun createDefaultClient(): KubernetesClient
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-a-p-p_-l-a-b-e-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-a-p-p_-l-a-b-e-l.html new file mode 100644 index 00000000..eba7940b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-a-p-p_-l-a-b-e-l.html @@ -0,0 +1,80 @@ + + + + + APP_LABEL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    APP_LABEL

    +
    +
    const val APP_LABEL: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-c-l-u-s-t-e-r_-i-p_-d-i-r-e-c-t-i-v-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-c-l-u-s-t-e-r_-i-p_-d-i-r-e-c-t-i-v-e.html new file mode 100644 index 00000000..0ae1936c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-c-l-u-s-t-e-r_-i-p_-d-i-r-e-c-t-i-v-e.html @@ -0,0 +1,80 @@ + + + + + CLUSTER_IP_DIRECTIVE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CLUSTER_IP_DIRECTIVE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-d-e-f-a-u-l-t_-n-a-m-e-s-p-a-c-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-d-e-f-a-u-l-t_-n-a-m-e-s-p-a-c-e.html new file mode 100644 index 00000000..fb28fd29 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-d-e-f-a-u-l-t_-n-a-m-e-s-p-a-c-e.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_NAMESPACE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_NAMESPACE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-h-o-s-t-n-a-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-h-o-s-t-n-a-m-e.html new file mode 100644 index 00000000..362d50de --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-h-o-s-t-n-a-m-e.html @@ -0,0 +1,80 @@ + + + + + ENV_HOSTNAME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ENV_HOSTNAME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-h-o-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-h-o-s-t.html new file mode 100644 index 00000000..7b87c424 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-h-o-s-t.html @@ -0,0 +1,80 @@ + + + + + ENV_KUBERNETES_SERVICE_HOST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ENV_KUBERNETES_SERVICE_HOST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-p-o-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-p-o-r-t.html new file mode 100644 index 00000000..77661445 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-p-o-r-t.html @@ -0,0 +1,80 @@ + + + + + ENV_KUBERNETES_SERVICE_PORT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ENV_KUBERNETES_SERVICE_PORT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-m-e-d-i-u-m_-m-e-m-o-r-y_-b-a-c-k-e-d.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-m-e-d-i-u-m_-m-e-m-o-r-y_-b-a-c-k-e-d.html new file mode 100644 index 00000000..531873af --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-m-e-d-i-u-m_-m-e-m-o-r-y_-b-a-c-k-e-d.html @@ -0,0 +1,80 @@ + + + + + MEDIUM_MEMORY_BACKED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MEDIUM_MEMORY_BACKED

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-d-i-r-e-c-t-i-v-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-d-i-r-e-c-t-i-v-e.html new file mode 100644 index 00000000..b995bdab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-d-i-r-e-c-t-i-v-e.html @@ -0,0 +1,80 @@ + + + + + NODE_PORT_DIRECTIVE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NODE_PORT_DIRECTIVE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-e-n-d.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-e-n-d.html new file mode 100644 index 00000000..956fcff4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-e-n-d.html @@ -0,0 +1,80 @@ + + + + + NODE_PORT_RANGE_END + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NODE_PORT_RANGE_END

    +
    +
    const val NODE_PORT_RANGE_END: Int = 32767(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-s-t-a-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-s-t-a-r-t.html new file mode 100644 index 00000000..dddbb093 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-s-t-a-r-t.html @@ -0,0 +1,80 @@ + + + + + NODE_PORT_RANGE_START + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NODE_PORT_RANGE_START

    +
    +
    const val NODE_PORT_RANGE_START: Int = 30000(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-s-e-r-v-i-c-e_-a-c-c-o-u-n-t_-p-a-t-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-s-e-r-v-i-c-e_-a-c-c-o-u-n-t_-p-a-t-h.html new file mode 100644 index 00000000..1ad28f3b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-s-e-r-v-i-c-e_-a-c-c-o-u-n-t_-p-a-t-h.html @@ -0,0 +1,80 @@ + + + + + SERVICE_ACCOUNT_PATH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SERVICE_ACCOUNT_PATH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/index.html new file mode 100644 index 00000000..90ddf083 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/index.html @@ -0,0 +1,254 @@ + + + + + K8sConstants + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sConstants

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val APP_LABEL: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val ENV_HOSTNAME: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val NODE_PORT_RANGE_END: Int = 32767
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val NODE_PORT_RANGE_START: Int = 30000
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/-k8s-job-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/-k8s-job-runtime.html new file mode 100644 index 00000000..b1a0f997 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/-k8s-job-runtime.html @@ -0,0 +1,80 @@ + + + + + K8sJobRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sJobRuntime

    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/index.html new file mode 100644 index 00000000..6ca7ae73 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/index.html @@ -0,0 +1,213 @@ + + + + + K8sJobRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sJobRuntime

    +
    class K8sJobRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : K8sRuntime(source)

    Represents a Kubernetes Job runtime for a given container.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun delete(force: Boolean)

    Deletes the container with an optional force flag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getContainer(): Container

    Retrieves the container associated with the runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the (first) Kubernetes container associated with the (first) pod.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getType(): ContainerPlatformType

    Retrieves the type of the container platform.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun kill()

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun start()

    Starts the execution of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun stop()

    Stop the job by deleting the Kubernetes Job resource.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/start.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/start.html new file mode 100644 index 00000000..3f328ba0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/start.html @@ -0,0 +1,80 @@ + + + + + start + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    start

    +
    +
    open override fun start()(source)

    Starts the execution of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/stop.html new file mode 100644 index 00000000..0b80ba64 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    open override fun stop()(source)

    Stop the job by deleting the Kubernetes Job resource.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-f-i-g_-m-a-p_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-f-i-g_-m-a-p_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..0048bb5e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-f-i-g_-m-a-p_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + CONFIG_MAP_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CONFIG_MAP_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-t-a-i-n-e-r_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-t-a-i-n-e-r_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..6d4fe852 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-t-a-i-n-e-r_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + CONTAINER_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CONTAINER_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-d-e-p-l-o-y-m-e-n-t_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-d-e-p-l-o-y-m-e-n-t_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..5bdef68b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-d-e-p-l-o-y-m-e-n-t_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + DEPLOYMENT_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEPLOYMENT_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-o-d_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-o-d_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..b32b054b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-o-d_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + POD_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    POD_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v-c_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v-c_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..c83291b8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v-c_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + PVC_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PVC_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..d3da287d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + PV_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PV_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-s-e-r-v-i-c-e_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-s-e-r-v-i-c-e_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..4f4b9225 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-s-e-r-v-i-c-e_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + SERVICE_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SERVICE_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-v-o-l-u-m-e_-n-a-m-e_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-v-o-l-u-m-e_-n-a-m-e_-s-u-f-f-i-x.html new file mode 100644 index 00000000..63214c69 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-v-o-l-u-m-e_-n-a-m-e_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + VOLUME_NAME_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    VOLUME_NAME_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/index.html new file mode 100644 index 00000000..9890110d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/index.html @@ -0,0 +1,209 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-k8s-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-k8s-runtime.html new file mode 100644 index 00000000..22cb30f4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-k8s-runtime.html @@ -0,0 +1,80 @@ + + + + + K8sRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sRuntime

    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/delete.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/delete.html new file mode 100644 index 00000000..fb42785a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/delete.html @@ -0,0 +1,80 @@ + + + + + delete + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    delete

    +
    +
    open override fun delete(force: Boolean)(source)

    Deletes the container with an optional force flag.

    Parameters

    force

    if true, force the deletion of the container (default is false)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-name.html new file mode 100644 index 00000000..2bb1464e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-name.html @@ -0,0 +1,80 @@ + + + + + getName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getName

    +
    +
    open override fun getName(): ContainerName(source)

    Returns the name of the (first) Kubernetes container associated with the (first) pod.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-type.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-type.html new file mode 100644 index 00000000..89f95c13 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-type.html @@ -0,0 +1,80 @@ + + + + + getType + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getType

    +
    +
    open override fun getType(): ContainerPlatformType(source)

    Retrieves the type of the container platform.

    Return

    the type of the container platform as a ContainerPlatformType enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/index.html new file mode 100644 index 00000000..6d6d013e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/index.html @@ -0,0 +1,232 @@ + + + + + K8sRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sRuntime

    +
    abstract class K8sRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : AbstractContainerRuntime(source)

    Represents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both Kubernetes Jobs and Deployments.

    Inheritors

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun delete(force: Boolean)

    Deletes the container with an optional force flag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getContainer(): Container

    Retrieves the container associated with the runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the (first) Kubernetes container associated with the (first) pod.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getType(): ContainerPlatformType

    Retrieves the type of the container platform.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun kill()

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun start()

    Starts the execution of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun stop()

    Stops the container runtime.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/start.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/start.html new file mode 100644 index 00000000..aa50eabc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/start.html @@ -0,0 +1,80 @@ + + + + + start + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    start

    +
    +
    open override fun start()(source)

    Starts the execution of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/stop.html new file mode 100644 index 00000000..a8baebd5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    open override fun stop()(source)

    Stops the container runtime.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/-k8s-service-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/-k8s-service-runtime.html new file mode 100644 index 00000000..05ddb571 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/-k8s-service-runtime.html @@ -0,0 +1,80 @@ + + + + + K8sServiceRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sServiceRuntime

    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/index.html new file mode 100644 index 00000000..70cf2fee --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/index.html @@ -0,0 +1,213 @@ + + + + + K8sServiceRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sServiceRuntime

    +
    class K8sServiceRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : K8sRuntime(source)

    Represents a Kubernetes service runtime that deploys and manages a container and associated resources.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient())
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun delete(force: Boolean)

    Deletes the container with an optional force flag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getContainer(): Container

    Retrieves the container associated with the runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the (first) Kubernetes container associated with the (first) pod.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getType(): ContainerPlatformType

    Retrieves the type of the container platform.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun kill()

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun start()

    Starts the execution of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun stop()

    Stops the container runtime.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/kill.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/kill.html new file mode 100644 index 00000000..2c9c9d08 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/kill.html @@ -0,0 +1,80 @@ + + + + + kill + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    kill

    +
    +
    open override fun kill()(source)

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/stop.html new file mode 100644 index 00000000..fd268484 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    open override fun stop()(source)

    Stops the container runtime.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/can-access-cluster-a-p-i.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/can-access-cluster-a-p-i.html new file mode 100644 index 00000000..afdd27b6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/can-access-cluster-a-p-i.html @@ -0,0 +1,80 @@ + + + + + canAccessClusterAPI + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    canAccessClusterAPI

    +
    +

    Checks if the current user has access to the Cluster API.

    Return

    true if the user has access to the Cluster API, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/index.html new file mode 100644 index 00000000..194c1bfa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/index.html @@ -0,0 +1,239 @@ + + + + + K8sUtils + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    K8sUtils

    +

    Object representing utility functions for interacting with Kubernetes cluster.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the current user has access to the Cluster API.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts an Instant to a legal label value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given label key is legal.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given value is a legal label value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks whether the current application is running inside a cluster.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the application is running outside of a cluster.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Normalizes the given label key by separating the prefix and name if a forward slash is present, normalizing the prefix and name by replacing invalid label characters with hyphens, removing multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, and converting the prefix and name to lowercase. The normalized label key is then constructed by concatenating the normalized prefix and name, separated by a forward slash if the prefix is not empty.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Normalizes the given label value by replacing invalid characters, removing multiple hyphens, trimming leading and trailing hyphens and underscores, and limiting the length to MAX_LABEL_LENGTH.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/instant-to-label-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/instant-to-label-value.html new file mode 100644 index 00000000..f6d26713 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/instant-to-label-value.html @@ -0,0 +1,80 @@ + + + + + instantToLabelValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    instantToLabelValue

    +
    +

    Converts an Instant to a legal label value.

    Return

    The label value representation of the Instant.

    Parameters

    instant

    The Instant to convert to a label value.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-key.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-key.html new file mode 100644 index 00000000..5b0941ef --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-key.html @@ -0,0 +1,80 @@ + + + + + isLegalLabelKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isLegalLabelKey

    +
    +

    Checks if the given label key is legal.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-value.html new file mode 100644 index 00000000..e3ab4a27 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-value.html @@ -0,0 +1,80 @@ + + + + + isLegalLabelValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isLegalLabelValue

    +
    +

    Checks if the given value is a legal label value.

    Return

    true if the value is a legal label value, false otherwise

    Parameters

    value

    the value to be checked

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-inside-cluster.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-inside-cluster.html new file mode 100644 index 00000000..25374ff4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-inside-cluster.html @@ -0,0 +1,80 @@ + + + + + isRunningInsideCluster + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isRunningInsideCluster

    +
    +

    Checks whether the current application is running inside a cluster.

    Return

    True if the application is running inside a cluster, False otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-outside-cluster.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-outside-cluster.html new file mode 100644 index 00000000..4873a44b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-outside-cluster.html @@ -0,0 +1,80 @@ + + + + + isRunningOutsideCluster + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isRunningOutsideCluster

    +
    +

    Checks if the application is running outside of a cluster.

    Return

    true if the application is running outside of a cluster, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-config-map-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-config-map-name.html new file mode 100644 index 00000000..14689090 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-config-map-name.html @@ -0,0 +1,80 @@ + + + + + normalizeConfigMapName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    normalizeConfigMapName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-key.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-key.html new file mode 100644 index 00000000..226aeb84 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-key.html @@ -0,0 +1,80 @@ + + + + + normalizeLabelKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    normalizeLabelKey

    +
    +

    Normalizes the given label key by separating the prefix and name if a forward slash is present, normalizing the prefix and name by replacing invalid label characters with hyphens, removing multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, and converting the prefix and name to lowercase. The normalized label key is then constructed by concatenating the normalized prefix and name, separated by a forward slash if the prefix is not empty.

    Return

    The normalized label key.

    Parameters

    labelKey

    The label key to be normalized.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-value.html new file mode 100644 index 00000000..e0c30c29 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-value.html @@ -0,0 +1,80 @@ + + + + + normalizeLabelValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    normalizeLabelValue

    +
    +

    Normalizes the given label value by replacing invalid characters, removing multiple hyphens, trimming leading and trailing hyphens and underscores, and limiting the length to MAX_LABEL_LENGTH.

    Return

    The normalized label value.

    Parameters

    value

    The label value to normalize.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-volume-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-volume-name.html new file mode 100644 index 00000000..2e5c6686 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-volume-name.html @@ -0,0 +1,80 @@ + + + + + normalizeVolumeName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    normalizeVolumeName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-f-a-i-l-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-f-a-i-l-e-d/index.html new file mode 100644 index 00000000..d5fa6ef2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-f-a-i-l-e-d/index.html @@ -0,0 +1,119 @@ + + + + + FAILED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FAILED

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-p-e-n-d-i-n-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-p-e-n-d-i-n-g/index.html new file mode 100644 index 00000000..44838f1c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-p-e-n-d-i-n-g/index.html @@ -0,0 +1,119 @@ + + + + + PENDING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PENDING

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-r-u-n-n-i-n-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-r-u-n-n-i-n-g/index.html new file mode 100644 index 00000000..0bbce0da --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-r-u-n-n-i-n-g/index.html @@ -0,0 +1,119 @@ + + + + + RUNNING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RUNNING

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-s-u-c-c-e-e-d-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-s-u-c-c-e-e-d-e-d/index.html new file mode 100644 index 00000000..44641de7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-s-u-c-c-e-e-d-e-d/index.html @@ -0,0 +1,119 @@ + + + + + SUCCEEDED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SUCCEEDED

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-u-n-k-n-o-w-n/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-u-n-k-n-o-w-n/index.html new file mode 100644 index 00000000..6e57da73 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-u-n-k-n-o-w-n/index.html @@ -0,0 +1,119 @@ + + + + + UNKNOWN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UNKNOWN

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/entries.html new file mode 100644 index 00000000..ffb55256 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/index.html new file mode 100644 index 00000000..ff0005ca --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/index.html @@ -0,0 +1,247 @@ + + + + + PodPhase + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PodPhase

    +

    Represents the different phases of a pod in a Kubernetes cluster.

    +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun valueOf(value: String): PodPhase

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/value-of.html new file mode 100644 index 00000000..6345e0f5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/values.html new file mode 100644 index 00000000..1419bf91 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/index.html new file mode 100644 index 00000000..640b8ff2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.kubernetes/index.html @@ -0,0 +1,238 @@ + + + + + no.acntech.easycontainers.kubernetes + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class AccessChecker(client: KubernetesClient)

    AccessChecker is a class that provides methods to check access permissions for various operations in a Kubernetes cluster.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class ContainerLogStreamer(val podName: String, val namespace: String = K8sConstants.DEFAULT_NAMESPACE, client: KubernetesClient = KubernetesClientBuilder().build(), outputLineCallback: OutputLineCallback = OutputLineCallback(::println)) : Runnable

    Stream logs from a container in a Kubernetes pod. Implements Runnable and can be used in a Thread.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    A factory class for creating instances of Kubernetes clients.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class K8sJobRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : K8sRuntime

    Represents a Kubernetes Job runtime for a given container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract class K8sRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : AbstractContainerRuntime

    Represents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both Kubernetes Jobs and Deployments.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class K8sServiceRuntime(container: GenericContainer, client: KubernetesClient = K8sClientFactory.createDefaultClient()) : K8sRuntime

    Represents a Kubernetes service runtime that deploys and manages a container and associated resources.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object K8sUtils

    Object representing utility functions for interacting with Kubernetes cluster.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Represents the different phases of a pod in a Kubernetes cluster.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/compare-to.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/compare-to.html new file mode 100644 index 00000000..e27f60f1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/compare-to.html @@ -0,0 +1,80 @@ + + + + + compareTo + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    compareTo

    +
    +
    open operator override fun compareTo(other: SimpleValueObject<P>): Int(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/index.html new file mode 100644 index 00000000..ad665277 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/index.html @@ -0,0 +1,119 @@ + + + + + SimpleValueObject + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SimpleValueObject

    +

    A DDD ValueObject holding a single value. The unwrap method can e.g. assist in mapping the SimpleValueObject to a DTO or to a repository object.

    The SimpleValueObject would normally restrict the underlying value using domain specific rules - e.g. applying range restrictions (for numbers), non-null, non-blank and length restrictions for Strings, etc.

    A SimpleValueObject is usually constructed using a single-argument constructor or (even better) with a static of(P p) method - or both.

    Inheritors

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<P>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun unwrap(): P
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/unwrap.html new file mode 100644 index 00000000..ee05f843 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    abstract fun unwrap(): P(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-value-object/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-value-object/index.html new file mode 100644 index 00000000..6d40bca7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/-value-object/index.html @@ -0,0 +1,89 @@ + + + + + ValueObject + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ValueObject

    +
    interface ValueObject(source)

    Marker interface for DDD Value Objects (domain primitives) - see e.g. https://en.wikipedia.org/wiki/Value_object. A ValueObject must be final, pre-validated (before or during construction) and immutable.

    +Some articles with more in-depth explanation of value objects and their importance in software design:
    +

      +
    • https://freecontent.manning.com/domain-primitives-what-they-are-and-how-you-can-use-them-to-make-more-secure-software/
    • +
    • https://medium.com/@edin.sahbaz/the-pitfalls-of-primitive-obsession-an-insight-into-code-quality-using-net-c-b1898bcffb4d
    • +

    Inheritors

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/index.html new file mode 100644 index 00000000..58e433d6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model.base/index.html @@ -0,0 +1,118 @@ + + + + + no.acntech.easycontainers.model.base + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    A DDD ValueObject holding a single value. The unwrap method can e.g. assist in mapping the SimpleValueObject to a DTO or to a repository object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    interface ValueObject

    Marker interface for DDD Value Objects (domain primitives) - see e.g. https://en.wikipedia.org/wiki/Value_object. A ValueObject must be final, pre-validated (before or during construction) and immutable.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-arg.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-arg.html new file mode 100644 index 00000000..3f7c70b7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-arg.html @@ -0,0 +1,80 @@ + + + + + Arg + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Arg

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/index.html new file mode 100644 index 00000000..99064700 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): Arg
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/of.html new file mode 100644 index 00000000..468d5824 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Arg(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/index.html new file mode 100644 index 00000000..9fa97d12 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/index.html @@ -0,0 +1,191 @@ + + + + + Arg + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Arg

    +
    value class Arg(val value: String) : SimpleValueObject<String> (source)

    Value object representing a kubernetes/docker command argument.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/to-string.html new file mode 100644 index 00000000..27f45d4c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/unwrap.html new file mode 100644 index 00000000..e3f496e8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/value.html new file mode 100644 index 00000000..2dec5f51 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-arg/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-args.html new file mode 100644 index 00000000..b60844ec --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-args.html @@ -0,0 +1,80 @@ + + + + + Args + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Args

    +
    +
    constructor(args: List<Arg>)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/index.html new file mode 100644 index 00000000..eeb4d0a3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/index.html @@ -0,0 +1,119 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(vararg values: String): Args
    fun of(values: List<String>): Args
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Creates an Args object from a whitespace separated string. Note that this wont work for arguments containing spaces/whites.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of-white-space-separated.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of-white-space-separated.html new file mode 100644 index 00000000..e158ea6e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of-white-space-separated.html @@ -0,0 +1,80 @@ + + + + + ofWhiteSpaceSeparated + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ofWhiteSpaceSeparated

    +
    +

    Creates an Args object from a whitespace separated string. Note that this wont work for arguments containing spaces/whites.

    Return

    The Args object.

    Parameters

    value

    The whitespace separated string to create the Args object from.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of.html new file mode 100644 index 00000000..2eff3bab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(values: List<String>): Args(source)
    fun of(vararg values: String): Args(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/args.html new file mode 100644 index 00000000..2b6f88d5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/args.html @@ -0,0 +1,80 @@ + + + + + args + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    args

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/index.html new file mode 100644 index 00000000..1347470f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/index.html @@ -0,0 +1,176 @@ + + + + + Args + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Args

    +
    data class Args(val args: List<Arg>)(source)

    Value object representing a list of kubernetes/docker command arguments.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(args: List<Arg>)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val args: List<Arg>
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string-list.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string-list.html new file mode 100644 index 00000000..4e717e53 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string-list.html @@ -0,0 +1,80 @@ + + + + + toStringList + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toStringList

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string.html new file mode 100644 index 00000000..79a6a938 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-args/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-c-p-u.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-c-p-u.html new file mode 100644 index 00000000..83d8fdd6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-c-p-u.html @@ -0,0 +1,80 @@ + + + + + CPU + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CPU

    +
    +
    constructor(value: Double)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/-m-i-l-l-i_-c-p-u_-s-u-f-f-i-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/-m-i-l-l-i_-c-p-u_-s-u-f-f-i-x.html new file mode 100644 index 00000000..9cf03a78 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/-m-i-l-l-i_-c-p-u_-s-u-f-f-i-x.html @@ -0,0 +1,80 @@ + + + + + MILLI_CPU_SUFFIX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MILLI_CPU_SUFFIX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/index.html new file mode 100644 index 00000000..1f3b2adf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/index.html @@ -0,0 +1,123 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: Double): CPU
    fun of(value: String): CPU
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/of.html new file mode 100644 index 00000000..84efc58f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): CPU(source)
    fun of(value: Double): CPU(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/index.html new file mode 100644 index 00000000..03add68e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/index.html @@ -0,0 +1,191 @@ + + + + + CPU + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CPU

    +
    value class CPU(val value: Double) : SimpleValueObject<Double> (source)

    Value object representing a kubernetes/docker cpu request or limit.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: Double)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<Double>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): Double
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/to-string.html new file mode 100644 index 00000000..23cda7da --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/unwrap.html new file mode 100644 index 00000000..fefd6d03 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): Double(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/value.html new file mode 100644 index 00000000..3822ced8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-c-p-u/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/build.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/build.html new file mode 100644 index 00000000..1bbeed5f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/build.html @@ -0,0 +1,80 @@ + + + + + build + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    build

    +
    +
    abstract fun build(): Container(source)

    This method is used to build a Container object.

    Return

    A Container object after building it.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/index.html new file mode 100644 index 00000000..a2b722ce --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/index.html @@ -0,0 +1,449 @@ + + + + + ContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerBuilder

    +

    A builder interface for creating container configurations.

    Parameters

    SELF

    The type of the builder itself.

    Inheritors

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun build(): Container

    This method is used to build a Container object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withArgs(args: List<String>): SELF

    Sets the arguments for the container.

    abstract fun withArgs(args: Args): SELF

    Sets the command arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withCommand(command: String): SELF
    abstract fun withCommand(command: Executable): SELF

    Sets the command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withContainerFile(file: ContainerFile): SELF
    open fun withContainerFile(name: String, mountPath: String, content: String): SELF
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): SELF

    open fun withContainerFile(name: ContainerFileName, path: UnixDir, content: String): SELF

    Adds a file to the container with the specified name, path, and content.

    open fun withContainerFile(name: ContainerFileName, path: UnixDir, data: Map<String, String>, keyValSeparator: String = ""): SELF

    Adds a container file to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withCpuLimit(cpuLimit: Double): SELF
    open fun withCpuLimit(cpuLimit: String): SELF
    abstract fun withCpuLimit(cpuLimit: CPU): SELF

    Sets the CPU limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withCpuRequest(cpuRequest: Double): SELF
    open fun withCpuRequest(cpuRequest: String): SELF
    abstract fun withCpuRequest(cpuRequest: CPU): SELF

    Sets the CPU request for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withCustomProperty(key: String, value: Any): SELF

    Adds a custom property to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withEnv(env: Map<EnvVarKey, EnvVarValue>): SELF

    Sets the environment variables for the container.

    open fun withEnv(key: String, value: String): SELF

    Adds an environment variable with the specified key and value.

    abstract fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF

    Sets an environment variable with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withExecutionMode(executionMode: ExecutionMode): SELF

    Sets the execution mode for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withExposedPort(name: String, port: Int): SELF

    Sets the exposed port for the container by specifying the name and port number.

    abstract fun withExposedPort(name: PortMappingName, port: NetworkPort): SELF

    Adds an exposed port to the container configuration.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withImage(image: String): SELF

    Sets the image for the container using the given image URL.

    abstract fun withImage(image: ImageURL): SELF

    Set the image to use for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withIsEphemeral(ephemeral: Boolean): SELF

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withLabel(key: String, value: String): SELF

    Adds a label with the provided key-value pair to the container.

    abstract fun withLabel(key: LabelKey, value: LabelValue): SELF

    Adds a label to the container with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withMaxLifeTime(maxLifeTime: Duration): SELF
    open fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF

    Sets the maximum lifetime for the container.

    open fun withMaxLifeTime(value: Long, unit: TimeUnit): SELF

    Sets the maximum life time for the object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withMemoryLimit(memoryLimit: BigInteger): SELF

    Sets the memory limit for the container in bytes.

    open fun withMemoryLimit(memoryLimit: Long): SELF

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    open fun withMemoryLimit(memoryLimit: String): SELF

    Sets the memory limit for the current operation.

    abstract fun withMemoryLimit(memoryLimit: Memory): SELF

    Sets the memory limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withMemoryRequest(memoryRequest: BigInteger): SELF

    Sets the memory request for the container.

    open fun withMemoryRequest(memoryRequest: String): SELF

    Performs the task with the given memory request.

    abstract fun withMemoryRequest(memoryRequest: Memory): SELF
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withName(name: String): SELF

    Sets the name of the container.

    abstract fun withName(name: ContainerName): SELF

    Returns a new instance of the container object with the specified name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withNamespace(namespace: String): SELF

    Sets the namespace for the container.

    abstract fun withNamespace(namespace: Namespace): SELF

    Sets the namespace for the ContainerBuilder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withNetworkName(networkName: String): SELF
    abstract fun withNetworkName(networkName: NetworkName): SELF

    Sets the network name for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF

    Sets the line callback for logging purposes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withPortMapping(port: Int, mappedPort: Int): SELF

    Sets the port mapping for the container.

    abstract fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF

    Maps a container exposed network port to another network port.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun withVolume(volume: Volume): SELF

    Sets the volume for the container.

    open fun withVolume(name: String, mountPath: String): SELF

    open fun withVolume(name: VolumeName, mountPath: UnixDir): SELF

    Sets the volume name and mount path for the current instance of the object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-args.html new file mode 100644 index 00000000..b19e9847 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-args.html @@ -0,0 +1,80 @@ + + + + + withArgs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withArgs

    +
    +
    abstract fun withArgs(args: Args): SELF(source)

    Sets the command arguments for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    args

    The command arguments to be set for the container.


    open fun withArgs(args: List<String>): SELF(source)

    Sets the arguments for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    args

    the arguments as an instance of Args.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-command.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-command.html new file mode 100644 index 00000000..945f6e86 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-command.html @@ -0,0 +1,80 @@ + + + + + withCommand + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCommand

    +
    +
    abstract fun withCommand(command: Executable): SELF(source)

    Sets the command for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    command

    the executable command to be set


    open fun withCommand(command: String): SELF(source)

    Sets the command for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    command

    the command to be set for the container

    See also

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html new file mode 100644 index 00000000..74671ef3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html @@ -0,0 +1,80 @@ + + + + + withContainerFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withContainerFile

    +
    +
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): SELF(source)
    open fun withContainerFile(name: String, mountPath: String, content: String): SELF(source)


    open fun withContainerFile(name: ContainerFileName, path: UnixDir, data: Map<String, String>, keyValSeparator: String = ""): SELF(source)

    Adds a container file to the builder.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    The name of the file in the container

    path

    The path in the container where the file will be mounted.

    data

    The content of the file as a key-value map

    keyValSeparator

    The separator between the key and value in the content of the file (default is ": ")


    open fun withContainerFile(name: ContainerFileName, path: UnixDir, content: String): SELF(source)

    Adds a file to the container with the specified name, path, and content.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    The name of the file in the container

    path

    The path in the container where the file will be mounted.

    content

    The content of the file

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-platform-type.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-platform-type.html new file mode 100644 index 00000000..2b862aa5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-platform-type.html @@ -0,0 +1,80 @@ + + + + + withContainerPlatformType + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withContainerPlatformType

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html new file mode 100644 index 00000000..550ce566 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html @@ -0,0 +1,80 @@ + + + + + withCpuLimit + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCpuLimit

    +
    +
    abstract fun withCpuLimit(cpuLimit: CPU): SELF(source)

    Sets the CPU limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuLimit

    The CPU limit to be set for the container.


    open fun withCpuLimit(cpuLimit: Double): SELF(source)

    Sets the CPU limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuLimit

    The CPU limit as a CPU object.


    open fun withCpuLimit(cpuLimit: String): SELF(source)

    Sets the CPU limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuLimit

    The CPU limit to set for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html new file mode 100644 index 00000000..393d2d3d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html @@ -0,0 +1,80 @@ + + + + + withCpuRequest + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCpuRequest

    +
    +
    abstract fun withCpuRequest(cpuRequest: CPU): SELF(source)

    Sets the CPU request for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuRequest

    The CPU request for the container.


    open fun withCpuRequest(cpuRequest: Double): SELF(source)
    open fun withCpuRequest(cpuRequest: String): SELF(source)

    Sets the CPU request for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuRequest

    the CPU request for the container

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-custom-property.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-custom-property.html new file mode 100644 index 00000000..726145ba --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-custom-property.html @@ -0,0 +1,80 @@ + + + + + withCustomProperty + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCustomProperty

    +
    +
    abstract fun withCustomProperty(key: String, value: Any): SELF(source)

    Adds a custom property to the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    the key of the custom property

    value

    the value of the custom property

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env-as-string-map.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env-as-string-map.html new file mode 100644 index 00000000..ad091cf4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env-as-string-map.html @@ -0,0 +1,80 @@ + + + + + withEnvAsStringMap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withEnvAsStringMap

    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    Return

    The updated ContainerBuilder instance.

    Parameters

    env

    the environment variables as a map of string key-value pairs

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html new file mode 100644 index 00000000..87bb28f5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html @@ -0,0 +1,80 @@ + + + + + withEnv + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withEnv

    +
    +
    open fun withEnv(key: String, value: String): SELF(source)

    Adds an environment variable with the specified key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    The key of the environment variable.

    value

    The value of the environment variable.


    abstract fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF(source)

    Sets an environment variable with the given key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    The key of the environment variable.

    value

    The value of the environment variable.


    abstract fun withEnv(env: Map<EnvVarKey, EnvVarValue>): SELF(source)

    Sets the environment variables for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    env

    a map containing the environment variable keys and values

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-execution-mode.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-execution-mode.html new file mode 100644 index 00000000..54b96d4a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-execution-mode.html @@ -0,0 +1,80 @@ + + + + + withExecutionMode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withExecutionMode

    +
    +
    abstract fun withExecutionMode(executionMode: ExecutionMode): SELF(source)

    Sets the execution mode for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    executionMode

    The execution mode to be set.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-exposed-port.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-exposed-port.html new file mode 100644 index 00000000..4c6b44d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-exposed-port.html @@ -0,0 +1,80 @@ + + + + + withExposedPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withExposedPort

    +
    +

    Adds an exposed port to the container configuration.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    The name of the port mapping.

    port

    The network port to expose.


    open fun withExposedPort(name: String, port: Int): SELF(source)

    Sets the exposed port for the container by specifying the name and port number.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    the name of the port mapping

    port

    the port number to expose

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-image.html new file mode 100644 index 00000000..08412a34 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-image.html @@ -0,0 +1,80 @@ + + + + + withImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withImage

    +
    +
    abstract fun withImage(image: ImageURL): SELF(source)

    Set the image to use for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    image

    The image to use for the container.


    open fun withImage(image: String): SELF(source)

    Sets the image for the container using the given image URL.

    Return

    The updated ContainerBuilder instance.

    Parameters

    image

    the image URL to set for the container

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-is-ephemeral.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-is-ephemeral.html new file mode 100644 index 00000000..b642dcbf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-is-ephemeral.html @@ -0,0 +1,80 @@ + + + + + withIsEphemeral + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withIsEphemeral

    +
    +
    abstract fun withIsEphemeral(ephemeral: Boolean): SELF(source)

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    Parameters

    ephemeral

    The ephemeral flag to be set.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-label.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-label.html new file mode 100644 index 00000000..ee724c89 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-label.html @@ -0,0 +1,80 @@ + + + + + withLabel + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withLabel

    +
    +
    abstract fun withLabel(key: LabelKey, value: LabelValue): SELF(source)

    Adds a label to the container with the given key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    the key of the label

    value

    the value of the label


    open fun withLabel(key: String, value: String): SELF(source)

    Adds a label with the provided key-value pair to the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    the label key

    value

    the label value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html new file mode 100644 index 00000000..67adac8e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html @@ -0,0 +1,80 @@ + + + + + withMaxLifeTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMaxLifeTime

    +
    +
    abstract fun withMaxLifeTime(maxLifeTime: Duration): SELF(source)

    Sets the maximum lifetime for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    maxLifeTime

    The maximum lifetime of the container.


    open fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF(source)

    Sets the maximum lifetime for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    value

    The value of the maximum lifetime.

    unit

    The unit of time for the maximum lifetime.


    open fun withMaxLifeTime(value: Long, unit: TimeUnit): SELF(source)

    Sets the maximum life time for the object.

    Return

    this object with the maximum lifetime set

    Parameters

    value

    the value of the maximum lifetime

    unit

    the time unit of the maximum lifetime

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html new file mode 100644 index 00000000..3319e369 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html @@ -0,0 +1,80 @@ + + + + + withMemoryLimit + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMemoryLimit

    +
    +
    abstract fun withMemoryLimit(memoryLimit: Memory): SELF(source)

    Sets the memory limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryLimit

    The memory limit to set for the container.


    open fun withMemoryLimit(memoryLimit: String): SELF(source)

    Sets the memory limit for the current operation.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryLimit

    the memory limit to be set. The memory limit should be specified as a string, representing the amount of memory in a human-readable format. For example, "1G" represents 1 gigabyte, "2M" represents 2 megabytes.


    open fun withMemoryLimit(memoryLimit: BigInteger): SELF(source)

    Sets the memory limit for the container in bytes.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryLimit

    The memory limit for the container as a BigInteger.


    open fun withMemoryLimit(memoryLimit: Long): SELF(source)

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryLimit

    The memory limit for the container as a long.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html new file mode 100644 index 00000000..a75703d2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html @@ -0,0 +1,80 @@ + + + + + withMemoryRequest + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMemoryRequest

    +
    +
    abstract fun withMemoryRequest(memoryRequest: Memory): SELF(source)


    open fun withMemoryRequest(memoryRequest: String): SELF(source)

    Performs the task with the given memory request.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryRequest

    The memory request to be used.


    open fun withMemoryRequest(memoryRequest: BigInteger): SELF(source)

    Sets the memory request for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryRequest

    the memory request to be set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-name.html new file mode 100644 index 00000000..4dc2feba --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-name.html @@ -0,0 +1,80 @@ + + + + + withName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withName

    +
    +
    abstract fun withName(name: ContainerName): SELF(source)

    Returns a new instance of the container object with the specified name.

    Return

    a new instance of the container object with the specified name

    Parameters

    name

    the name of the container


    open fun withName(name: String): SELF(source)

    Sets the name of the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    The name of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-namespace.html new file mode 100644 index 00000000..90b5a33e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-namespace.html @@ -0,0 +1,80 @@ + + + + + withNamespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withNamespace

    +
    +
    abstract fun withNamespace(namespace: Namespace): SELF(source)

    Sets the namespace for the ContainerBuilder.

    Return

    The updated ContainerBuilder instance.

    Parameters

    namespace

    The namespace to set.


    open fun withNamespace(namespace: String): SELF(source)

    Sets the namespace for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    namespace

    The namespace to set for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-network-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-network-name.html new file mode 100644 index 00000000..27c8044d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-network-name.html @@ -0,0 +1,80 @@ + + + + + withNetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withNetworkName

    +
    +
    abstract fun withNetworkName(networkName: NetworkName): SELF(source)

    Sets the network name for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    networkName

    the network name to set


    open fun withNetworkName(networkName: String): SELF(source)

    Sets the network name for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    networkName

    the name of the network to be set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-output-line-callback.html new file mode 100644 index 00000000..9563a04d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + withOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withOutputLineCallback

    +
    +
    abstract fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF(source)

    Sets the line callback for logging purposes.

    Return

    The updated ContainerBuilder instance.

    Parameters

    outputLineCallback

    The line callback to be used for logging.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-port-mapping.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-port-mapping.html new file mode 100644 index 00000000..e7135e24 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-port-mapping.html @@ -0,0 +1,80 @@ + + + + + withPortMapping + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withPortMapping

    +
    +
    abstract fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF(source)

    Maps a container exposed network port to another network port.

    Return

    The updated ContainerBuilder instance.

    Parameters

    port

    The network port to be mapped.

    mappedPort

    The mapped network port.

    Throws

    if the port is not exposed.


    open fun withPortMapping(port: Int, mappedPort: Int): SELF(source)

    Sets the port mapping for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    port

    The port of the container.

    mappedPort

    The mapped port for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html new file mode 100644 index 00000000..25f2407c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html @@ -0,0 +1,80 @@ + + + + + withVolume + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withVolume

    +
    +
    open fun withVolume(name: String, mountPath: String): SELF(source)


    open fun withVolume(name: VolumeName, mountPath: UnixDir): SELF(source)

    Sets the volume name and mount path for the current instance of the object.

    Return

    An instance of the object with the volume name and mount path set.

    Parameters

    name

    The name of the volume to be set.

    mountPath

    The mount path to be set as the mount point for the volume.


    abstract fun withVolume(volume: Volume): SELF(source)

    Sets the volume for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    volume

    The volume to be added or mapped into the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/index.html new file mode 100644 index 00000000..348ca601 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/of.html new file mode 100644 index 00000000..f1f09c0a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-container-file-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-container-file-name.html new file mode 100644 index 00000000..b142abfc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/-container-file-name.html @@ -0,0 +1,80 @@ + + + + + ContainerFileName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerFileName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/index.html new file mode 100644 index 00000000..932bdd6b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/index.html @@ -0,0 +1,191 @@ + + + + + ContainerFileName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerFileName

    +

    Value object representing a file name for a file to be added or mapped into a container.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/to-string.html new file mode 100644 index 00000000..ade27a52 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/unwrap.html new file mode 100644 index 00000000..92da82e5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/value.html new file mode 100644 index 00000000..b3646a25 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/-container-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/-container-file.html new file mode 100644 index 00000000..c39d75b4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/-container-file.html @@ -0,0 +1,80 @@ + + + + + ContainerFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerFile

    +
    +
    constructor(name: ContainerFileName, mountPath: UnixDir, content: String? = null, hostFile: Path? = null)(source)

    Parameters

    name

    The name of the file in the container.

    mountPath

    The path in the container where the file will be mounted.

    content

    Optional content - valid for both Docker and Kubernetes - if set, the mounted file will be populated with this content.

    hostFile

    Only valid for Docker - if not set a temporary file will be created and used as the source for the bind mount.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/content.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/content.html new file mode 100644 index 00000000..e0ac68fa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/content.html @@ -0,0 +1,80 @@ + + + + + content + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    content

    +
    +
    val content: String? = null(source)

    Parameters

    content

    Optional content - valid for both Docker and Kubernetes - if set, the mounted file will be populated with this content.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/host-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/host-file.html new file mode 100644 index 00000000..ae673f90 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/host-file.html @@ -0,0 +1,80 @@ + + + + + hostFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    hostFile

    +
    +
    val hostFile: Path? = null(source)

    Parameters

    hostFile

    Only valid for Docker - if not set a temporary file will be created and used as the source for the bind mount.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/index.html new file mode 100644 index 00000000..533ab9ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/index.html @@ -0,0 +1,174 @@ + + + + + ContainerFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerFile

    +
    data class ContainerFile(val name: ContainerFileName, val mountPath: UnixDir, val content: String? = null, val hostFile: Path? = null)(source)

    Value object representing a file to be added or mapped into a container.

      +
    • For Docker this becomes a bind mount, and if hostFile is set, the file will be mounted from the host, otherwise +a temporary file will be as the source for the bind mount. Either way the file will be populated with 'content' if set
    • Note that a in Docker a bind mount is a synchronization mechanism between the host and the container, and any changes to +the file made by any of the parties will be reflected in the other party.
    • For Kubernetes an object of this class becomes a ConfigMap and the 'content' parameter will be used to populate the +contents of the key mapped to a file. Note that Kubernetes implementation will use the individual mount file approach +hence avoiding obscuring an existing directory in the container's file system.
    • +

    Parameters

    name

    The name of the file in the container.

    mountPath

    The path in the container where the file will be mounted.

    content

    Optional content - valid for both Docker and Kubernetes - if set, the mounted file will be populated with this content.

    hostFile

    Only valid for Docker - if not set a temporary file will be created and used as the source for the bind mount.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(name: ContainerFileName, mountPath: UnixDir, content: String? = null, hostFile: Path? = null)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val content: String? = null
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val hostFile: Path? = null
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/mount-path.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/mount-path.html new file mode 100644 index 00000000..1bd7a613 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/mount-path.html @@ -0,0 +1,80 @@ + + + + + mountPath + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    mountPath

    +
    +

    Parameters

    mountPath

    The path in the container where the file will be mounted.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/name.html new file mode 100644 index 00000000..8acf4032 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-file/name.html @@ -0,0 +1,80 @@ + + + + + name + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    name

    +
    +

    Parameters

    name

    The name of the file in the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/index.html new file mode 100644 index 00000000..1f5d2219 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): ContainerName
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/of.html new file mode 100644 index 00000000..684fa4f7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-container-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-container-name.html new file mode 100644 index 00000000..01a59e33 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/-container-name.html @@ -0,0 +1,80 @@ + + + + + ContainerName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/index.html new file mode 100644 index 00000000..14f7d587 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/index.html @@ -0,0 +1,191 @@ + + + + + ContainerName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerName

    +

    Value object representing the common rules for Docker and Kubernetes container names. Note that both container platforms have specific rules beyond these common rules.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/to-string.html new file mode 100644 index 00000000..748b4ad0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/unwrap.html new file mode 100644 index 00000000..7aaa2bba --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/value.html new file mode 100644 index 00000000..c0889e46 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-d-o-c-k-e-r/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-d-o-c-k-e-r/index.html new file mode 100644 index 00000000..c10f11d3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-d-o-c-k-e-r/index.html @@ -0,0 +1,119 @@ + + + + + DOCKER + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DOCKER

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-k-u-b-e-r-n-e-t-e-s/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-k-u-b-e-r-n-e-t-e-s/index.html new file mode 100644 index 00000000..7004f995 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/-k-u-b-e-r-n-e-t-e-s/index.html @@ -0,0 +1,119 @@ + + + + + KUBERNETES + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    KUBERNETES

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/entries.html new file mode 100644 index 00000000..1ecc13dc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/index.html new file mode 100644 index 00000000..1fd32489 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/index.html @@ -0,0 +1,202 @@ + + + + + ContainerPlatformType + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerPlatformType

    +

    Enum class representing the container types supported by the library.

    +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/value-of.html new file mode 100644 index 00000000..63788b98 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/values.html new file mode 100644 index 00000000..23d4d258 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-platform-type/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/delete.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/delete.html new file mode 100644 index 00000000..45895923 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/delete.html @@ -0,0 +1,80 @@ + + + + + delete + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    delete

    +
    +
    abstract fun delete(force: Boolean = false)(source)

    Deletes the container with an optional force flag.

    Parameters

    force

    if true, force the deletion of the container (default is false)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-container.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-container.html new file mode 100644 index 00000000..e44f15de --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-container.html @@ -0,0 +1,80 @@ + + + + + getContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getContainer

    +
    +
    abstract fun getContainer(): Container(source)

    Retrieves the container associated with the runtime.

    Return

    the container as a Container object

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-name.html new file mode 100644 index 00000000..049e0a19 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-name.html @@ -0,0 +1,80 @@ + + + + + getName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getName

    +
    +
    abstract fun getName(): ContainerName(source)

    Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-type.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-type.html new file mode 100644 index 00000000..d5661bc1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-type.html @@ -0,0 +1,80 @@ + + + + + getType + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getType

    +
    +

    Retrieves the type of the container platform.

    Return

    the type of the container platform as a ContainerPlatformType enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/index.html new file mode 100644 index 00000000..5eb559b0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/index.html @@ -0,0 +1,194 @@ + + + + + ContainerRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerRuntime

    +

    Interface representing the runtime of a container - either Docker or Kubernetes.

    Inheritors

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun delete(force: Boolean = false)

    Deletes the container with an optional force flag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getContainer(): Container

    Retrieves the container associated with the runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getName(): ContainerName

    Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the type of the container platform.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun kill()

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun start()

    Starts the execution of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun stop()

    Stops the container runtime.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/kill.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/kill.html new file mode 100644 index 00000000..181c9765 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/kill.html @@ -0,0 +1,80 @@ + + + + + kill + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    kill

    +
    +
    open fun kill()(source)

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/start.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/start.html new file mode 100644 index 00000000..ef35e5a2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/start.html @@ -0,0 +1,80 @@ + + + + + start + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    start

    +
    +
    abstract fun start()(source)

    Starts the execution of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/stop.html new file mode 100644 index 00000000..dd5719f7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container-runtime/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    abstract fun stop()(source)

    Stops the container runtime.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-d-e-l-e-t-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-d-e-l-e-t-e-d/index.html new file mode 100644 index 00000000..1cf3b125 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-d-e-l-e-t-e-d/index.html @@ -0,0 +1,119 @@ + + + + + DELETED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DELETED

    +

    The container has been removed from the underlying container platform.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-f-a-i-l-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-f-a-i-l-e-d/index.html new file mode 100644 index 00000000..238c49d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-f-a-i-l-e-d/index.html @@ -0,0 +1,119 @@ + + + + + FAILED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FAILED

    +

    The container has failed.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-i-n-i-t-i-a-l-i-z-i-n-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-i-n-i-t-i-a-l-i-z-i-n-g/index.html new file mode 100644 index 00000000..83c6f7a7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-i-n-i-t-i-a-l-i-z-i-n-g/index.html @@ -0,0 +1,119 @@ + + + + + INITIALIZING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    INITIALIZING

    +

    The container is being initialized.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-r-u-n-n-i-n-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-r-u-n-n-i-n-g/index.html new file mode 100644 index 00000000..88b6f18b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-r-u-n-n-i-n-g/index.html @@ -0,0 +1,119 @@ + + + + + RUNNING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RUNNING

    +

    The container is running.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-s-t-o-p-p-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-s-t-o-p-p-e-d/index.html new file mode 100644 index 00000000..689a782c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-s-t-o-p-p-e-d/index.html @@ -0,0 +1,119 @@ + + + + + STOPPED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    STOPPED

    +

    The container has been gracefully or forcefully stopped.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-t-e-r-m-i-n-a-t-i-n-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-t-e-r-m-i-n-a-t-i-n-g/index.html new file mode 100644 index 00000000..7492aef0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-t-e-r-m-i-n-a-t-i-n-g/index.html @@ -0,0 +1,119 @@ + + + + + TERMINATING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TERMINATING

    +

    The container is being terminated.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-i-n-i-t-i-a-t-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-i-n-i-t-i-a-t-e-d/index.html new file mode 100644 index 00000000..60c9d8fc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-i-n-i-t-i-a-t-e-d/index.html @@ -0,0 +1,119 @@ + + + + + UNINITIATED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UNINITIATED

    +

    The container is in an uninitiated state.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-k-n-o-w-n/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-k-n-o-w-n/index.html new file mode 100644 index 00000000..1d8799d0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-k-n-o-w-n/index.html @@ -0,0 +1,119 @@ + + + + + UNKNOWN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UNKNOWN

    +

    The container is in an unknown state.

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/entries.html new file mode 100644 index 00000000..92af6527 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/index.html new file mode 100644 index 00000000..609a9176 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/index.html @@ -0,0 +1,292 @@ + + + + + State + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    State

    +

    Represents the state of a container.

    +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container is in an uninitiated state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container is being initialized.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container is running.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container has failed.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container is being terminated.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container is in an unknown state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container has been gracefully or forcefully stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The container has been removed from the underlying container platform.

    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/value-of.html new file mode 100644 index 00000000..58b7873b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/values.html new file mode 100644 index 00000000..ef41eaee --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/-state/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/execute.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/execute.html new file mode 100644 index 00000000..a9f96c73 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/execute.html @@ -0,0 +1,81 @@ + + + + + execute + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    execute

    +
    +
    abstract fun execute(executable: Executable, args: Args? = null, useTty: Boolean = false, workingDir: UnixDir? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>(source)

    Executes a command in the container.

    +Note that for Docker, std out and std err are combined in the std out result - hence the std error string is always empty.

    Return

    a pair of the exit code and the std error output

    Parameters

    executable

    the command to execute

    args

    the arguments to pass to the command

    workingDir

    the working directory for the command

    input

    the input stream to pass to the command

    waitTimeValue

    the time to wait for the command to complete

    waitTimeUnit

    the time unit for the wait time


    open fun execute(command: List<String>, useTty: Boolean = false, workingDir: String? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-args.html new file mode 100644 index 00000000..8cf552e6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-args.html @@ -0,0 +1,81 @@ + + + + + getArgs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getArgs

    +
    +
    abstract fun getArgs(): Args?(source)

    Retrieves the command arguments for the container.

    +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's

    Return

    the command arguments as an instance of Args, or null if there are no arguments.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-command.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-command.html new file mode 100644 index 00000000..1f315ada --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-command.html @@ -0,0 +1,82 @@ + + + + + getCommand + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getCommand

    +
    +
    abstract fun getCommand(): Executable?(source)

    Retrieves the executable command for the container.

    +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's +image for both Docker and kubernetes.

    Return

    the executable command as an Executable object, or null if no command is specified

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-directory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-directory.html new file mode 100644 index 00000000..c9d314c0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-directory.html @@ -0,0 +1,80 @@ + + + + + getDirectory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getDirectory

    +
    +
    abstract fun getDirectory(remoteDir: UnixDir, localDir: Path = Files.createTempDirectory("container-download-tar").toAbsolutePath()): Pair<Path, List<Path>>(source)
    open fun getDirectory(remoteDir: String, localDir: String): Pair<Path, List<Path>>(source)

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    Return

    a pair of the path of the downloaded directory and a list of the paths of the downloaded files

    Parameters

    remoteDir

    the path of the directory to download

    localDir

    the path where the directory will be downloaded to, defaults to a temporary directory

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-duration.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-duration.html new file mode 100644 index 00000000..6ad2f9c5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-duration.html @@ -0,0 +1,80 @@ + + + + + getDuration + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getDuration

    +
    +
    abstract fun getDuration(): Duration?(source)

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-env.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-env.html new file mode 100644 index 00000000..4c09c8ab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-env.html @@ -0,0 +1,80 @@ + + + + + getEnv + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getEnv

    +
    +

    Retrieves the environment variables associated with the container.

    Return

    a map containing the environment variable keys and values

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-execution-mode.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-execution-mode.html new file mode 100644 index 00000000..87cae103 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-execution-mode.html @@ -0,0 +1,80 @@ + + + + + getExecutionMode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExecutionMode

    +
    +

    Retrieves the execution mode of the container.

    Return

    the execution mode of the container as an ExecutionMode enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exit-code.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exit-code.html new file mode 100644 index 00000000..b63c0a9c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exit-code.html @@ -0,0 +1,80 @@ + + + + + getExitCode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExitCode

    +
    +
    abstract fun getExitCode(): Int?(source)

    Retrieves the exit code of the container.

    Return

    the exit code of the container, or null if the container is still running or has never been started.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exposed-ports.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exposed-ports.html new file mode 100644 index 00000000..4a38d67d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-exposed-ports.html @@ -0,0 +1,80 @@ + + + + + getExposedPorts + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExposedPorts

    +
    +

    Returns the list of network ports exposed by the container.

    Return

    the list of exposed network ports as a List of NetworkPort objects

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-file.html new file mode 100644 index 00000000..ce1605da --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-file.html @@ -0,0 +1,80 @@ + + + + + getFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getFile

    +
    +
    abstract fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path? = null): Path(source)

    Downloads a file from the container.

    Return

    the path of the downloaded file

    Parameters

    remoteDir

    the path of the file to download

    remoteFilename

    the name of the file in the container

    localPath

    the path where the file will be downloaded to - if null, the file will be downloaded to the current directory, with the same name as the remote file, if not null, the file will be downloaded with the specified name unless the path is a directory, in which case the file will be downloaded to the directory with the same name as the remote file


    open fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-host.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-host.html new file mode 100644 index 00000000..07d52a82 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-host.html @@ -0,0 +1,80 @@ + + + + + getHost + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getHost

    +
    +
    abstract fun getHost(): Host?(source)

    Retrieves the host of the container.

    Return

    the host of the container as a Host object, or null if the host is not set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-image.html new file mode 100644 index 00000000..c5934e2f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-image.html @@ -0,0 +1,80 @@ + + + + + getImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getImage

    +
    +
    abstract fun getImage(): ImageURL(source)

    Retrieves the image for the container.

    Return

    the URL of the image

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-ip-address.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-ip-address.html new file mode 100644 index 00000000..14a70b6b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-ip-address.html @@ -0,0 +1,80 @@ + + + + + getIpAddress + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getIpAddress

    +
    +
    abstract fun getIpAddress(): InetAddress?(source)

    Retrieves the IP address of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-labels.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-labels.html new file mode 100644 index 00000000..d913a7b1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-labels.html @@ -0,0 +1,80 @@ + + + + + getLabels + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getLabels

    +
    +

    Retrieves the labels associated with the container.

    Return

    a map of LabelKey to LabelValue representing the labels

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-mapped-port.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-mapped-port.html new file mode 100644 index 00000000..631b6f1d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-mapped-port.html @@ -0,0 +1,80 @@ + + + + + getMappedPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getMappedPort

    +
    +

    Returns the mapped port for the specified network port.

    Return

    the mapped port as a NetworkPort object

    Parameters

    port

    the network port for which to retrieve the mapped port

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-max-life-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-max-life-time.html new file mode 100644 index 00000000..6b7f95f7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-max-life-time.html @@ -0,0 +1,80 @@ + + + + + getMaxLifeTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getMaxLifeTime

    +
    +
    abstract fun getMaxLifeTime(): Duration?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-name.html new file mode 100644 index 00000000..c9de9148 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-name.html @@ -0,0 +1,80 @@ + + + + + getName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getName

    +
    +
    abstract fun getName(): ContainerName(source)

    Returns the name of the container.

    Return

    the name of the container as a ContainerName object

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-namespace.html new file mode 100644 index 00000000..47eb07f2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-namespace.html @@ -0,0 +1,80 @@ + + + + + getNamespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getNamespace

    +
    +
    abstract fun getNamespace(): Namespace(source)

    Returns the namespace of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-network-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-network-name.html new file mode 100644 index 00000000..a8774075 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-network-name.html @@ -0,0 +1,80 @@ + + + + + getNetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getNetworkName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-output-line-callback.html new file mode 100644 index 00000000..176baa55 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + getOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getOutputLineCallback

    +
    +

    Retrieves the log output callback of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-port-mappings.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-port-mappings.html new file mode 100644 index 00000000..86cb5431 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-port-mappings.html @@ -0,0 +1,80 @@ + + + + + getPortMappings + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getPortMappings

    +
    +

    Retrieves the port mappings for the container.

    Return

    a map of NetworkPort to NetworkPort representing the port mappings.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-runtime.html new file mode 100644 index 00000000..cb41d1d6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-runtime.html @@ -0,0 +1,80 @@ + + + + + getRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getRuntime

    +
    +

    Retrieves the (underlying) runtime of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-state.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-state.html new file mode 100644 index 00000000..52dfd919 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-state.html @@ -0,0 +1,80 @@ + + + + + getState + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getState

    +
    +

    Retrieves the state of the container.

    Return

    the state of the container as a ContainerState enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-volumes.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-volumes.html new file mode 100644 index 00000000..7a066411 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/get-volumes.html @@ -0,0 +1,80 @@ + + + + + getVolumes + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getVolumes

    +
    +
    abstract fun getVolumes(): List<Volume>(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/has-port-mapping.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/has-port-mapping.html new file mode 100644 index 00000000..b9d49581 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/has-port-mapping.html @@ -0,0 +1,80 @@ + + + + + hasPortMapping + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    hasPortMapping

    +
    +

    Checks if the given network port has a mapping defined in the container's port mappings.

    Return

    true if the port has a mapping, false otherwise

    Parameters

    port

    The network port to check

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/index.html new file mode 100644 index 00000000..1bc77c07 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/index.html @@ -0,0 +1,573 @@ + + + + + Container + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Container

    +
    interface Container(source)

    Inheritors

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Represents the state of a container.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun execute(command: List<String>, useTty: Boolean = false, workingDir: String? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>

    abstract fun execute(executable: Executable, args: Args? = null, useTty: Boolean = false, workingDir: UnixDir? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>

    Executes a command in the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getArgs(): Args?

    Retrieves the command arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getCommand(): Executable?

    Retrieves the executable command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun getDirectory(remoteDir: String, localDir: String): Pair<Path, List<Path>>
    abstract fun getDirectory(remoteDir: UnixDir, localDir: Path = Files.createTempDirectory("container-download-tar").toAbsolutePath()): Pair<Path, List<Path>>

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getDuration(): Duration?

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getEnv(): Map<EnvVarKey, EnvVarValue>

    Retrieves the environment variables associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the execution mode of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getExitCode(): Int?

    Retrieves the exit code of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the list of network ports exposed by the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path

    abstract fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path? = null): Path

    Downloads a file from the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getHost(): Host?

    Retrieves the host of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getImage(): ImageURL

    Retrieves the image for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getIpAddress(): InetAddress?

    Retrieves the IP address of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getLabels(): Map<LabelKey, LabelValue>

    Retrieves the labels associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the mapped port for the specified network port.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getMaxLifeTime(): Duration?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getName(): ContainerName

    Returns the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getNamespace(): Namespace

    Returns the namespace of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getNetworkName(): NetworkName?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the log output callback of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the port mappings for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the (underlying) runtime of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getState(): Container.State

    Retrieves the state of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getVolumes(): List<Volume>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given network port has a mapping defined in the container's port mappings.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun isEphemeral(): Boolean

    Checks whether the container is ephemeral.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun onDelete()
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun putDirectory(localDir: Path, remoteDir: UnixDir): Long

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    open fun putDirectory(localDir: String, remoteDir: String): Long

    Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String? = null): Long

    Uploads a file to the container.

    open fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun waitForCompletion(timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun waitForState(state: Container.State, timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean

    Wait for the container to reach the specified state.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/is-ephemeral.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/is-ephemeral.html new file mode 100644 index 00000000..7ae863be --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/is-ephemeral.html @@ -0,0 +1,80 @@ + + + + + isEphemeral + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isEphemeral

    +
    +
    abstract fun isEphemeral(): Boolean(source)

    Checks whether the container is ephemeral.

    Return

    true if the container is ephemeral, false otherwise

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/on-delete.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/on-delete.html new file mode 100644 index 00000000..484774a3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/on-delete.html @@ -0,0 +1,80 @@ + + + + + onDelete + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    onDelete

    +
    +
    open fun onDelete()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-directory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-directory.html new file mode 100644 index 00000000..01e53e20 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-directory.html @@ -0,0 +1,80 @@ + + + + + putDirectory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    putDirectory

    +
    +
    abstract fun putDirectory(localDir: Path, remoteDir: UnixDir): Long(source)

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    Return

    the size of the directory in bytes

    Parameters

    localDir

    the path of the directory to upload

    remoteDir

    the path where the directory will be uploaded in the container


    open fun putDirectory(localDir: String, remoteDir: String): Long(source)

    Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

    Return

    the size of the transferred directory in bytes

    Parameters

    localDir

    the path of the directory to upload

    remoteDir

    the path where the directory will be uploaded in the container

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-file.html new file mode 100644 index 00000000..a3e644c9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/put-file.html @@ -0,0 +1,80 @@ + + + + + putFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    putFile

    +
    +
    abstract fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String? = null): Long(source)

    Uploads a file to the container.

    Return

    the size of the file in bytes

    Parameters

    localFile

    the path of the file to upload -

    remoteDir

    the path where the file will be uploaded in the container - if it doesn't exist, it will be attempted created

    remoteFilename

    the name of the file in the container - if null, the file will be uploaded with the same name as the local file


    open fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-completion.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-completion.html new file mode 100644 index 00000000..47681458 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-completion.html @@ -0,0 +1,80 @@ + + + + + waitForCompletion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitForCompletion

    +
    +
    open fun waitForCompletion(timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean(source)

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    Parameters

    timeout

    the maximum time to wait for the container to stop, default is 0 which means indefinite wait

    unit

    the time unit of the timeout, default is seconds

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-state.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-state.html new file mode 100644 index 00000000..d80f6fdf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-container/wait-for-state.html @@ -0,0 +1,80 @@ + + + + + waitForState + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitForState

    +
    +
    abstract fun waitForState(state: Container.State, timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean(source)

    Wait for the container to reach the specified state.

    Parameters

    state

    the expected state of the container

    timeout

    the maximum time to wait for the container to reach the state, default is 0 which means indefinite wait

    unit

    the time unit of the timeout, default is seconds

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/index.html new file mode 100644 index 00000000..563e0659 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): EnvVarKey
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/of.html new file mode 100644 index 00000000..c436042e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): EnvVarKey(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-env-var-key.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-env-var-key.html new file mode 100644 index 00000000..0257ca62 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/-env-var-key.html @@ -0,0 +1,80 @@ + + + + + EnvVarKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EnvVarKey

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/index.html new file mode 100644 index 00000000..65db91bf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/index.html @@ -0,0 +1,191 @@ + + + + + EnvVarKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EnvVarKey

    +

    Value object representing an environment variable key.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/to-string.html new file mode 100644 index 00000000..881867ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/unwrap.html new file mode 100644 index 00000000..e5a42d0f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/value.html new file mode 100644 index 00000000..51905d1f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-key/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/index.html new file mode 100644 index 00000000..6fd2ec8f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): EnvVarValue
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/of.html new file mode 100644 index 00000000..c2a95155 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): EnvVarValue(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-env-var-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-env-var-value.html new file mode 100644 index 00000000..afe51ab3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/-env-var-value.html @@ -0,0 +1,80 @@ + + + + + EnvVarValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EnvVarValue

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/index.html new file mode 100644 index 00000000..cff42b20 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/index.html @@ -0,0 +1,191 @@ + + + + + EnvVarValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EnvVarValue

    +

    Value object representing an environment variable value.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/to-string.html new file mode 100644 index 00000000..57d9cb13 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/unwrap.html new file mode 100644 index 00000000..93b20cc3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/value.html new file mode 100644 index 00000000..a9cccbff --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-env-var-value/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/index.html new file mode 100644 index 00000000..0ed86e67 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): Executable
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/of.html new file mode 100644 index 00000000..5480ea75 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Executable(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-executable.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-executable.html new file mode 100644 index 00000000..3a791e6d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/-executable.html @@ -0,0 +1,80 @@ + + + + + Executable + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Executable

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/index.html new file mode 100644 index 00000000..e252f772 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/index.html @@ -0,0 +1,191 @@ + + + + + Executable + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Executable

    +

    Value object representing an executable, i.e. a command line with optional arguments.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/to-string.html new file mode 100644 index 00000000..754d67f3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/unwrap.html new file mode 100644 index 00000000..855082c3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/value.html new file mode 100644 index 00000000..5243d640 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-executable/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-s-e-r-v-i-c-e/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-s-e-r-v-i-c-e/index.html new file mode 100644 index 00000000..8e72055e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-s-e-r-v-i-c-e/index.html @@ -0,0 +1,119 @@ + + + + + SERVICE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SERVICE

    +

    Service mode - continuous execution

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-t-a-s-k/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-t-a-s-k/index.html new file mode 100644 index 00000000..5b019558 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/-t-a-s-k/index.html @@ -0,0 +1,119 @@ + + + + + TASK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TASK

    +

    Task mode - single execution with an exit value

    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/entries.html new file mode 100644 index 00000000..0b5019c9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/index.html new file mode 100644 index 00000000..455aaad3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/index.html @@ -0,0 +1,202 @@ + + + + + ExecutionMode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ExecutionMode

    +

    Enum class representing the execution mode of the container.

    See also

    ContainerX
    +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Service mode - continuous execution

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Task mode - single execution with an exit value

    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/value-of.html new file mode 100644 index 00000000..5945000a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/values.html new file mode 100644 index 00000000..357cc0ed --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-execution-mode/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-a-x_-l-e-n-g-t-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-a-x_-l-e-n-g-t-h.html new file mode 100644 index 00000000..eb27a4a6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-a-x_-l-e-n-g-t-h.html @@ -0,0 +1,80 @@ + + + + + MAX_LENGTH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MAX_LENGTH

    +
    +
    const val MAX_LENGTH: Int = 100(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-i-n_-l-e-n-g-t-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-i-n_-l-e-n-g-t-h.html new file mode 100644 index 00000000..1cd3d8d8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-i-n_-l-e-n-g-t-h.html @@ -0,0 +1,80 @@ + + + + + MIN_LENGTH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MIN_LENGTH

    +
    +
    const val MIN_LENGTH: Int = 1(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/index.html new file mode 100644 index 00000000..96eb721e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/index.html @@ -0,0 +1,138 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val MAX_LENGTH: Int = 100
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val MIN_LENGTH: Int = 1
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): Host
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/of.html new file mode 100644 index 00000000..bbad937c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Host(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-host.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-host.html new file mode 100644 index 00000000..69f225f6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/-host.html @@ -0,0 +1,80 @@ + + + + + Host + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Host

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/index.html new file mode 100644 index 00000000..518a25f5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/index.html @@ -0,0 +1,191 @@ + + + + + Host + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Host

    +
    value class Host(val value: String) : SimpleValueObject<String> (source)

    Value object representing a host.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/to-string.html new file mode 100644 index 00000000..5f5b07ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/unwrap.html new file mode 100644 index 00000000..573202ec --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/value.html new file mode 100644 index 00000000..787f29ad --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-host/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/-d-e-f-a-u-l-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/-d-e-f-a-u-l-t.html new file mode 100644 index 00000000..4851bba7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/-d-e-f-a-u-l-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/index.html new file mode 100644 index 00000000..693ac563 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/index.html @@ -0,0 +1,123 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): ImageName
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/of.html new file mode 100644 index 00000000..7dca3ff4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): ImageName(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-image-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-image-name.html new file mode 100644 index 00000000..cfa381d2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/-image-name.html @@ -0,0 +1,80 @@ + + + + + ImageName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/index.html new file mode 100644 index 00000000..a4a828c0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/index.html @@ -0,0 +1,191 @@ + + + + + ImageName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageName

    +

    Value object representing a Docker (registry) image name.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/to-string.html new file mode 100644 index 00000000..48c5c665 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/unwrap.html new file mode 100644 index 00000000..3f41d25e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/value.html new file mode 100644 index 00000000..2d6fb5a3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/-l-a-t-e-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/-l-a-t-e-s-t.html new file mode 100644 index 00000000..63cc9a2a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/-l-a-t-e-s-t.html @@ -0,0 +1,80 @@ + + + + + LATEST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LATEST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/index.html new file mode 100644 index 00000000..724a040a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/index.html @@ -0,0 +1,123 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): ImageTag
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/of.html new file mode 100644 index 00000000..2ccaaa4a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): ImageTag(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-image-tag.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-image-tag.html new file mode 100644 index 00000000..18ae1e1e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/-image-tag.html @@ -0,0 +1,80 @@ + + + + + ImageTag + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageTag

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/index.html new file mode 100644 index 00000000..fab003c4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/index.html @@ -0,0 +1,191 @@ + + + + + ImageTag + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageTag

    +

    Value object representing a Docker image tag.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/to-string.html new file mode 100644 index 00000000..6d52bbc7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/unwrap.html new file mode 100644 index 00000000..bb5626ba --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/value.html new file mode 100644 index 00000000..6366b470 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-tag/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/index.html new file mode 100644 index 00000000..b4e37bdf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): ImageURL
    fun of(registryUrl: String, repositoryName: String, imageName: String, tag: String = ImageTag.LATEST.unwrap()): ImageURL
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/of.html new file mode 100644 index 00000000..f2d9a94e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(registryUrl: String, repositoryName: String, imageName: String, tag: String = ImageTag.LATEST.unwrap()): ImageURL(source)
    fun of(value: String): ImageURL(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-image-u-r-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-image-u-r-l.html new file mode 100644 index 00000000..a4875f0c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-image-u-r-l.html @@ -0,0 +1,80 @@ + + + + + ImageURL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageURL

    +
    +
    constructor(registryUrl: RegistryURL, repositoryName: RepositoryName, imageName: ImageName, tag: ImageTag = ImageTag.LATEST)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/image-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/image-name.html new file mode 100644 index 00000000..c9b12213 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/image-name.html @@ -0,0 +1,80 @@ + + + + + imageName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    imageName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/index.html new file mode 100644 index 00000000..bc50ce2d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/index.html @@ -0,0 +1,221 @@ + + + + + ImageURL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageURL

    +
    data class ImageURL(val registryUrl: RegistryURL, val repositoryName: RepositoryName, val imageName: ImageName, val tag: ImageTag = ImageTag.LATEST)(source)

    Represents a Docker image URL consisting of a registry URL, repository name, image name, and tag.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(registryUrl: RegistryURL, repositoryName: RepositoryName, imageName: ImageName, tag: ImageTag = ImageTag.LATEST)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The image name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The registry URL of the image.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The repository name of the image.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The image tag. Default is ImageTag.LATEST.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun toFQDN(): String

    Returns the Fully Qualified Domain Name (FQDN) of the image URL. The FQDN is constructed by concatenating the registry URL, repository name, image name, and tag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String

    Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN). The FQDN is constructed by concatenating the registry URL, repository name, image name, and image tag, separated by forward slashes

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/registry-url.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/registry-url.html new file mode 100644 index 00000000..b6419498 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/registry-url.html @@ -0,0 +1,80 @@ + + + + + registryUrl + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    registryUrl

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/repository-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/repository-name.html new file mode 100644 index 00000000..f321278d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/repository-name.html @@ -0,0 +1,80 @@ + + + + + repositoryName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    repositoryName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/tag.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/tag.html new file mode 100644 index 00000000..ccc10bab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/tag.html @@ -0,0 +1,80 @@ + + + + + tag + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    tag

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-f-q-d-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-f-q-d-n.html new file mode 100644 index 00000000..1f9027b7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-f-q-d-n.html @@ -0,0 +1,80 @@ + + + + + toFQDN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toFQDN

    +
    +

    Returns the Fully Qualified Domain Name (FQDN) of the image URL. The FQDN is constructed by concatenating the registry URL, repository name, image name, and tag.

    Return

    the Fully Qualified Domain Name (FQDN) of the image URL

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-string.html new file mode 100644 index 00000000..a42293fd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)

    Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN). The FQDN is constructed by concatenating the registry URL, repository name, image name, and image tag, separated by forward slashes

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/index.html new file mode 100644 index 00000000..eaada4e5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): LabelKey
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/of.html new file mode 100644 index 00000000..85f9d5e7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): LabelKey(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-label-key.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-label-key.html new file mode 100644 index 00000000..43c435c1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/-label-key.html @@ -0,0 +1,80 @@ + + + + + LabelKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LabelKey

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/index.html new file mode 100644 index 00000000..9a2058ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/index.html @@ -0,0 +1,191 @@ + + + + + LabelKey + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LabelKey

    +

    Value object representing a docker/kubernetes label key.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/to-string.html new file mode 100644 index 00000000..d21ced0e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/unwrap.html new file mode 100644 index 00000000..ac527737 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/value.html new file mode 100644 index 00000000..6a0418ba --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-key/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/index.html new file mode 100644 index 00000000..b623ec8c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): LabelValue
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/of.html new file mode 100644 index 00000000..07ffaf15 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): LabelValue(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-label-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-label-value.html new file mode 100644 index 00000000..d6ae76e2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/-label-value.html @@ -0,0 +1,80 @@ + + + + + LabelValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LabelValue

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/index.html new file mode 100644 index 00000000..b5c9312e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/index.html @@ -0,0 +1,191 @@ + + + + + LabelValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LabelValue

    +

    Value object representing a docker/kubernetes label value.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/to-string.html new file mode 100644 index 00000000..63a92f50 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/unwrap.html new file mode 100644 index 00000000..1913a621 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/value.html new file mode 100644 index 00000000..9a5b9949 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-label-value/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ei.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ei.html new file mode 100644 index 00000000..410b6a2e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ei.html @@ -0,0 +1,80 @@ + + + + + Ei + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Ei

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-gi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-gi.html new file mode 100644 index 00000000..32778011 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-gi.html @@ -0,0 +1,80 @@ + + + + + Gi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Gi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ki.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ki.html new file mode 100644 index 00000000..0b046f99 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ki.html @@ -0,0 +1,80 @@ + + + + + Ki + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Ki

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-mi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-mi.html new file mode 100644 index 00000000..042b60e3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-mi.html @@ -0,0 +1,80 @@ + + + + + Mi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Mi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-pi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-pi.html new file mode 100644 index 00000000..658ba38f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-pi.html @@ -0,0 +1,80 @@ + + + + + Pi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Pi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ti.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ti.html new file mode 100644 index 00000000..39b757be --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ti.html @@ -0,0 +1,80 @@ + + + + + Ti + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Ti

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/index.html new file mode 100644 index 00000000..5fec4c0f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/index.html @@ -0,0 +1,198 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: BigInteger): Memory
    fun of(value: String): Memory
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/of.html new file mode 100644 index 00000000..1db981b2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Memory(source)
    fun of(value: BigInteger): Memory(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-memory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-memory.html new file mode 100644 index 00000000..80f0b70d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/-memory.html @@ -0,0 +1,80 @@ + + + + + Memory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Memory

    +
    +
    constructor(bytes: BigInteger)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/bytes.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/bytes.html new file mode 100644 index 00000000..ba8ce153 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/bytes.html @@ -0,0 +1,80 @@ + + + + + bytes + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    bytes

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/index.html new file mode 100644 index 00000000..28accf27 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/index.html @@ -0,0 +1,296 @@ + + + + + Memory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Memory

    +

    Value object representing kubernetes/docker memory.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(bytes: BigInteger)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<BigInteger>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): BigInteger
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ei.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ei.html new file mode 100644 index 00000000..8e7d4f97 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ei.html @@ -0,0 +1,80 @@ + + + + + toEi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toEi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-formatted-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-formatted-string.html new file mode 100644 index 00000000..413b98d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-formatted-string.html @@ -0,0 +1,80 @@ + + + + + toFormattedString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toFormattedString

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-gi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-gi.html new file mode 100644 index 00000000..23695eb6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-gi.html @@ -0,0 +1,80 @@ + + + + + toGi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toGi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ki.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ki.html new file mode 100644 index 00000000..5ad1d366 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ki.html @@ -0,0 +1,80 @@ + + + + + toKi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toKi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-mi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-mi.html new file mode 100644 index 00000000..6b729f6f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-mi.html @@ -0,0 +1,80 @@ + + + + + toMi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toMi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-pi.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-pi.html new file mode 100644 index 00000000..569fa02b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-pi.html @@ -0,0 +1,80 @@ + + + + + toPi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toPi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-string.html new file mode 100644 index 00000000..613b2ef6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ti.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ti.html new file mode 100644 index 00000000..63d25b91 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/to-ti.html @@ -0,0 +1,80 @@ + + + + + toTi + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toTi

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/unwrap.html new file mode 100644 index 00000000..e8547026 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-memory/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): BigInteger(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-d-e-f-a-u-l-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-d-e-f-a-u-l-t.html new file mode 100644 index 00000000..d949f86a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-d-e-f-a-u-l-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-t-e-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-t-e-s-t.html new file mode 100644 index 00000000..5337531a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-t-e-s-t.html @@ -0,0 +1,80 @@ + + + + + TEST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TEST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/index.html new file mode 100644 index 00000000..baa89e63 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/index.html @@ -0,0 +1,138 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): Namespace
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/of.html new file mode 100644 index 00000000..eec48c51 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Namespace(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-namespace.html new file mode 100644 index 00000000..4a88c655 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/-namespace.html @@ -0,0 +1,80 @@ + + + + + Namespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Namespace

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/index.html new file mode 100644 index 00000000..1dd57d94 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/index.html @@ -0,0 +1,176 @@ + + + + + Namespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Namespace

    +

    Value object representing a kubernetes namespace.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/unwrap.html new file mode 100644 index 00000000..0fc6af5c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/value.html new file mode 100644 index 00000000..99409c63 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-namespace/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/index.html new file mode 100644 index 00000000..73a7f5c3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): NetworkName
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/of.html new file mode 100644 index 00000000..c059ea56 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): NetworkName(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-network-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-network-name.html new file mode 100644 index 00000000..13de4bc9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/-network-name.html @@ -0,0 +1,80 @@ + + + + + NetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NetworkName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/index.html new file mode 100644 index 00000000..d4e922ec --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/index.html @@ -0,0 +1,191 @@ + + + + + NetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NetworkName

    +

    Value object representing a Docker image tag.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/to-string.html new file mode 100644 index 00000000..926fd015 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/unwrap.html new file mode 100644 index 00000000..8e556a40 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/value.html new file mode 100644 index 00000000..deadfd9c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p-s.html new file mode 100644 index 00000000..66347e59 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p-s.html @@ -0,0 +1,80 @@ + + + + + HTTPS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HTTPS

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p.html new file mode 100644 index 00000000..4f3224f1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p.html @@ -0,0 +1,80 @@ + + + + + HTTP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HTTP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-s-s-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-s-s-h.html new file mode 100644 index 00000000..a9d3905c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-s-s-h.html @@ -0,0 +1,80 @@ + + + + + SSH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SSH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/index.html new file mode 100644 index 00000000..758cce96 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/index.html @@ -0,0 +1,153 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: Int): NetworkPort
    fun of(value: String): NetworkPort
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/of.html new file mode 100644 index 00000000..004a6dfc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: Int): NetworkPort(source)
    fun of(value: String): NetworkPort(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-network-port.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-network-port.html new file mode 100644 index 00000000..458786b3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/-network-port.html @@ -0,0 +1,80 @@ + + + + + NetworkPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NetworkPort

    +
    +
    constructor(value: Int)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/index.html new file mode 100644 index 00000000..34b9bb7e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/index.html @@ -0,0 +1,191 @@ + + + + + NetworkPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NetworkPort

    +
    value class NetworkPort(val value: Int) : SimpleValueObject<Int> (source)

    Value object representing a network port - range 1-65535.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: Int)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val value: Int
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<Int>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): Int
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/to-string.html new file mode 100644 index 00000000..7396b6b5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/unwrap.html new file mode 100644 index 00000000..7aa0591d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): Int(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/value.html new file mode 100644 index 00000000..abdca3b9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-network-port/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p-s.html new file mode 100644 index 00000000..c75997dc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p-s.html @@ -0,0 +1,80 @@ + + + + + HTTPS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HTTPS

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p.html new file mode 100644 index 00000000..33676a75 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p.html @@ -0,0 +1,80 @@ + + + + + HTTP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HTTP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-s-s-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-s-s-h.html new file mode 100644 index 00000000..b3a13021 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-s-s-h.html @@ -0,0 +1,80 @@ + + + + + SSH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SSH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-t-r-a-n-s-p-o-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-t-r-a-n-s-p-o-r-t.html new file mode 100644 index 00000000..6e16ee7f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-t-r-a-n-s-p-o-r-t.html @@ -0,0 +1,80 @@ + + + + + TRANSPORT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TRANSPORT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/index.html new file mode 100644 index 00000000..5f2294ce --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/index.html @@ -0,0 +1,168 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/of.html new file mode 100644 index 00000000..aa4b7cd7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-port-mapping-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-port-mapping-name.html new file mode 100644 index 00000000..0cb6a381 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-port-mapping-name.html @@ -0,0 +1,80 @@ + + + + + PortMappingName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PortMappingName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/index.html new file mode 100644 index 00000000..0490592e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/index.html @@ -0,0 +1,191 @@ + + + + + PortMappingName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PortMappingName

    +

    Value object representing a port mapping name

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/to-string.html new file mode 100644 index 00000000..c3676063 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/unwrap.html new file mode 100644 index 00000000..ce7fe5aa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/value.html new file mode 100644 index 00000000..7c15ffc3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-d-o-c-k-e-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-d-o-c-k-e-r.html new file mode 100644 index 00000000..1b120d07 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-d-o-c-k-e-r.html @@ -0,0 +1,80 @@ + + + + + DOCKER + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DOCKER

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-k-u-b-e-r-n-e-t-e-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-k-u-b-e-r-n-e-t-e-s.html new file mode 100644 index 00000000..a9d9b22b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-k-u-b-e-r-n-e-t-e-s.html @@ -0,0 +1,80 @@ + + + + + KUBERNETES + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    KUBERNETES

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-l-o-c-a-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-l-o-c-a-l.html new file mode 100644 index 00000000..de49b6c3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-l-o-c-a-l.html @@ -0,0 +1,80 @@ + + + + + LOCAL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LOCAL

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/index.html new file mode 100644 index 00000000..233db3c5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/index.html @@ -0,0 +1,153 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): RegistryURL
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/of.html new file mode 100644 index 00000000..70b3d643 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): RegistryURL(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-registry-u-r-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-registry-u-r-l.html new file mode 100644 index 00000000..a651e53b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-registry-u-r-l.html @@ -0,0 +1,80 @@ + + + + + RegistryURL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RegistryURL

    +
    +
    constructor(value: String)(source)

    Parameters

    value

    the value of the registry URL

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/index.html new file mode 100644 index 00000000..b89f3e24 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/index.html @@ -0,0 +1,191 @@ + + + + + RegistryURL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RegistryURL

    +

    Represents a URL of a registry.

    Parameters

    value

    the value of the registry URL

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/to-string.html new file mode 100644 index 00000000..aa6ac7e1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/unwrap.html new file mode 100644 index 00000000..62da5be8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/value.html new file mode 100644 index 00000000..d67c6c45 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    +

    Parameters

    value

    the value of the registry URL

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-d-e-f-a-u-l-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-d-e-f-a-u-l-t.html new file mode 100644 index 00000000..b77c9c6f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-d-e-f-a-u-l-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-t-e-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-t-e-s-t.html new file mode 100644 index 00000000..77e8d2c4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-t-e-s-t.html @@ -0,0 +1,80 @@ + + + + + TEST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TEST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/index.html new file mode 100644 index 00000000..9dc143dd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/index.html @@ -0,0 +1,138 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): RepositoryName
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/of.html new file mode 100644 index 00000000..67b78b68 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-repository-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-repository-name.html new file mode 100644 index 00000000..36f40376 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/-repository-name.html @@ -0,0 +1,80 @@ + + + + + RepositoryName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RepositoryName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/index.html new file mode 100644 index 00000000..51bd950e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/index.html @@ -0,0 +1,191 @@ + + + + + RepositoryName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RepositoryName

    +

    Represents a repository name in a software repository system.

    A repository name is a value object that holds a single value of type String. It is used to identify a specific repository within a registry. The repository name must adhere to certain rules:

    • It must consist of lowercase alphanumeric characters, and may contain hyphens, underscores, and periods.

    • It must have a minimum length of 2 and a maximum length of 255 characters.

    Example Usage:

    val repoName = RepositoryName.of("myrepo")
    val defaultName = RepositoryName.DEFAULT
    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/to-string.html new file mode 100644 index 00000000..0736f66c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/unwrap.html new file mode 100644 index 00000000..abb9922c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/value.html new file mode 100644 index 00000000..9ed7e495 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-repository-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/index.html new file mode 100644 index 00000000..c4c23266 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/of.html new file mode 100644 index 00000000..c4e477bd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-semantic-version.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-semantic-version.html new file mode 100644 index 00000000..c35b8467 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/-semantic-version.html @@ -0,0 +1,80 @@ + + + + + SemanticVersion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SemanticVersion

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/index.html new file mode 100644 index 00000000..92ca0931 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/index.html @@ -0,0 +1,191 @@ + + + + + SemanticVersion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SemanticVersion

    +

    Value object representing a file name for a file to be added or mapped into a container.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/to-string.html new file mode 100644 index 00000000..9b1620f2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/unwrap.html new file mode 100644 index 00000000..13f5ccb9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/value.html new file mode 100644 index 00000000..a8f59166 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-semantic-version/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-e-t-c.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-e-t-c.html new file mode 100644 index 00000000..596d29fa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-e-t-c.html @@ -0,0 +1,80 @@ + + + + + ETC + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ETC

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-h-o-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-h-o-m-e.html new file mode 100644 index 00000000..7bbe831a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-h-o-m-e.html @@ -0,0 +1,80 @@ + + + + + HOME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HOME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-m-n-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-m-n-t.html new file mode 100644 index 00000000..7c7ee46b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-m-n-t.html @@ -0,0 +1,80 @@ + + + + + MNT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MNT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-r-o-o-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-r-o-o-t.html new file mode 100644 index 00000000..f83631c5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-r-o-o-t.html @@ -0,0 +1,80 @@ + + + + + ROOT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ROOT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-t-m-p.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-t-m-p.html new file mode 100644 index 00000000..e24e8358 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-t-m-p.html @@ -0,0 +1,80 @@ + + + + + TMP + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TMP

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/index.html new file mode 100644 index 00000000..1a128136 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/index.html @@ -0,0 +1,183 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): UnixDir
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/of.html new file mode 100644 index 00000000..64951a64 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): UnixDir(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-unix-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-unix-dir.html new file mode 100644 index 00000000..401d01cd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/-unix-dir.html @@ -0,0 +1,80 @@ + + + + + UnixDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UnixDir

    +
    +
    constructor(value: String)(source)

    Parameters

    value

    The underlying String value representing the directory path.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/index.html new file mode 100644 index 00000000..a226f2fd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/index.html @@ -0,0 +1,191 @@ + + + + + UnixDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UnixDir

    +
    value class UnixDir(val value: String) : SimpleValueObject<String> (source)

    Represents a complete (starting with root '/') Unix directory path as a value object.

    Parameters

    value

    The underlying String value representing the directory path.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/to-string.html new file mode 100644 index 00000000..262f9724 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/unwrap.html new file mode 100644 index 00000000..80f57ba0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/value.html new file mode 100644 index 00000000..ec484988 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-unix-dir/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    +

    Parameters

    value

    The underlying String value representing the directory path.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/index.html new file mode 100644 index 00000000..5059107c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): Verbosity?
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/of.html new file mode 100644 index 00000000..f02f784b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): Verbosity?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-d-e-b-u-g/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-d-e-b-u-g/index.html new file mode 100644 index 00000000..51f620a9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-d-e-b-u-g/index.html @@ -0,0 +1,134 @@ + + + + + DEBUG + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEBUG

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-e-r-r-o-r/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-e-r-r-o-r/index.html new file mode 100644 index 00000000..13a82c3f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-e-r-r-o-r/index.html @@ -0,0 +1,134 @@ + + + + + ERROR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ERROR

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-f-a-t-a-l/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-f-a-t-a-l/index.html new file mode 100644 index 00000000..b3731a75 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-f-a-t-a-l/index.html @@ -0,0 +1,134 @@ + + + + + FATAL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FATAL

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-i-n-f-o/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-i-n-f-o/index.html new file mode 100644 index 00000000..1f99153e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-i-n-f-o/index.html @@ -0,0 +1,134 @@ + + + + + INFO + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    INFO

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-p-a-n-i-c/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-p-a-n-i-c/index.html new file mode 100644 index 00000000..22f5d35b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-p-a-n-i-c/index.html @@ -0,0 +1,134 @@ + + + + + PANIC + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PANIC

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-t-r-a-c-e/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-t-r-a-c-e/index.html new file mode 100644 index 00000000..8f80207a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-t-r-a-c-e/index.html @@ -0,0 +1,134 @@ + + + + + TRACE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TRACE

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-w-a-r-n/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-w-a-r-n/index.html new file mode 100644 index 00000000..f34e8873 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/-w-a-r-n/index.html @@ -0,0 +1,134 @@ + + + + + WARN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    WARN

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/entries.html new file mode 100644 index 00000000..fcce8b05 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/index.html new file mode 100644 index 00000000..03f13da8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/index.html @@ -0,0 +1,311 @@ + + + + + Verbosity + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Verbosity

    +

    Enum class representing different levels of verbosity.

    Each verbosity level has a corresponding string value. The levels are: PANIC, FATAL, ERROR, WARN, INFO, DEBUG, TRACE.

    Usage: To get the verbosity level from a string value, use of(value: String) function.

    Example: val level = Verbosity.of("info")

    +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun valueOf(value: String): Verbosity

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value-of.html new file mode 100644 index 00000000..a4e8df9a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value.html new file mode 100644 index 00000000..c3c8a7bc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/values.html new file mode 100644 index 00000000..169d5e65 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-verbosity/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/index.html new file mode 100644 index 00000000..4f1002ee --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(value: String): VolumeName
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/of.html new file mode 100644 index 00000000..9a0777c4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(value: String): VolumeName(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-volume-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-volume-name.html new file mode 100644 index 00000000..89c47857 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/-volume-name.html @@ -0,0 +1,80 @@ + + + + + VolumeName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    VolumeName

    +
    +
    constructor(value: String)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/index.html new file mode 100644 index 00000000..06b67436 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/index.html @@ -0,0 +1,191 @@ + + + + + VolumeName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    VolumeName

    +

    Represents a volume name.

    A volume name is a string value object that holds the name of a volume to be added or mapped into a container.

    The volume name must comply with the following rules:

    • The length of the name must be between 1 and 63 characters, inclusive.

    • The name can only contain alphanumeric characters, underscores (_), and hyphens (-).

    The volume name is validated upon construction using the StringValueObjectValidator class.

    The VolumeName class provides the following functionality:

    • Construction of a VolumeName object using the companion object's of function.

    • Unwrapping the volume name value using the unwrap function.

    • Converting the volume name to a string representation using the toString function.

    See also

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(value: String)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The underlying string value of the volume name.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun compareTo(other: SimpleValueObject<String>): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun unwrap(): String
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/to-string.html new file mode 100644 index 00000000..0357abc1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/unwrap.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/unwrap.html new file mode 100644 index 00000000..f8170176 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/unwrap.html @@ -0,0 +1,80 @@ + + + + + unwrap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    unwrap

    +
    +
    open override fun unwrap(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/value.html new file mode 100644 index 00000000..26b3cdd9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume-name/value.html @@ -0,0 +1,80 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    value

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/-volume.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/-volume.html new file mode 100644 index 00000000..5547c4d8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/-volume.html @@ -0,0 +1,80 @@ + + + + + Volume + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Volume

    +
    +
    constructor(name: String, mountPath: String)(source)


    constructor(name: VolumeName, mountDir: UnixDir, hostDir: Path? = null, memoryBacked: Boolean = false, memory: Memory? = null)(source)

    Parameters

    name

    The name of the volume

    mountDir

    The path in the container where the volume will be mounted

    hostDir

    Only valid for Docker - if set, the volume will be mounted from the host

    memoryBacked

    Valid for Docker and Kubernetes - if true, the volume will be memory backed using tmpfs for Docker and emptyDir with medium 'Memory' for Kubernetes

    memory

    Valid for Docker and Kubernetes - if memoryBacked is true, this parameter will be used as the size limit for the memory backed volume

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/host-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/host-dir.html new file mode 100644 index 00000000..1baab903 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/host-dir.html @@ -0,0 +1,80 @@ + + + + + hostDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    hostDir

    +
    +
    val hostDir: Path? = null(source)

    Parameters

    hostDir

    Only valid for Docker - if set, the volume will be mounted from the host

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/index.html new file mode 100644 index 00000000..389760ac --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/index.html @@ -0,0 +1,188 @@ + + + + + Volume + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Volume

    +
    data class Volume(val name: VolumeName, val mountDir: UnixDir, val hostDir: Path? = null, val memoryBacked: Boolean = false, val memory: Memory? = null)(source)

    Value object representing a volume to be added or mapped into a container.

      +
    • For Docker, if the VolumeName exists as a Docker named volume, it will be used, and the hostDir will be ignored
    • For Kubernetes the VolumeName must either< refer to a corresponding PersistentVolume +- see PersistentVolume, or +memoryBacked must be true. In case of a PersistentVolume, the PersistentVolumeClaimName will be created and used irrespective +of the existence of the PersistentVolume - and will hence fail if no PersistentVolume exist.
    • +

    Parameters

    name

    The name of the volume

    mountDir

    The path in the container where the volume will be mounted

    hostDir

    Only valid for Docker - if set, the volume will be mounted from the host

    memoryBacked

    Valid for Docker and Kubernetes - if true, the volume will be memory backed using tmpfs for Docker and emptyDir with medium 'Memory' for Kubernetes

    memory

    Valid for Docker and Kubernetes - if memoryBacked is true, this parameter will be used as the size limit for the memory backed volume

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(name: String, mountPath: String)
    constructor(name: VolumeName, mountDir: UnixDir, hostDir: Path? = null, memoryBacked: Boolean = false, memory: Memory? = null)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val hostDir: Path? = null
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val memory: Memory? = null
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val memoryBacked: Boolean = false
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory-backed.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory-backed.html new file mode 100644 index 00000000..1e349263 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory-backed.html @@ -0,0 +1,80 @@ + + + + + memoryBacked + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    memoryBacked

    +
    +

    Parameters

    memoryBacked

    Valid for Docker and Kubernetes - if true, the volume will be memory backed using tmpfs for Docker and emptyDir with medium 'Memory' for Kubernetes

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory.html new file mode 100644 index 00000000..fe527328 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/memory.html @@ -0,0 +1,80 @@ + + + + + memory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    memory

    +
    +
    val memory: Memory? = null(source)

    Parameters

    memory

    Valid for Docker and Kubernetes - if memoryBacked is true, this parameter will be used as the size limit for the memory backed volume

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/mount-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/mount-dir.html new file mode 100644 index 00000000..89bc77a2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/mount-dir.html @@ -0,0 +1,80 @@ + + + + + mountDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    mountDir

    +
    +

    Parameters

    mountDir

    The path in the container where the volume will be mounted

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/name.html new file mode 100644 index 00000000..0860fb67 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/-volume/name.html @@ -0,0 +1,80 @@ + + + + + name + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    name

    +
    +

    Parameters

    name

    The name of the volume

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/index.html new file mode 100644 index 00000000..e4e9cea0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.model/index.html @@ -0,0 +1,568 @@ + + + + + no.acntech.easycontainers.model + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class Arg(val value: String) : SimpleValueObject<String>

    Value object representing a kubernetes/docker command argument.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class Args(val args: List<Arg>)

    Value object representing a list of kubernetes/docker command arguments.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    interface Container
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    A builder interface for creating container configurations.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class ContainerFile(val name: ContainerFileName, val mountPath: UnixDir, val content: String? = null, val hostFile: Path? = null)

    Value object representing a file to be added or mapped into a container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing a file name for a file to be added or mapped into a container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing the common rules for Docker and Kubernetes container names. Note that both container platforms have specific rules beyond these common rules.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Enum class representing the container types supported by the library.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Interface representing the runtime of a container - either Docker or Kubernetes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class CPU(val value: Double) : SimpleValueObject<Double>

    Value object representing a kubernetes/docker cpu request or limit.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class EnvVarKey(val value: String) : SimpleValueObject<String>

    Value object representing an environment variable key.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing an environment variable value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class Executable(val value: String) : SimpleValueObject<String>

    Value object representing an executable, i.e. a command line with optional arguments.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Enum class representing the execution mode of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class Host(val value: String) : SimpleValueObject<String>

    Value object representing a host.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class ImageName(val value: String) : SimpleValueObject<String>

    Value object representing a Docker (registry) image name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class ImageTag(val value: String) : SimpleValueObject<String>

    Value object representing a Docker image tag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class ImageURL(val registryUrl: RegistryURL, val repositoryName: RepositoryName, val imageName: ImageName, val tag: ImageTag = ImageTag.LATEST)

    Represents a Docker image URL consisting of a registry URL, repository name, image name, and tag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class LabelKey(val value: String) : SimpleValueObject<String>

    Value object representing a docker/kubernetes label key.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class LabelValue(val value: String) : SimpleValueObject<String>

    Value object representing a docker/kubernetes label value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing kubernetes/docker memory.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class Namespace(val value: String) : SimpleValueObject<String>

    Value object representing a kubernetes namespace.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing a Docker image tag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class NetworkPort(val value: Int) : SimpleValueObject<Int>

    Value object representing a network port - range 1-65535.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing a port mapping name

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Represents a URL of a registry.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Represents a repository name in a software repository system.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Value object representing a file name for a file to be added or mapped into a container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class UnixDir(val value: String) : SimpleValueObject<String>

    Represents a complete (starting with root '/') Unix directory path as a value object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Enum class representing different levels of verbosity.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class Volume(val name: VolumeName, val mountDir: UnixDir, val hostDir: Path? = null, val memoryBacked: Boolean = false, val memory: Memory? = null)

    Value object representing a volume to be added or mapped into a container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    value class VolumeName(val value: String) : SimpleValueObject<String>

    Represents a volume name.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/-line-reader.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/-line-reader.html new file mode 100644 index 00000000..7cbc60d8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/-line-reader.html @@ -0,0 +1,80 @@ + + + + + LineReader + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LineReader

    +
    +
    constructor(input: InputStream, callback: OutputLineCallback)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/index.html new file mode 100644 index 00000000..aabba35d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/index.html @@ -0,0 +1,138 @@ + + + + + LineReader + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LineReader

    +

    The LineReader class is responsible for reading lines from an input stream and invoking an OutputLineCallback for each line of output. Ideally, it should be used in a separate thread to avoid blocking the main thread.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(input: InputStream, callback: OutputLineCallback)
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun read()

    Reads lines from an input stream and invokes a callback function for each line of output. If the stream is exhausted, the thread is interrupted, or its explicitly stopped by calling stop on the reader, the reading process will stop.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun stop()

    Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/read.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/read.html new file mode 100644 index 00000000..0280ad5d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/read.html @@ -0,0 +1,80 @@ + + + + + read + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    read

    +
    +
    fun read()(source)

    Reads lines from an input stream and invokes a callback function for each line of output. If the stream is exhausted, the thread is interrupted, or its explicitly stopped by calling stop on the reader, the reading process will stop.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/stop.html new file mode 100644 index 00000000..336e7ca2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-line-reader/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    fun stop()(source)

    Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/index.html new file mode 100644 index 00000000..508b9c73 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/index.html @@ -0,0 +1,104 @@ + + + + + OutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    OutputLineCallback

    +
    fun interface OutputLineCallback(source)

    Functional interface for handling output from a container.

    Inheritors

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun onLine(line: String?)

    Callback for each line of output, new line character(s) are not included.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/on-line.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/on-line.html new file mode 100644 index 00000000..dd4cfa02 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-output-line-callback/on-line.html @@ -0,0 +1,80 @@ + + + + + onLine + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    onLine

    +
    +
    abstract fun onLine(line: String?)(source)

    Callback for each line of output, new line character(s) are not included.

    Parameters

    line

    the line of output (excluding new line character(s)) or null if end of stream

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/-slf4-j-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/-slf4-j-output-line-callback.html new file mode 100644 index 00000000..7d4f9337 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/-slf4-j-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + Slf4JOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Slf4JOutputLineCallback

    +
    +
    constructor(logger: Logger, level: Level = Level.INFO, marker: Marker? = null, prefix: String = EMPTY_STRING)(source)

    Parameters

    logger

    the SLF4J logger to use

    level

    the log level to use

    marker

    the marker to use

    prefix

    the prefix to use for each log line

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/index.html new file mode 100644 index 00000000..721e2ea4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/index.html @@ -0,0 +1,123 @@ + + + + + Slf4JOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Slf4JOutputLineCallback

    +
    class Slf4JOutputLineCallback(logger: Logger, level: Level = Level.INFO, marker: Marker? = null, prefix: String = EMPTY_STRING) : OutputLineCallback(source)

    OutputLineCallback implementation that logs output lines to a SLF4J logger.

    Parameters

    logger

    the SLF4J logger to use

    level

    the log level to use

    marker

    the marker to use

    prefix

    the prefix to use for each log line

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(logger: Logger, level: Level = Level.INFO, marker: Marker? = null, prefix: String = EMPTY_STRING)
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun onLine(line: String?)

    Callback for each line of output, new line character(s) are not included.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/on-line.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/on-line.html new file mode 100644 index 00000000..e664c842 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/on-line.html @@ -0,0 +1,80 @@ + + + + + onLine + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    onLine

    +
    +
    open override fun onLine(line: String?)(source)

    Callback for each line of output, new line character(s) are not included.

    Parameters

    line

    the line of output (excluding new line character(s)) or null if end of stream

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/index.html new file mode 100644 index 00000000..61e68b1c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.output/index.html @@ -0,0 +1,133 @@ + + + + + no.acntech.easycontainers.output + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class LineReader(input: InputStream, callback: OutputLineCallback)

    The LineReader class is responsible for reading lines from an input stream and invoking an OutputLineCallback for each line of output. Ideally, it should be used in a separate thread to avoid blocking the main thread.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun interface OutputLineCallback

    Functional interface for handling output from a container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class Slf4JOutputLineCallback(logger: Logger, level: Level = Level.INFO, marker: Marker? = null, prefix: String = EMPTY_STRING) : OutputLineCallback

    OutputLineCallback implementation that logs output lines to a SLF4J logger.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/index.html new file mode 100644 index 00000000..2087c7c2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/index.html @@ -0,0 +1,163 @@ + + + + + no.acntech.easycontainers.util.collections + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun List<*>.prettyPrint(offset: Int = 2, paddingChar: Char = ' '): String

    Returns a string representation of the list in a pretty format.

    fun Map<*, *>.prettyPrint(sortKeys: Boolean = true, offset: Int = 2, paddingChar: Char = ' ', keyValueSeparator: String = ": "): String

    Returns a string representation of the map in a pretty format.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts each element in the list to a string representation. If the element is null, it is converted to the string "null".

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts each key-value pair in the map to a string representation, where the key is converted to a String using its toString() method, and the value is converted to a String using its toString() method. If the key or value is null, it is converted to the string "null".

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts each element in the set to a string representation. If the element is null, it is converted to the string "null".

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/pretty-print.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/pretty-print.html new file mode 100644 index 00000000..f21eb414 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/pretty-print.html @@ -0,0 +1,80 @@ + + + + + prettyPrint + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    prettyPrint

    +
    +
    fun Map<*, *>.prettyPrint(sortKeys: Boolean = true, offset: Int = 2, paddingChar: Char = ' ', keyValueSeparator: String = ": "): String(source)

    Returns a string representation of the map in a pretty format.

    Return

    the string representation of the map

    Parameters

    sortKeys

    determines whether the keys should be sorted in ascending order (default is true)

    offset

    the number of spaces for indentation (default is 4)

    paddingChar

    the character used for padding (default is ' ')

    keyValueSeparator

    the separator between the key and value (default is ": ")


    fun List<*>.prettyPrint(offset: Int = 2, paddingChar: Char = ' '): String(source)

    Returns a string representation of the list in a pretty format.

    Return

    the string representation of the list

    Parameters

    offset

    the number of spaces for indentation (default is 2)

    paddingChar

    the character used for padding (default is ' ')

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-collection.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-collection.html new file mode 100644 index 00000000..deb28dce --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-collection.html @@ -0,0 +1,80 @@ + + + + + toStringCollection + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toStringCollection

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-list.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-list.html new file mode 100644 index 00000000..0497b2ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-list.html @@ -0,0 +1,80 @@ + + + + + toStringList + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toStringList

    +
    +

    Converts each element in the list to a string representation. If the element is null, it is converted to the string "null".

    Return

    a new list where each element is converted to its string representation.

    See also

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-map.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-map.html new file mode 100644 index 00000000..32cd5b0e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-map.html @@ -0,0 +1,80 @@ + + + + + toStringMap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toStringMap

    +
    +

    Converts each key-value pair in the map to a string representation, where the key is converted to a String using its toString() method, and the value is converted to a String using its toString() method. If the key or value is null, it is converted to the string "null".

    Return

    a new map where each key-value pair is converted to a string representation.

    See also

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-set.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-set.html new file mode 100644 index 00000000..493a7da6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.collections/to-string-set.html @@ -0,0 +1,80 @@ + + + + + toStringSet + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toStringSet

    +
    +

    Converts each element in the set to a string representation. If the element is null, it is converted to the string "null".

    Return

    a new list where each element is converted to its string representation.

    See also

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/index.html new file mode 100644 index 00000000..6587ee4d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/index.html @@ -0,0 +1,164 @@ + + + + + FileUtils + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FileUtils

    +

    The FileUtils class provides utility functions related to file operations.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the provided path is a complete Unix path.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun tar(dir: Path, includeParentDir: Boolean = false): InputStream

    Creates an input stream containing a TAR archive of the specified directory. Note that the piping to the input is done in a separate (virtual) thread.

    fun tar(dir: Path, output: OutputStream, includeParentDir: Boolean = false): Long

    fun tar(dir: Path, tarball: Path = Files.createTempFile("tar-${dir.name}-", TAR_EXTENSION), includeParentDir: Boolean = false): Path

    Creates a TAR archive of the specified directory.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun tarFile(filePath: Path, entryName: String): File

    Creates a TAR file containing the specified file and entry name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun untar(tarball: File, destination: Path = Files.createTempDirectory("untar-${tarball.name}-").toAbsolutePath()): Pair<Path, List<Path>>

    Extracts the contents of a tarball to a specified destination directory.

    fun untar(input: InputStream, destination: Path = Files.createTempDirectory("untar-").toAbsolutePath()): Pair<Path, List<Path>>

    Extracts the contents of a tarball from the given input stream to the specified destination directory.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun untarFile(tarFile: File, destination: Path = Files.createTempDirectory("untar-").toAbsolutePath()): Path

    Untars a single file from the specified TAR file to the specified destination. If the destination is a directory, the file will be extracted to the directory with the same name as the TAR entry. If the destination is a file, the file will be extracted to the destination file.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/is-complete-unix-path.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/is-complete-unix-path.html new file mode 100644 index 00000000..91182800 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/is-complete-unix-path.html @@ -0,0 +1,80 @@ + + + + + isCompleteUnixPath + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isCompleteUnixPath

    +
    +

    Checks if the provided path is a complete Unix path.

    Return

    Returns true if the provided path is a complete Unix path, otherwise false.

    Parameters

    path

    The path to check.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar-file.html new file mode 100644 index 00000000..e5e65d7d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar-file.html @@ -0,0 +1,80 @@ + + + + + tarFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    tarFile

    +
    +
    fun tarFile(filePath: Path, entryName: String): File(source)

    Creates a TAR file containing the specified file and entry name.

    Return

    The TAR file as a File object.

    Parameters

    filePath

    The file to be included in the TAR file.

    entryName

    The name of the entry (file) inside the TAR file.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html new file mode 100644 index 00000000..e54c0eb4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html @@ -0,0 +1,80 @@ + + + + + tar + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    tar

    +
    +
    fun tar(dir: Path, tarball: Path = Files.createTempFile("tar-${dir.name}-", TAR_EXTENSION), includeParentDir: Boolean = false): Path(source)

    Creates a TAR archive of the specified directory.

    Return

    The path of the TAR archive.

    Parameters

    dir

    The directory to be included in the TAR archive.

    tarball

    The path of the TAR archive to be created.

    includeParentDir

    Specifies whether to include the parent directory in the TAR archive. Default is false.


    fun tar(dir: Path, output: OutputStream, includeParentDir: Boolean = false): Long(source)


    fun tar(dir: Path, includeParentDir: Boolean = false): InputStream(source)

    Creates an input stream containing a TAR archive of the specified directory. Note that the piping to the input is done in a separate (virtual) thread.

    Return

    An input stream containing the TAR archive.

    Parameters

    dir

    The directory to be included in the TAR archive.

    includeParentDir

    Specifies whether to include the parent directory in the TAR archive. Default is false.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar-file.html new file mode 100644 index 00000000..2154aa27 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar-file.html @@ -0,0 +1,80 @@ + + + + + untarFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    untarFile

    +
    +
    fun untarFile(tarFile: File, destination: Path = Files.createTempDirectory("untar-").toAbsolutePath()): Path(source)

    Untars a single file from the specified TAR file to the specified destination. If the destination is a directory, the file will be extracted to the directory with the same name as the TAR entry. If the destination is a file, the file will be extracted to the destination file.

    Parameters

    tarFile

    The TAR file to extract.

    destination

    The destination to extract the TAR file to - either a directory or a file.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar.html new file mode 100644 index 00000000..3331f562 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar.html @@ -0,0 +1,80 @@ + + + + + untar + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    untar

    +
    +
    fun untar(tarball: File, destination: Path = Files.createTempDirectory("untar-${tarball.name}-").toAbsolutePath()): Pair<Path, List<Path>>(source)

    Extracts the contents of a tarball to a specified destination directory.

    Return

    A Pair containing the path of the destination directory and a list of extracted files.

    Parameters

    tarball

    The tarball file to be extracted.

    destination

    The destination directory where the contents should be extracted to. If not provided, a temporary directory will be created.

    Throws

    if the destination path is not a directory.


    fun untar(input: InputStream, destination: Path = Files.createTempDirectory("untar-").toAbsolutePath()): Pair<Path, List<Path>>(source)

    Extracts the contents of a tarball from the given input stream to the specified destination directory.

    Return

    A Pair containing the path of the destination directory and a list of extracted files.

    Parameters

    input

    The input stream of the tarball to be extracted.

    destination

    The destination directory where the contents should be extracted to. If not provided, a temporary directory will be created.

    Throws

    if the destination path is not a directory.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/close-quietly.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/close-quietly.html new file mode 100644 index 00000000..ad6478cf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/close-quietly.html @@ -0,0 +1,80 @@ + + + + + closeQuietly + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    closeQuietly

    +
    +

    Closes a Closeable object quietly, without throwing any exception.

    Receiver

    The Closeable object to be closed. It can be null.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/index.html new file mode 100644 index 00000000..91616d0f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/index.html @@ -0,0 +1,152 @@ + + + + + no.acntech.easycontainers.util.io + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object FileUtils

    The FileUtils class provides utility functions related to file operations.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Closes a Closeable object quietly, without throwing any exception.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun <T> pipe(operation: (OutputStream) -> T = { _: OutputStream -> null as T }): InputStream

    Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously. Streams are buffered.

    fun <T> pipe(operation: (OutputStream) -> T = { _: OutputStream -> null as T }, buffered: Boolean = true): InputStream

    Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/pipe.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/pipe.html new file mode 100644 index 00000000..5a567e64 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/pipe.html @@ -0,0 +1,80 @@ + + + + + pipe + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    pipe

    +
    +
    fun <T> pipe(operation: (OutputStream) -> T = { _: OutputStream -> null as T }): InputStream(source)

    Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously. Streams are buffered.

    Return

    An InputStream that reads from the output of the operation.

    Parameters

    operation

    The operation to execute in a separate thread. The operation receives an OutputStream as a parameter. The default operation is a no-op.


    fun <T> pipe(operation: (OutputStream) -> T = { _: OutputStream -> null as T }, buffered: Boolean = true): InputStream(source)

    Executes the given (write) operation in a separate (virtual) thread and returns an InputStream that reads from the result of the operation - effectively creating a "reactive" pipe between the OutputStream and the InputStream. This means that this method is non-blocking and the operation is executed asynchronously.

    Return

    An InputStream that reads from the output of the operation.

    Parameters

    operation

    The operation to execute in a separate thread. The operation receives an OutputStream as a parameter. The default operation is a no-op.

    buffered

    Specifies whether the InputStream and OutputStream should be buffered. Default is true.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/to-utf8-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/to-utf8-string.html new file mode 100644 index 00000000..94c6d0f0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.io/to-utf8-string.html @@ -0,0 +1,80 @@ + + + + + toUtf8String + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toUtf8String

    +
    +

    Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string.

    Return

    the UTF-8 string representation of the content in this ByteArrayOutputStream.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/-range-validator.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/-range-validator.html new file mode 100644 index 00000000..0c5cb202 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/-range-validator.html @@ -0,0 +1,80 @@ + + + + + RangeValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RangeValidator

    +
    +
    constructor(inclusiveMin: P? = null, exclusiveMin: P? = null, inclusiveMax: P? = null, exclusiveMax: P? = null)(source)

    Parameters

    P

    the type of the value in the range, must implement Comparable

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-max.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-max.html new file mode 100644 index 00000000..1e570ecf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-max.html @@ -0,0 +1,80 @@ + + + + + exclusiveMax + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    exclusiveMax

    +
    +
    val exclusiveMax: P? = null(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-min.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-min.html new file mode 100644 index 00000000..aa5cbfaa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-min.html @@ -0,0 +1,80 @@ + + + + + exclusiveMin + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    exclusiveMin

    +
    +
    val exclusiveMin: P? = null(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-max.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-max.html new file mode 100644 index 00000000..e9657d45 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-max.html @@ -0,0 +1,80 @@ + + + + + inclusiveMax + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    inclusiveMax

    +
    +
    val inclusiveMax: P? = null(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-min.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-min.html new file mode 100644 index 00000000..0922a90a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-min.html @@ -0,0 +1,80 @@ + + + + + inclusiveMin + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    inclusiveMin

    +
    +
    val inclusiveMin: P? = null(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/index.html new file mode 100644 index 00000000..516cd783 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/index.html @@ -0,0 +1,187 @@ + + + + + RangeValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RangeValidator

    +
    data class RangeValidator<P : Comparable<P>>(val inclusiveMin: P? = null, val exclusiveMin: P? = null, val inclusiveMax: P? = null, val exclusiveMax: P? = null) : Validator<P> (source)

    Represents a validation range for a comparable value.

    Parameters

    P

    the type of the value in the range, must implement Comparable

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(inclusiveMin: P? = null, exclusiveMin: P? = null, inclusiveMax: P? = null, exclusiveMax: P? = null)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val exclusiveMax: P? = null

    the exclusive maximum value of the range (optional)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val exclusiveMin: P? = null

    the exclusive minimum value of the range (optional)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val inclusiveMax: P? = null

    the inclusive maximum value of the range (optional)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val inclusiveMin: P? = null

    the inclusive minimum value of the range (optional)

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun validate(t: P)

    Validates the given object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/validate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/validate.html new file mode 100644 index 00000000..b2546998 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/validate.html @@ -0,0 +1,80 @@ + + + + + validate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    validate

    +
    +
    open override fun validate(t: P)(source)

    Validates the given object.

    Parameters

    t

    the object to validate

    Throws

    if the object is not valid

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-s-n-a-k-e_-t-o_-c-a-m-e-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-s-n-a-k-e_-t-o_-c-a-m-e-l.html new file mode 100644 index 00000000..bbe88223 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-s-n-a-k-e_-t-o_-c-a-m-e-l.html @@ -0,0 +1,80 @@ + + + + + SNAKE_TO_CAMEL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SNAKE_TO_CAMEL

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-transform/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-transform/index.html new file mode 100644 index 00000000..c836eaa2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-transform/index.html @@ -0,0 +1,84 @@ + + + + + Transform + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Transform

    +
    typealias Transform<T, R> = (T) -> R(source)
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html new file mode 100644 index 00000000..c3db6fb2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html @@ -0,0 +1,80 @@ + + + + + ValidationException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ValidationException

    +
    +
    constructor()(source)
    constructor(message: String)(source)
    constructor(message: String, cause: Throwable)(source)
    constructor(cause: Throwable)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/index.html new file mode 100644 index 00000000..608f1d97 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/index.html @@ -0,0 +1,262 @@ + + + + + ValidationException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ValidationException

    +

    Exception that is thrown when a validation error occurs.

    Parameters

    message

    The detail message.

    cause

    The cause of the exception.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    constructor(message: String)
    constructor(message: String, cause: Throwable)
    constructor(cause: Throwable)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val cause: Throwable?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val message: String?
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/index.html new file mode 100644 index 00000000..1257dff4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/index.html @@ -0,0 +1,104 @@ + + + + + Validator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Validator

    +
    interface Validator<T>(source)

    Interface for validating objects.

    Inheritors

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun validate(t: T)

    Validates the given object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/validate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/validate.html new file mode 100644 index 00000000..ac96525f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/-validator/validate.html @@ -0,0 +1,80 @@ + + + + + validate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    validate

    +
    +
    abstract fun validate(t: T)(source)

    Validates the given object.

    Parameters

    t

    the object to validate

    Throws

    if the object is not valid

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/as-string-map.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/as-string-map.html new file mode 100644 index 00000000..c01db157 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/as-string-map.html @@ -0,0 +1,80 @@ + + + + + asStringMap + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    asStringMap

    +
    +
    fun Any.asStringMap(defaultOverrides: Map<String, Any?> = emptyMap(), visited: MutableSet<Any> = mutableSetOf(), depth: Int = 0, maxDepth: Int = MAX_DEPTH): Map<String, Any?>(source)

    Converts an object to a Map representation, including its properties or Java bean properties.

    Return

    a map representation of the object, with property names as keys and property values as values

    Parameters

    defaultOverrides

    a map of default properties to override the retrieved properties

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/create-case-format-transform-function.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/create-case-format-transform-function.html new file mode 100644 index 00000000..b388dba0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/create-case-format-transform-function.html @@ -0,0 +1,80 @@ + + + + + createCaseFormatTransformFunction + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    createCaseFormatTransformFunction

    +
    +
    fun createCaseFormatTransformFunction(fromFormat: CaseFormat, toFormat: CaseFormat): Transform<String, String>(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-finally.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-finally.html new file mode 100644 index 00000000..ae99ebb6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-finally.html @@ -0,0 +1,80 @@ + + + + + defaultFinally + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultFinally

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-no-match-handler.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-no-match-handler.html new file mode 100644 index 00000000..2d2cea03 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-no-match-handler.html @@ -0,0 +1,80 @@ + + + + + defaultNoMatchHandler + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultNoMatchHandler

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-on-error.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-on-error.html new file mode 100644 index 00000000..b6178a8b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/default-on-error.html @@ -0,0 +1,80 @@ + + + + + defaultOnError + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultOnError

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/guarded-execution.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/guarded-execution.html new file mode 100644 index 00000000..2a0f5620 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/guarded-execution.html @@ -0,0 +1,105 @@ + + + + + guardedExecution + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    guardedExecution

    +
    +
    inline fun guardedExecution(block: () -> Unit, errors: List<KClass<out Exception>> = listOf(Exception::class), noinline onError: (Exception) -> Unit = { e -> defaultOnError(e) }, noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, finallyBlock: () -> Unit = { defaultFinally() })(source)

    Guards a given block of code, and calls the onError function if any of the specified exceptions (or their subclasses) are thrown. If the thrown exception is not one of the specified exceptions (or a subclass), the noMatchHandler function is called. The finallyBlock is always executed, defaulting to an empty function.

    +Example usage: +

    
    +guardedExecution(
    +    {
    +    // Code which might throw an exception
    +    throw IllegalStateException("An error has occurred!")
    +    },
    +    listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") },
    +    { e: Exception -> println("No match handler for: ${e.message}") },
    +    { println("Finally block executed") }
    +)
    +

    Parameters

    block

    The block of code to guard.

    errors

    The exceptions to guard against. Defaults to Exception.

    onError

    The function to call if any of the specified exceptions are thrown. Defaults to an empty function.

    noMatchHandler

    The function to call if the thrown exception is not one of the specified exceptions. Defaults to rethrowing the exception.

    finallyBlock

    The block of code to execute after the guarded block, regardless of whether an exception was thrown or not.


    inline fun guardedExecution(block: () -> Unit, vararg handlers: Pair<List<KClass<out Exception>>, (Exception) -> Unit>, noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, finallyBlock: () -> Unit = { defaultFinally() })(source)

    A more generic version of the guardedExecution function, which allows for specifying a list of pairs of exception classes and their corresponding handler functions. If an exception is thrown, the first matching handler is called. If no handler matches, the noMatchHandler is called. If noMatchHandler is not specified, the exception is rethrown. The finallyBlock is always executed, defaulting to an empty function.

    Example usage:

    
    +guardedExecution(
    +    {
    +        // Code which might throw an exception
    +        throw IllegalStateException("An error has occurred!")
    +    },
    +    arrayOf(
    +        listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") },
    +        listOf(RuntimeException::class) to { e: Exception -> println("Handle RuntimeException: ${e.message}") }
    +    ),
    +    { e: Exception -> println("No match handler for: ${e.message}") },
    +    { println("Finally block executed") }
    +)
    +

    Parameters

    block

    The block of code to guard.

    handlers

    A list of pairs, where the first element is a list of exception classes, and the second element is the handler function to be called if any of the exception classes matches.

    noMatchHandler

    The function to call if no handler matches the error's class. Defaults to throwing the error.

    finallyBlock

    The block of code to execute after the guarded block, regardless of whether an exception was thrown or not.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/identity-transform.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/identity-transform.html new file mode 100644 index 00000000..459691b8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/identity-transform.html @@ -0,0 +1,80 @@ + + + + + identityTransform + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    identityTransform

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/index.html new file mode 100644 index 00000000..be8a99b6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/index.html @@ -0,0 +1,291 @@ + + + + + no.acntech.easycontainers.util.lang + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class RangeValidator<P : Comparable<P>>(val inclusiveMin: P? = null, val exclusiveMin: P? = null, val inclusiveMax: P? = null, val exclusiveMax: P? = null) : Validator<P>

    Represents a validation range for a comparable value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    typealias Transform<T, R> = (T) -> R
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Exception that is thrown when a validation error occurs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    interface Validator<T>

    Interface for validating objects.

    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun Any.asStringMap(defaultOverrides: Map<String, Any?> = emptyMap(), visited: MutableSet<Any> = mutableSetOf(), depth: Int = 0, maxDepth: Int = MAX_DEPTH): Map<String, Any?>

    Converts an object to a Map representation, including its properties or Java bean properties.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun createCaseFormatTransformFunction(fromFormat: CaseFormat, toFormat: CaseFormat): Transform<String, String>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    inline fun guardedExecution(block: () -> Unit, vararg handlers: Pair<List<KClass<out Exception>>, (Exception) -> Unit>, noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, finallyBlock: () -> Unit = { defaultFinally() })

    A more generic version of the guardedExecution function, which allows for specifying a list of pairs of exception classes and their corresponding handler functions. If an exception is thrown, the first matching handler is called. If no handler matches, the noMatchHandler is called. If noMatchHandler is not specified, the exception is rethrown. The finallyBlock is always executed, defaulting to an empty function.

    inline fun guardedExecution(block: () -> Unit, errors: List<KClass<out Exception>> = listOf(Exception::class), noinline onError: (Exception) -> Unit = { e -> defaultOnError(e) }, noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, finallyBlock: () -> Unit = { defaultFinally() })

    Guards a given block of code, and calls the onError function if any of the specified exceptions (or their subclasses) are thrown. If the thrown exception is not one of the specified exceptions (or a subclass), the noMatchHandler function is called. The finallyBlock is always executed, defaulting to an empty function.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun Any.prettyPrintMe(fallbackMap: Map<String, Any> = emptyMap()): String

    Returns a string representation of the calling object in a pretty format.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/pretty-print-me.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/pretty-print-me.html new file mode 100644 index 00000000..356695b9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.lang/pretty-print-me.html @@ -0,0 +1,80 @@ + + + + + prettyPrintMe + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    prettyPrintMe

    +
    +
    fun Any.prettyPrintMe(fallbackMap: Map<String, Any> = emptyMap()): String(source)

    Returns a string representation of the calling object in a pretty format.

    Return

    the string representation of the object

    Parameters

    fallbackMap

    the fallback map to use if conversion to map fails (default is an empty map)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/get-local-ip-addresses.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/get-local-ip-addresses.html new file mode 100644 index 00000000..dad5d04d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/get-local-ip-addresses.html @@ -0,0 +1,80 @@ + + + + + getLocalIpAddresses + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getLocalIpAddresses

    +
    +

    Retrieves the list of local IP addresses.

    This method loops through all the network interfaces of the system and collects the IP addresses that are not loopback addresses and are site local addresses. The collected IP addresses are added to a list and returned.

    Return

    A list of local IP addresses.

    Throws

    if an error occurs while retrieving the network interfaces.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/index.html new file mode 100644 index 00000000..289b5589 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/index.html @@ -0,0 +1,134 @@ + + + + + NetworkUtils + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NetworkUtils

    +

    The NetworkUtils class provides utility methods related to network operations.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the list of local IP addresses.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun isIp4Address(ipAddress: String): Boolean

    Checks if the given string represents a valid IPv4 address.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun isTcpPortOpen(host: String, port: Int, timeoutMillis: Int = 5000): Boolean

    Checks if a given port on a host is open and reachable - similar to the 'nc -z' *nix command.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-ip4-address.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-ip4-address.html new file mode 100644 index 00000000..9492e31c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-ip4-address.html @@ -0,0 +1,80 @@ + + + + + isIp4Address + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isIp4Address

    +
    +
    fun isIp4Address(ipAddress: String): Boolean(source)

    Checks if the given string represents a valid IPv4 address.

    Return

    true if the given string is a valid IPv4 address, false otherwise

    Parameters

    ipAddress

    the string representing the IP address to be checked

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-tcp-port-open.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-tcp-port-open.html new file mode 100644 index 00000000..202c05b2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-tcp-port-open.html @@ -0,0 +1,80 @@ + + + + + isTcpPortOpen + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isTcpPortOpen

    +
    +
    fun isTcpPortOpen(host: String, port: Int, timeoutMillis: Int = 5000): Boolean(source)

    Checks if a given port on a host is open and reachable - similar to the 'nc -z' *nix command.

    Return

    true if the port is open and reachable, false otherwise

    Parameters

    host

    the hostname or IP address of the host

    port

    the port number to check

    timeoutMillis

    the timeout in milliseconds for the connection attempt (default is 5000 milliseconds)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/index.html new file mode 100644 index 00000000..454dbbab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.net/index.html @@ -0,0 +1,103 @@ + + + + + no.acntech.easycontainers.util.net + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The NetworkUtils class provides utility methods related to network operations.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-to-docker-path.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-to-docker-path.html new file mode 100644 index 00000000..faa4c66b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-to-docker-path.html @@ -0,0 +1,80 @@ + + + + + convertToDockerPath + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    convertToDockerPath

    +
    +

    Converts a Path to a string that can be used in a Docker command. Example: "C:\Users\path" -> "/mnt/c/Users/path" (WSL) or "C:/Users/path" (Docker Desktop)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-unix-path-to-windows-wsl-path.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-unix-path-to-windows-wsl-path.html new file mode 100644 index 00000000..a5a1726e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-unix-path-to-windows-wsl-path.html @@ -0,0 +1,80 @@ + + + + + convertUnixPathToWindowsWslPath + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    convertUnixPathToWindowsWslPath

    +
    +
    fun convertUnixPathToWindowsWslPath(linuxPath: String, distroName: String? = getDefaultWslDistro()): String(source)

    Converts a Linux-style path to a Windows-style path for use in WSL. Example: "/home/johndoe/myfile.txt" -> "\\wsl$\Ubuntu\home\johndoe\myfile.txt"

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix-wsl-path.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix-wsl-path.html new file mode 100644 index 00000000..f0b2d0ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix-wsl-path.html @@ -0,0 +1,80 @@ + + + + + convertWindowsPathToUnixWslPath + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    convertWindowsPathToUnixWslPath

    +
    +
    fun convertWindowsPathToUnixWslPath(windowsPath: String, distroName: String? = getDefaultWslDistro()): String(source)

    Converts a Windows-style path to a Linux-style path for use in WSL. Example: "C:\Users\path" -> "/mnt/c/Users/path"

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix.html new file mode 100644 index 00000000..b8c3cb9e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix.html @@ -0,0 +1,80 @@ + + + + + convertWindowsPathToUnix + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    convertWindowsPathToUnix

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/create-directory-in-wsl.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/create-directory-in-wsl.html new file mode 100644 index 00000000..5c5c90e9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/create-directory-in-wsl.html @@ -0,0 +1,80 @@ + + + + + createDirectoryInWsl + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    createDirectoryInWsl

    +
    +
    fun createDirectoryInWsl(linuxPath: String, distroName: String? = getDefaultWslDistro()): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-default-wsl-distro.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-default-wsl-distro.html new file mode 100644 index 00000000..914b6bec --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-default-wsl-distro.html @@ -0,0 +1,80 @@ + + + + + getDefaultWslDistro + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getDefaultWslDistro

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-distro-names.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-distro-names.html new file mode 100644 index 00000000..9d0cb9ae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-distro-names.html @@ -0,0 +1,80 @@ + + + + + getWslDistroNames + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getWslDistroNames

    +
    +

    Retrieves the names of the Windows Subsystem for Linux (WSL) distributions installed on the system. Returns an empty list if the current operating system is not Windows.

    Return

    a list of strings containing the names of the WSL distributions.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-ip-address.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-ip-address.html new file mode 100644 index 00000000..3fb97fbf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-ip-address.html @@ -0,0 +1,80 @@ + + + + + getWslIpAddress + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getWslIpAddress

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/index.html new file mode 100644 index 00000000..094b0053 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/index.html @@ -0,0 +1,284 @@ + + + + + PlatformUtils + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PlatformUtils

    +

    Utility class for platform-specific operations.

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Converts a Path to a string that can be used in a Docker command. Example: "C:\Users\path" -> "/mnt/c/Users/path" (WSL) or "C:/Users/path" (Docker Desktop)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun convertUnixPathToWindowsWslPath(linuxPath: String, distroName: String? = getDefaultWslDistro()): String

    Converts a Linux-style path to a Windows-style path for use in WSL. Example: "/home/johndoe/myfile.txt" -> "\\wsl$\Ubuntu\home\johndoe\myfile.txt"

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun convertWindowsPathToUnixWslPath(windowsPath: String, distroName: String? = getDefaultWslDistro()): String

    Converts a Windows-style path to a Linux-style path for use in WSL. Example: "C:\Users\path" -> "/mnt/c/Users/path"

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun createDirectoryInWsl(linuxPath: String, distroName: String? = getDefaultWslDistro()): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the names of the Windows Subsystem for Linux (WSL) distributions installed on the system. Returns an empty list if the current operating system is not Windows.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the current operating system is Linux.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun isMac(): Boolean

    Checks if the current operating system is macOS.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the current operating system is Windows.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if Windows Subsystem for Linux (WSL) is installed on the system.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-docker-desktop-on-windows.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-docker-desktop-on-windows.html new file mode 100644 index 00000000..d53ef7eb --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-docker-desktop-on-windows.html @@ -0,0 +1,80 @@ + + + + + isDockerDesktopOnWindows + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isDockerDesktopOnWindows

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-linux.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-linux.html new file mode 100644 index 00000000..b63f0323 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-linux.html @@ -0,0 +1,80 @@ + + + + + isLinux + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isLinux

    +
    +

    Checks if the current operating system is Linux.

    Return

    true if the current operating system is Linux, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-mac.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-mac.html new file mode 100644 index 00000000..bd03a88a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-mac.html @@ -0,0 +1,80 @@ + + + + + isMac + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isMac

    +
    +

    Checks if the current operating system is macOS.

    Return

    true if the operating system is macOS, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-windows.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-windows.html new file mode 100644 index 00000000..1841ec42 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-windows.html @@ -0,0 +1,80 @@ + + + + + isWindows + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isWindows

    +
    +

    Checks if the current operating system is Windows.

    Return

    true if the current operating system is Windows, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-wsl-installed.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-wsl-installed.html new file mode 100644 index 00000000..1e6a184d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-wsl-installed.html @@ -0,0 +1,80 @@ + + + + + isWslInstalled + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isWslInstalled

    +
    +

    Checks if Windows Subsystem for Linux (WSL) is installed on the system.

    Return

    true if WSL is installed, false otherwise.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/index.html new file mode 100644 index 00000000..737f1d16 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.platform/index.html @@ -0,0 +1,103 @@ + + + + + no.acntech.easycontainers.util.platform + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Utility class for platform-specific operations.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-m-p-e-r-s-a-n-d.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-m-p-e-r-s-a-n-d.html new file mode 100644 index 00000000..99b8318f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-m-p-e-r-s-a-n-d.html @@ -0,0 +1,80 @@ + + + + + AMPERSAND + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AMPERSAND

    +
    +
    const val AMPERSAND: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-s-t-e-r-i-s-k.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-s-t-e-r-i-s-k.html new file mode 100644 index 00000000..6b89916d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-s-t-e-r-i-s-k.html @@ -0,0 +1,80 @@ + + + + + ASTERISK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ASTERISK

    +
    +
    const val ASTERISK: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-t_-s-i-g-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-t_-s-i-g-n.html new file mode 100644 index 00000000..2359af80 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-a-t_-s-i-g-n.html @@ -0,0 +1,80 @@ + + + + + AT_SIGN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AT_SIGN

    +
    +
    const val AT_SIGN: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k-t-i-c-k.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k-t-i-c-k.html new file mode 100644 index 00000000..cabaf7af --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k-t-i-c-k.html @@ -0,0 +1,80 @@ + + + + + BACKTICK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    BACKTICK

    +
    +
    const val BACKTICK: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k_-s-l-a-s-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k_-s-l-a-s-h.html new file mode 100644 index 00000000..4d5c5ff8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k_-s-l-a-s-h.html @@ -0,0 +1,80 @@ + + + + + BACK_SLASH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    BACK_SLASH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-a-r-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-a-r-e-t.html new file mode 100644 index 00000000..526cf644 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-a-r-e-t.html @@ -0,0 +1,80 @@ + + + + + CARET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CARET

    +
    +
    const val CARET: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-l-o-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-l-o-n.html new file mode 100644 index 00000000..53337401 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-l-o-n.html @@ -0,0 +1,80 @@ + + + + + COLON + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    COLON

    +
    +
    const val COLON: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a.html new file mode 100644 index 00000000..eac0ac37 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a.html @@ -0,0 +1,80 @@ + + + + + COMMA + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    COMMA

    +
    +
    const val COMMA: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a_-s-p-a-c-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a_-s-p-a-c-e.html new file mode 100644 index 00000000..a86f3c39 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a_-s-p-a-c-e.html @@ -0,0 +1,80 @@ + + + + + COMMA_SPACE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    COMMA_SPACE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r-l-f.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r-l-f.html new file mode 100644 index 00000000..b224c5e8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r-l-f.html @@ -0,0 +1,80 @@ + + + + + CRLF + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CRLF

    +
    +
    const val CRLF: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r.html new file mode 100644 index 00000000..9e8a256c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-c-r.html @@ -0,0 +1,80 @@ + + + + + CR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    CR

    +
    +
    const val CR: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-l-l-a-r_-s-i-g-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-l-l-a-r_-s-i-g-n.html new file mode 100644 index 00000000..45776cf7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-l-l-a-r_-s-i-g-n.html @@ -0,0 +1,80 @@ + + + + + DOLLAR_SIGN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DOLLAR_SIGN

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-t.html new file mode 100644 index 00000000..bf376e16 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-t.html @@ -0,0 +1,80 @@ + + + + + DOT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DOT

    +
    +
    const val DOT: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-u-b-l-e_-q-u-o-t-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-u-b-l-e_-q-u-o-t-e.html new file mode 100644 index 00000000..3c95bccd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-d-o-u-b-l-e_-q-u-o-t-e.html @@ -0,0 +1,80 @@ + + + + + DOUBLE_QUOTE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DOUBLE_QUOTE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-m-p-t-y_-s-t-r-i-n-g.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-m-p-t-y_-s-t-r-i-n-g.html new file mode 100644 index 00000000..9d4a76f3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-m-p-t-y_-s-t-r-i-n-g.html @@ -0,0 +1,80 @@ + + + + + EMPTY_STRING + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EMPTY_STRING

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q-u-a-l-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q-u-a-l-s.html new file mode 100644 index 00000000..176dc352 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q-u-a-l-s.html @@ -0,0 +1,80 @@ + + + + + EQUALS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EQUALS

    +
    +
    const val EQUALS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q.html new file mode 100644 index 00000000..fb0d8617 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-q.html @@ -0,0 +1,80 @@ + + + + + EQ + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EQ

    +
    +
    const val EQ: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-x-c-l-a-m-a-t-i-o-n_-m-a-r-k.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-x-c-l-a-m-a-t-i-o-n_-m-a-r-k.html new file mode 100644 index 00000000..9ff3347d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-e-x-c-l-a-m-a-t-i-o-n_-m-a-r-k.html @@ -0,0 +1,80 @@ + + + + + EXCLAMATION_MARK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    EXCLAMATION_MARK

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-f-o-r-w-a-r-d_-s-l-a-s-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-f-o-r-w-a-r-d_-s-l-a-s-h.html new file mode 100644 index 00000000..1f6cae4f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-f-o-r-w-a-r-d_-s-l-a-s-h.html @@ -0,0 +1,80 @@ + + + + + FORWARD_SLASH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FORWARD_SLASH

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t.html new file mode 100644 index 00000000..20ed4fe6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t.html @@ -0,0 +1,80 @@ + + + + + GT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GT

    +
    +
    const val GT: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t_-e-q.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t_-e-q.html new file mode 100644 index 00000000..fdb32817 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-g-t_-e-q.html @@ -0,0 +1,80 @@ + + + + + GT_EQ + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GT_EQ

    +
    +
    const val GT_EQ: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-a-s-h.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-a-s-h.html new file mode 100644 index 00000000..8acc349b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-a-s-h.html @@ -0,0 +1,80 @@ + + + + + HASH + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HASH

    +
    +
    const val HASH: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-y-p-h-e-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-y-p-h-e-n.html new file mode 100644 index 00000000..bd61dd65 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-h-y-p-h-e-n.html @@ -0,0 +1,80 @@ + + + + + HYPHEN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    HYPHEN

    +
    +
    const val HYPHEN: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html new file mode 100644 index 00000000..cb0b519c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html @@ -0,0 +1,80 @@ + + + + + LEFT_CURLY_BRACKET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LEFT_CURLY_BRACKET

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-p-a-r-e-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-p-a-r-e-n.html new file mode 100644 index 00000000..a9336349 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-p-a-r-e-n.html @@ -0,0 +1,80 @@ + + + + + LEFT_PAREN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LEFT_PAREN

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html new file mode 100644 index 00000000..8dbb0fe1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html @@ -0,0 +1,80 @@ + + + + + LEFT_SQUARE_BRACKET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LEFT_SQUARE_BRACKET

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t.html new file mode 100644 index 00000000..443f5ab0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t.html @@ -0,0 +1,80 @@ + + + + + LT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LT

    +
    +
    const val LT: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-e-q.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-e-q.html new file mode 100644 index 00000000..9475cc71 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-e-q.html @@ -0,0 +1,80 @@ + + + + + LT_EQ + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LT_EQ

    +
    +
    const val LT_EQ: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-g-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-g-t.html new file mode 100644 index 00000000..4712a9c1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-l-t_-g-t.html @@ -0,0 +1,80 @@ + + + + + LT_GT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LT_GT

    +
    +
    const val LT_GT: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/-length-validator.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/-length-validator.html new file mode 100644 index 00000000..4ea9bd20 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/-length-validator.html @@ -0,0 +1,80 @@ + + + + + LengthValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LengthValidator

    +
    +
    constructor(min: Int?, max: Int?)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/index.html new file mode 100644 index 00000000..59ce4a05 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/index.html @@ -0,0 +1,157 @@ + + + + + LengthValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    LengthValidator

    +
    data class LengthValidator(val min: Int?, val max: Int?) : Validator<String> (source)

    A validator that forces a string to be of a certain length.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(min: Int?, max: Int?)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val max: Int?

    The maximum length of the string.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    val min: Int?

    The minimum length of the string.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun validate(t: String)

    Validates the given object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/max.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/max.html new file mode 100644 index 00000000..165a2ae8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/max.html @@ -0,0 +1,80 @@ + + + + + max + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    max

    +
    +
    val max: Int?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/min.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/min.html new file mode 100644 index 00000000..9e44876c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/min.html @@ -0,0 +1,80 @@ + + + + + min + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    min

    +
    +
    val min: Int?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/validate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/validate.html new file mode 100644 index 00000000..f61e9da7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-length-validator/validate.html @@ -0,0 +1,80 @@ + + + + + validate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    validate

    +
    +
    open override fun validate(t: String)(source)

    Validates the given object.

    Parameters

    t

    the object to validate

    Throws

    if the object is not valid

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-m-i-n-u-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-m-i-n-u-s.html new file mode 100644 index 00000000..94eb45be --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-m-i-n-u-s.html @@ -0,0 +1,80 @@ + + + + + MINUS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    MINUS

    +
    +
    const val MINUS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-n-e-w_-l-i-n-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-n-e-w_-l-i-n-e.html new file mode 100644 index 00000000..3d424d23 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-n-e-w_-l-i-n-e.html @@ -0,0 +1,80 @@ + + + + + NEW_LINE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    NEW_LINE

    +
    +
    const val NEW_LINE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-e-r-c-e-n-t_-s-i-g-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-e-r-c-e-n-t_-s-i-g-n.html new file mode 100644 index 00000000..f951f58d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-e-r-c-e-n-t_-s-i-g-n.html @@ -0,0 +1,80 @@ + + + + + PERCENT_SIGN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PERCENT_SIGN

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-i-p-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-i-p-e.html new file mode 100644 index 00000000..595a21a1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-i-p-e.html @@ -0,0 +1,80 @@ + + + + + PIPE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PIPE

    +
    +
    const val PIPE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-l-u-s.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-l-u-s.html new file mode 100644 index 00000000..31414d86 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-p-l-u-s.html @@ -0,0 +1,80 @@ + + + + + PLUS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PLUS

    +
    +
    const val PLUS: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-q-u-e-s-t-i-o-n_-m-a-r-k.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-q-u-e-s-t-i-o-n_-m-a-r-k.html new file mode 100644 index 00000000..cdcaeee3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-q-u-e-s-t-i-o-n_-m-a-r-k.html @@ -0,0 +1,80 @@ + + + + + QUESTION_MARK + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    QUESTION_MARK

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html new file mode 100644 index 00000000..68ddcec9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html @@ -0,0 +1,80 @@ + + + + + RIGHT_CURLY_BRACKET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RIGHT_CURLY_BRACKET

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-p-a-r-e-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-p-a-r-e-n.html new file mode 100644 index 00000000..803e306c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-p-a-r-e-n.html @@ -0,0 +1,80 @@ + + + + + RIGHT_PAREN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RIGHT_PAREN

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html new file mode 100644 index 00000000..dd8fbda1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html @@ -0,0 +1,80 @@ + + + + + RIGHT_SQUARE_BRACKET + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RIGHT_SQUARE_BRACKET

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/-regex-validator.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/-regex-validator.html new file mode 100644 index 00000000..06deef7a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/-regex-validator.html @@ -0,0 +1,80 @@ + + + + + RegexValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RegexValidator

    +
    +
    constructor(pattern: Regex)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/equals.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/equals.html new file mode 100644 index 00000000..bf7b8111 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/equals.html @@ -0,0 +1,80 @@ + + + + + equals + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    equals

    +
    +
    open operator override fun equals(other: Any?): Boolean(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/hash-code.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/hash-code.html new file mode 100644 index 00000000..da66c951 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/hash-code.html @@ -0,0 +1,80 @@ + + + + + hashCode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    hashCode

    +
    +
    open override fun hashCode(): Int(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/index.html new file mode 100644 index 00000000..045806b4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/index.html @@ -0,0 +1,187 @@ + + + + + RegexValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    RegexValidator

    +
    class RegexValidator(val pattern: Regex) : Validator<String> (source)

    A validator that uses regular expressions to validate strings.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(pattern: Regex)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The regular expression pattern used for validation.

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open operator override fun equals(other: Any?): Boolean
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun hashCode(): Int
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun validate(t: String)

    Validates the given object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/pattern.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/pattern.html new file mode 100644 index 00000000..aae7a879 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/pattern.html @@ -0,0 +1,80 @@ + + + + + pattern + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    pattern

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/to-string.html new file mode 100644 index 00000000..8ddf6441 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/validate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/validate.html new file mode 100644 index 00000000..910f34ad --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/validate.html @@ -0,0 +1,80 @@ + + + + + validate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    validate

    +
    +
    open override fun validate(t: String)(source)

    Validates the given object.

    Parameters

    t

    the object to validate

    Throws

    if the object is not valid

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-e-m-i-c-o-l-o-n.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-e-m-i-c-o-l-o-n.html new file mode 100644 index 00000000..6b87b2e7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-e-m-i-c-o-l-o-n.html @@ -0,0 +1,80 @@ + + + + + SEMICOLON + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SEMICOLON

    +
    +
    const val SEMICOLON: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-i-n-g-l-e_-q-u-o-t-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-i-n-g-l-e_-q-u-o-t-e.html new file mode 100644 index 00000000..f1e2b87c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-i-n-g-l-e_-q-u-o-t-e.html @@ -0,0 +1,80 @@ + + + + + SINGLE_QUOTE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SINGLE_QUOTE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-p-a-c-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-p-a-c-e.html new file mode 100644 index 00000000..9a314bde --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-s-p-a-c-e.html @@ -0,0 +1,80 @@ + + + + + SPACE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SPACE

    +
    +
    const val SPACE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/-string-validator.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/-string-validator.html new file mode 100644 index 00000000..32c2cd9a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/-string-validator.html @@ -0,0 +1,80 @@ + + + + + StringValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    StringValidator

    +
    +
    constructor(minLength: Int? = null, maxLength: Int? = null, rangeValidator: RangeValidator<String>? = null, lexicalValidator: Validator<String>? = null, syntaxValidator: Validator<String>? = null, semanticsValidator: Validator<String>? = null)(source)

    Parameters

    minLength

    the minimum length of the String value object (optional)

    maxLength

    the maximum length of the String value object (optional)

    rangeValidator

    the range validator for the String value object (optional)

    lexicalValidator

    the lexical validator for the String value object (optional)

    syntaxValidator

    the syntax validator for the String value object (optional)

    semanticsValidator

    the semantics validator for the String value object (optional)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/index.html new file mode 100644 index 00000000..0bd319e5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/index.html @@ -0,0 +1,123 @@ + + + + + StringValidator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    StringValidator

    +
    class StringValidator(minLength: Int? = null, maxLength: Int? = null, rangeValidator: RangeValidator<String>? = null, lexicalValidator: Validator<String>? = null, syntaxValidator: Validator<String>? = null, semanticsValidator: Validator<String>? = null) : Validator<String> (source)

    Validates a String value object based on a given range and additional validators.

    Parameters

    minLength

    the minimum length of the String value object (optional)

    maxLength

    the maximum length of the String value object (optional)

    rangeValidator

    the range validator for the String value object (optional)

    lexicalValidator

    the lexical validator for the String value object (optional)

    syntaxValidator

    the syntax validator for the String value object (optional)

    semanticsValidator

    the semantics validator for the String value object (optional)

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(minLength: Int? = null, maxLength: Int? = null, rangeValidator: RangeValidator<String>? = null, lexicalValidator: Validator<String>? = null, syntaxValidator: Validator<String>? = null, semanticsValidator: Validator<String>? = null)
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun validate(t: String)

    Validates the given object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/validate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/validate.html new file mode 100644 index 00000000..86eff9f3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-string-validator/validate.html @@ -0,0 +1,80 @@ + + + + + validate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    validate

    +
    +
    open override fun validate(t: String)(source)

    Validates the given object.

    Parameters

    t

    the object to validate

    Throws

    ValidationException

    if the object is not valid

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-a-b.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-a-b.html new file mode 100644 index 00000000..7d32e3aa --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-a-b.html @@ -0,0 +1,80 @@ + + + + + TAB + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TAB

    +
    +
    const val TAB: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-i-l-d-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-i-l-d-e.html new file mode 100644 index 00000000..fa2523a8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-t-i-l-d-e.html @@ -0,0 +1,80 @@ + + + + + TILDE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    TILDE

    +
    +
    const val TILDE: String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-u-n-d-e-r-s-c-o-r-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-u-n-d-e-r-s-c-o-r-e.html new file mode 100644 index 00000000..330e731f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-u-n-d-e-r-s-c-o-r-e.html @@ -0,0 +1,80 @@ + + + + + UNDERSCORE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UNDERSCORE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-v-e-r-t-i-c-a-l_-b-a-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-v-e-r-t-i-c-a-l_-b-a-r.html new file mode 100644 index 00000000..67d8b0dc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-v-e-r-t-i-c-a-l_-b-a-r.html @@ -0,0 +1,80 @@ + + + + + VERTICAL_BAR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    VERTICAL_BAR

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-w-h-i-t-e-s-p-a-c-e_-r-e-g-e-x.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-w-h-i-t-e-s-p-a-c-e_-r-e-g-e-x.html new file mode 100644 index 00000000..e8e4c760 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/-w-h-i-t-e-s-p-a-c-e_-r-e-g-e-x.html @@ -0,0 +1,80 @@ + + + + + WHITESPACE_REGEX + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    WHITESPACE_REGEX

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/index.html new file mode 100644 index 00000000..870379d4 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/index.html @@ -0,0 +1,861 @@ + + + + + no.acntech.easycontainers.util.text + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class LengthValidator(val min: Int?, val max: Int?) : Validator<String>

    A validator that forces a string to be of a certain length.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class RegexValidator(val pattern: Regex) : Validator<String>

    A validator that uses regular expressions to validate strings.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    class StringValidator(minLength: Int? = null, maxLength: Int? = null, rangeValidator: RangeValidator<String>? = null, lexicalValidator: Validator<String>? = null, syntaxValidator: Validator<String>? = null, semanticsValidator: Validator<String>? = null) : Validator<String>

    Validates a String value object based on a given range and additional validators.

    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val AMPERSAND: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val ASTERISK: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val AT_SIGN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val BACK_SLASH: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val BACKTICK: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val CARET: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val COLON: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val COMMA: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val COMMA_SPACE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val CR: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val CRLF: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DOLLAR_SIGN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DOT: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DOUBLE_QUOTE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val EMPTY_STRING: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val EQ: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val EQUALS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val GT: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val GT_EQ: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val HASH: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val HYPHEN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val LEFT_PAREN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val LT: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val LT_EQ: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val LT_GT: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val MINUS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val NEW_LINE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val PERCENT_SIGN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val PIPE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val PLUS: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val RIGHT_PAREN: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val SEMICOLON: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val SINGLE_QUOTE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val SPACE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val TAB: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val TILDE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val UNDERSCORE: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val VERTICAL_BAR: String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Splits a string into a list of substrings using whitespace as the delimiter.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun String.truncate(length: Int, affix: String = EMPTY_STRING, fromStart: Boolean = false): String

    Truncates the string if its length exceeds the specified maximum length. An affix can be appended to the truncated string. By default, the truncation is performed from the end of the string with the affix appended as a suffix.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/split-on-whites.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/split-on-whites.html new file mode 100644 index 00000000..a20a59dc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/split-on-whites.html @@ -0,0 +1,80 @@ + + + + + splitOnWhites + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    splitOnWhites

    +
    +

    Splits a string into a list of substrings using whitespace as the delimiter.

    Receiver

    The string to be split.

    Return

    The list of substrings obtained by splitting the receiver string on whitespaces.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/truncate.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/truncate.html new file mode 100644 index 00000000..253821c6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.text/truncate.html @@ -0,0 +1,80 @@ + + + + + truncate + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    truncate

    +
    +
    fun String.truncate(length: Int, affix: String = EMPTY_STRING, fromStart: Boolean = false): String(source)

    Truncates the string if its length exceeds the specified maximum length. An affix can be appended to the truncated string. By default, the truncation is performed from the end of the string with the affix appended as a suffix.

    Return

    The truncated string with the specified affix appended.

    Parameters

    length

    The maximum length of the string.

    affix

    The prefix or suffix to be added to the truncated string. Default value the empty string.

    fromStart

    Boolean indicating whether the truncation should be performed from the start of the string or from the end. Default value is false.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/-wait-time-calculator.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/-wait-time-calculator.html new file mode 100644 index 00000000..15209d80 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/-wait-time-calculator.html @@ -0,0 +1,80 @@ + + + + + WaitTimeCalculator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    WaitTimeCalculator

    +
    +
    constructor(waitTimeValue: Long, waitTimeUnit: TimeUnit, startTime: Long = System.nanoTime())(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/get-remaining-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/get-remaining-time.html new file mode 100644 index 00000000..54ff83b3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/get-remaining-time.html @@ -0,0 +1,80 @@ + + + + + getRemainingTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getRemainingTime

    +
    +
    fun getRemainingTime(unit: TimeUnit = waitTimeUnit): Long(source)

    Calculates the remaining time based on the unit provided, calculated from the start time for this instance.

    Return

    The remaining time in the specified time unit.

    Parameters

    unit

    The time unit to return the remaining time in. Defaults to the wait time unit provided with this instance.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/index.html new file mode 100644 index 00000000..64689aac --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/index.html @@ -0,0 +1,172 @@ + + + + + WaitTimeCalculator + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    WaitTimeCalculator

    +
    data class WaitTimeCalculator(val waitTimeValue: Long, val waitTimeUnit: TimeUnit, val startTime: Long = System.nanoTime())(source)

    WaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, unit and start time.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(waitTimeValue: Long, waitTimeUnit: TimeUnit, startTime: Long = System.nanoTime())
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The start time of the wait time calculation

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The wait time unit

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    The wait time value

    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun getRemainingTime(unit: TimeUnit = waitTimeUnit): Long

    Calculates the remaining time based on the unit provided, calculated from the start time for this instance.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/start-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/start-time.html new file mode 100644 index 00000000..500c1111 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/start-time.html @@ -0,0 +1,80 @@ + + + + + startTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    startTime

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-unit.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-unit.html new file mode 100644 index 00000000..d29129da --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-unit.html @@ -0,0 +1,80 @@ + + + + + waitTimeUnit + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitTimeUnit

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-value.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-value.html new file mode 100644 index 00000000..d34ed637 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-value.html @@ -0,0 +1,80 @@ + + + + + waitTimeValue + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitTimeValue

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/index.html new file mode 100644 index 00000000..3ed658d9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers.util.time/index.html @@ -0,0 +1,103 @@ + + + + + no.acntech.easycontainers.util.time + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    data class WaitTimeCalculator(val waitTimeValue: Long, val waitTimeUnit: TimeUnit, val startTime: Long = System.nanoTime())

    WaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, unit and start time.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-abstract-container-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-abstract-container-runtime.html new file mode 100644 index 00000000..5e7c9f2a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-abstract-container-runtime.html @@ -0,0 +1,80 @@ + + + + + AbstractContainerRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AbstractContainerRuntime

    +
    +
    constructor(container: GenericContainer)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-g-e-n-e-r-a-l_-e-x-e-c-u-t-o-r_-s-e-r-v-i-c-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-g-e-n-e-r-a-l_-e-x-e-c-u-t-o-r_-s-e-r-v-i-c-e.html new file mode 100644 index 00000000..7934623c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-g-e-n-e-r-a-l_-e-x-e-c-u-t-o-r_-s-e-r-v-i-c-e.html @@ -0,0 +1,80 @@ + + + + + GENERAL_EXECUTOR_SERVICE + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GENERAL_EXECUTOR_SERVICE

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-s-c-h-e-d-u-l-e-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-s-c-h-e-d-u-l-e-r.html new file mode 100644 index 00000000..fe8c04b8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-s-c-h-e-d-u-l-e-r.html @@ -0,0 +1,80 @@ + + + + + SCHEDULER + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    SCHEDULER

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/index.html new file mode 100644 index 00000000..38bd7034 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/index.html @@ -0,0 +1,119 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/delete.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/delete.html new file mode 100644 index 00000000..32a7e36f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/delete.html @@ -0,0 +1,80 @@ + + + + + delete + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    delete

    +
    +
    open override fun delete(force: Boolean)(source)

    Deletes the container with an optional force flag.

    Parameters

    force

    if true, force the deletion of the container (default is false)

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/get-container.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/get-container.html new file mode 100644 index 00000000..ebb12765 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/get-container.html @@ -0,0 +1,80 @@ + + + + + getContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getContainer

    +
    +
    open override fun getContainer(): Container(source)

    Retrieves the container associated with the runtime.

    Return

    the container as a Container object

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/index.html new file mode 100644 index 00000000..cee2e77f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/index.html @@ -0,0 +1,232 @@ + + + + + AbstractContainerRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    AbstractContainerRuntime

    +

    AbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime. It contains methods for starting and stopping containers, executing commands inside containers, transferring files to and from containers, and retrieving information about the container runtime.

    Inheritors

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor(container: GenericContainer)
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun delete(force: Boolean)

    Deletes the container with an optional force flag.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getContainer(): Container

    Retrieves the container associated with the runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getName(): ContainerName

    Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the type of the container platform.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun kill()

    Kills the container by calling the stop() method. This method is used to forcefully terminate the execution of the container. After calling this method, the container will be in the stopped state. It is advisable to call the delete() method after killing the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun start()

    Starts the execution of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun stop()

    Stops the container runtime.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/start.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/start.html new file mode 100644 index 00000000..52ab173b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/start.html @@ -0,0 +1,80 @@ + + + + + start + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    start

    +
    +
    open override fun start()(source)

    Starts the execution of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/stop.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/stop.html new file mode 100644 index 00000000..1d685127 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/stop.html @@ -0,0 +1,80 @@ + + + + + stop + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    stop

    +
    +
    open override fun stop()(source)

    Stops the container runtime.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/-base-container-builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/-base-container-builder.html new file mode 100644 index 00000000..dafa8d64 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/-base-container-builder.html @@ -0,0 +1,80 @@ + + + + + BaseContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    BaseContainerBuilder

    +
    +
    constructor()(source)

    Parameters

    SELF

    the type of the concrete builder that extends this class.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/index.html new file mode 100644 index 00000000..7b7eb0bf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/index.html @@ -0,0 +1,483 @@ + + + + + BaseContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    BaseContainerBuilder

    +

    Abstract base class for container builders.

    Parameters

    SELF

    the type of the concrete builder that extends this class.

    Inheritors

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun build(): Container

    This method is used to build a Container object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withArgs(args: Args): SELF

    Sets the command arguments for the container.

    open fun withArgs(args: List<String>): SELF

    Sets the arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withCommand(command: Executable): SELF
    open fun withCommand(command: String): SELF

    Sets the command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withContainerFile(file: ContainerFile): SELF
    open fun withContainerFile(name: String, mountPath: String, content: String): SELF
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): SELF

    open fun withContainerFile(name: ContainerFileName, path: UnixDir, content: String): SELF

    Adds a file to the container with the specified name, path, and content.

    open fun withContainerFile(name: ContainerFileName, path: UnixDir, data: Map<String, String>, keyValSeparator: String = ""): SELF

    Adds a container file to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withCpuLimit(cpuLimit: CPU): SELF
    open fun withCpuLimit(cpuLimit: Double): SELF
    open fun withCpuLimit(cpuLimit: String): SELF

    Sets the CPU limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withCpuRequest(cpuRequest: CPU): SELF
    open fun withCpuRequest(cpuRequest: Double): SELF
    open fun withCpuRequest(cpuRequest: String): SELF

    Sets the CPU request for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withCustomProperty(key: String, value: Any): SELF

    Adds a custom property to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withEnv(env: Map<EnvVarKey, EnvVarValue>): SELF

    Sets the environment variables for the container.

    open override fun withEnv(key: String, value: String): SELF

    Adds an environment variable with the specified key and value.

    open override fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF

    Sets an environment variable with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withExecutionMode(executionMode: ExecutionMode): SELF

    Sets the execution mode for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withExposedPort(name: PortMappingName, port: NetworkPort): SELF

    Adds an exposed port to the container configuration.

    open fun withExposedPort(name: String, port: Int): SELF

    Sets the exposed port for the container by specifying the name and port number.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withImage(image: ImageURL): SELF

    Set the image to use for the container.

    open fun withImage(image: String): SELF

    Sets the image for the container using the given image URL.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withIsEphemeral(ephemeral: Boolean): SELF

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withLabel(key: LabelKey, value: LabelValue): SELF

    Adds a label to the container with the given key and value.

    open fun withLabel(key: String, value: String): SELF

    Adds a label with the provided key-value pair to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withMaxLifeTime(maxLifeTime: Duration): SELF
    open override fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF

    Sets the maximum lifetime for the container.

    open fun withMaxLifeTime(value: Long, unit: TimeUnit): SELF

    Sets the maximum life time for the object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withMemoryLimit(memoryLimit: Memory): SELF

    Sets the memory limit for the container.

    open fun withMemoryLimit(memoryLimit: BigInteger): SELF

    Sets the memory limit for the container in bytes.

    open fun withMemoryLimit(memoryLimit: Long): SELF

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    open fun withMemoryLimit(memoryLimit: String): SELF

    Sets the memory limit for the current operation.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withMemoryRequest(memoryRequest: Memory): SELF

    open fun withMemoryRequest(memoryRequest: BigInteger): SELF

    Sets the memory request for the container.

    open fun withMemoryRequest(memoryRequest: String): SELF

    Performs the task with the given memory request.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withName(name: ContainerName): SELF

    Returns a new instance of the container object with the specified name.

    open fun withName(name: String): SELF

    Sets the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withNamespace(namespace: Namespace): SELF

    Sets the namespace for the ContainerBuilder.

    open fun withNamespace(namespace: String): SELF

    Sets the namespace for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withNetworkName(networkName: NetworkName): SELF
    open fun withNetworkName(networkName: String): SELF

    Sets the network name for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF

    Sets the line callback for logging purposes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF

    Maps a container exposed network port to another network port.

    open fun withPortMapping(port: Int, mappedPort: Int): SELF

    Sets the port mapping for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun withVolume(volume: Volume): SELF

    Sets the volume for the container.

    open override fun withVolume(name: VolumeName, mountPath: UnixDir): SELF

    Sets the volume name and mount path for the current instance of the object.

    open fun withVolume(name: String, mountPath: String): SELF
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/to-string.html new file mode 100644 index 00000000..2c3481e7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-args.html new file mode 100644 index 00000000..b1357baf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-args.html @@ -0,0 +1,80 @@ + + + + + withArgs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withArgs

    +
    +
    open override fun withArgs(args: Args): SELF(source)

    Sets the command arguments for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    args

    The command arguments to be set for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-command.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-command.html new file mode 100644 index 00000000..913f76e2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-command.html @@ -0,0 +1,80 @@ + + + + + withCommand + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCommand

    +
    +
    open override fun withCommand(command: Executable): SELF(source)

    Sets the command for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    command

    the executable command to be set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-file.html new file mode 100644 index 00000000..a520eb28 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-file.html @@ -0,0 +1,80 @@ + + + + + withContainerFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withContainerFile

    +
    +
    open override fun withContainerFile(file: ContainerFile): SELF(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-platform-type.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-platform-type.html new file mode 100644 index 00000000..fa726fcb --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-platform-type.html @@ -0,0 +1,80 @@ + + + + + withContainerPlatformType + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withContainerPlatformType

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-limit.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-limit.html new file mode 100644 index 00000000..1203cec3 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-limit.html @@ -0,0 +1,80 @@ + + + + + withCpuLimit + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCpuLimit

    +
    +
    open override fun withCpuLimit(cpuLimit: CPU): SELF(source)

    Sets the CPU limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuLimit

    The CPU limit to be set for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-request.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-request.html new file mode 100644 index 00000000..15a5e1cd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-request.html @@ -0,0 +1,80 @@ + + + + + withCpuRequest + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCpuRequest

    +
    +
    open override fun withCpuRequest(cpuRequest: CPU): SELF(source)

    Sets the CPU request for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    cpuRequest

    The CPU request for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-custom-property.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-custom-property.html new file mode 100644 index 00000000..44c5e2f8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-custom-property.html @@ -0,0 +1,80 @@ + + + + + withCustomProperty + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCustomProperty

    +
    +
    open override fun withCustomProperty(key: String, value: Any): SELF(source)

    Adds a custom property to the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    the key of the custom property

    value

    the value of the custom property

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html new file mode 100644 index 00000000..62b4ae1c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html @@ -0,0 +1,80 @@ + + + + + withEnv + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withEnv

    +
    +
    open override fun withEnv(key: String, value: String): SELF(source)

    Adds an environment variable with the specified key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    The key of the environment variable.

    value

    The value of the environment variable.


    open override fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF(source)

    Sets an environment variable with the given key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    The key of the environment variable.

    value

    The value of the environment variable.


    open override fun withEnv(env: Map<EnvVarKey, EnvVarValue>): SELF(source)

    Sets the environment variables for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    env

    a map containing the environment variable keys and values

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-execution-mode.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-execution-mode.html new file mode 100644 index 00000000..7f6fedcd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-execution-mode.html @@ -0,0 +1,80 @@ + + + + + withExecutionMode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withExecutionMode

    +
    +
    open override fun withExecutionMode(executionMode: ExecutionMode): SELF(source)

    Sets the execution mode for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    executionMode

    The execution mode to be set.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-exposed-port.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-exposed-port.html new file mode 100644 index 00000000..4a134862 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-exposed-port.html @@ -0,0 +1,80 @@ + + + + + withExposedPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withExposedPort

    +
    +
    open override fun withExposedPort(name: PortMappingName, port: NetworkPort): SELF(source)

    Adds an exposed port to the container configuration.

    Return

    The updated ContainerBuilder instance.

    Parameters

    name

    The name of the port mapping.

    port

    The network port to expose.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-image.html new file mode 100644 index 00000000..f379287c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-image.html @@ -0,0 +1,80 @@ + + + + + withImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withImage

    +
    +
    open override fun withImage(image: ImageURL): SELF(source)

    Set the image to use for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    image

    The image to use for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-is-ephemeral.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-is-ephemeral.html new file mode 100644 index 00000000..a009da0d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-is-ephemeral.html @@ -0,0 +1,80 @@ + + + + + withIsEphemeral + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withIsEphemeral

    +
    +
    open override fun withIsEphemeral(ephemeral: Boolean): SELF(source)

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    Parameters

    ephemeral

    The ephemeral flag to be set.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-label.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-label.html new file mode 100644 index 00000000..72649879 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-label.html @@ -0,0 +1,80 @@ + + + + + withLabel + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withLabel

    +
    +
    open override fun withLabel(key: LabelKey, value: LabelValue): SELF(source)

    Adds a label to the container with the given key and value.

    Return

    The updated ContainerBuilder instance.

    Parameters

    key

    the key of the label

    value

    the value of the label

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-max-life-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-max-life-time.html new file mode 100644 index 00000000..84cb6c01 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-max-life-time.html @@ -0,0 +1,80 @@ + + + + + withMaxLifeTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMaxLifeTime

    +
    +
    open override fun withMaxLifeTime(maxLifeTime: Duration): SELF(source)

    Sets the maximum lifetime for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    maxLifeTime

    The maximum lifetime of the container.


    open override fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF(source)

    Sets the maximum lifetime for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    value

    The value of the maximum lifetime.

    unit

    The unit of time for the maximum lifetime.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-limit.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-limit.html new file mode 100644 index 00000000..c7628be0 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-limit.html @@ -0,0 +1,80 @@ + + + + + withMemoryLimit + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMemoryLimit

    +
    +
    open override fun withMemoryLimit(memoryLimit: Memory): SELF(source)

    Sets the memory limit for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    memoryLimit

    The memory limit to set for the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-request.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-request.html new file mode 100644 index 00000000..8ad8aedc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-request.html @@ -0,0 +1,80 @@ + + + + + withMemoryRequest + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withMemoryRequest

    +
    +
    open override fun withMemoryRequest(memoryRequest: Memory): SELF(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-name.html new file mode 100644 index 00000000..430c725a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-name.html @@ -0,0 +1,80 @@ + + + + + withName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withName

    +
    +
    open override fun withName(name: ContainerName): SELF(source)

    Returns a new instance of the container object with the specified name.

    Return

    a new instance of the container object with the specified name

    Parameters

    name

    the name of the container

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-namespace.html new file mode 100644 index 00000000..38b99b1c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-namespace.html @@ -0,0 +1,80 @@ + + + + + withNamespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withNamespace

    +
    +
    open override fun withNamespace(namespace: Namespace): SELF(source)

    Sets the namespace for the ContainerBuilder.

    Return

    The updated ContainerBuilder instance.

    Parameters

    namespace

    The namespace to set.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-network-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-network-name.html new file mode 100644 index 00000000..d824c70a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-network-name.html @@ -0,0 +1,80 @@ + + + + + withNetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withNetworkName

    +
    +
    open override fun withNetworkName(networkName: NetworkName): SELF(source)

    Sets the network name for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    networkName

    the network name to set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-output-line-callback.html new file mode 100644 index 00000000..7eb2cdfe --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + withOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withOutputLineCallback

    +
    +
    open override fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF(source)

    Sets the line callback for logging purposes.

    Return

    The updated ContainerBuilder instance.

    Parameters

    outputLineCallback

    The line callback to be used for logging.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-port-mapping.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-port-mapping.html new file mode 100644 index 00000000..35fc7d6f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-port-mapping.html @@ -0,0 +1,80 @@ + + + + + withPortMapping + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withPortMapping

    +
    +
    open override fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF(source)

    Maps a container exposed network port to another network port.

    Return

    The updated ContainerBuilder instance.

    Parameters

    port

    The network port to be mapped.

    mappedPort

    The mapped network port.

    Throws

    if the port is not exposed.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-volume.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-volume.html new file mode 100644 index 00000000..f7691074 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-base-container-builder/with-volume.html @@ -0,0 +1,80 @@ + + + + + withVolume + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withVolume

    +
    +
    open override fun withVolume(name: VolumeName, mountPath: UnixDir): SELF(source)

    Sets the volume name and mount path for the current instance of the object.

    Return

    An instance of the object with the volume name and mount path set.

    Parameters

    name

    The name of the volume to be set.

    mountPath

    The mount path to be set as the mount point for the volume.


    open override fun withVolume(volume: Volume): SELF(source)

    Sets the volume for the container.

    Return

    The updated ContainerBuilder instance.

    Parameters

    volume

    The volume to be added or mapped into the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/configure.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/configure.html new file mode 100644 index 00000000..19ccfe9f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/configure.html @@ -0,0 +1,80 @@ + + + + + configure + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    configure

    +
    +
    abstract fun configure(builder: ContainerBuilder<*>)(source)

    Configures a container builder.

    Parameters

    builder

    the container builder to configure

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/index.html new file mode 100644 index 00000000..74b6faed --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-builder-callback/index.html @@ -0,0 +1,104 @@ + + + + + ContainerBuilderCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerBuilderCallback

    +

    An interface for defining a callback to configure a container builder. Implement the ContainerBuilderCallback interface to provide custom configuration logic for a container builder.

    Parameters

    T

    the type of container builder

    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun configure(builder: ContainerBuilder<*>)

    Configures a container builder.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html new file mode 100644 index 00000000..668e71d6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html @@ -0,0 +1,80 @@ + + + + + ContainerException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerException

    +
    +
    constructor()(source)
    constructor(cause: Throwable)(source)
    constructor(message: String)(source)
    constructor(message: String, cause: Throwable)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/index.html new file mode 100644 index 00000000..ecdbee31 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-container-exception/index.html @@ -0,0 +1,262 @@ + + + + + ContainerException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ContainerException

    +

    ContainerException is a subclass of RuntimeException that is used to represent exceptions that occur in the context of container operations.

    Inheritors

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    constructor(cause: Throwable)
    constructor(message: String)
    constructor(message: String, cause: Throwable)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val cause: Throwable?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val message: String?
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html new file mode 100644 index 00000000..19d28c22 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_K8S_GENERAL_DATA_HOST_DIR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_K8S_GENERAL_DATA_HOST_DIR

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html new file mode 100644 index 00000000..ba64b0ab --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_K8S_GENERAL_DATA_PVC_NAME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_K8S_GENERAL_DATA_PVC_NAME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html new file mode 100644 index 00000000..7b5f0606 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_K8S_KANIKO_DATA_HOST_DIR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_K8S_KANIKO_DATA_HOST_DIR

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html new file mode 100644 index 00000000..1136cd80 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_K8S_KANIKO_DATA_PVC_NAME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_K8S_KANIKO_DATA_PVC_NAME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-h-o-s-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-h-o-s-t.html new file mode 100644 index 00000000..9270cb4e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-h-o-s-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_REGISTRY_HOST + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_REGISTRY_HOST

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-p-o-r-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-p-o-r-t.html new file mode 100644 index 00000000..a7ce1e64 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-p-o-r-t.html @@ -0,0 +1,80 @@ + + + + + DEFAULT_REGISTRY_PORT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    DEFAULT_REGISTRY_PORT

    +
    +
    const val DEFAULT_REGISTRY_PORT: Int = 5000(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html new file mode 100644 index 00000000..9429fed8 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html @@ -0,0 +1,80 @@ + + + + + PROP_DOCKER_DAEMON_ENDPOINT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_DOCKER_DAEMON_ENDPOINT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-i-n-s-e-c-u-r-e_-r-e-g-i-s-t-r-y.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-i-n-s-e-c-u-r-e_-r-e-g-i-s-t-r-y.html new file mode 100644 index 00000000..9ed0a74c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-i-n-s-e-c-u-r-e_-r-e-g-i-s-t-r-y.html @@ -0,0 +1,80 @@ + + + + + PROP_INSECURE_REGISTRY + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_INSECURE_REGISTRY

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html new file mode 100644 index 00000000..ac922c9d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html @@ -0,0 +1,80 @@ + + + + + PROP_K8S_GENERAL_DATA_HOST_DIR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_K8S_GENERAL_DATA_HOST_DIR

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html new file mode 100644 index 00000000..66d4fd2b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html @@ -0,0 +1,80 @@ + + + + + PROP_K8S_GENERAL_DATA_PVC_NAME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_K8S_GENERAL_DATA_PVC_NAME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html new file mode 100644 index 00000000..7e8171a9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html @@ -0,0 +1,80 @@ + + + + + PROP_K8S_KANIKO_DATA_HOST_DIR + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_K8S_KANIKO_DATA_HOST_DIR

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html new file mode 100644 index 00000000..b074a9b5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html @@ -0,0 +1,80 @@ + + + + + PROP_K8S_KANIKO_DATA_PVC_NAME + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_K8S_KANIKO_DATA_PVC_NAME

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-r-e-g-i-s-t-r-y_-e-n-d-p-o-i-n-t.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-r-e-g-i-s-t-r-y_-e-n-d-p-o-i-n-t.html new file mode 100644 index 00000000..7d0bf50b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-r-e-g-i-s-t-r-y_-e-n-d-p-o-i-n-t.html @@ -0,0 +1,80 @@ + + + + + PROP_REGISTRY_ENDPOINT + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PROP_REGISTRY_ENDPOINT

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-docker-daemon-endpoint.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-docker-daemon-endpoint.html new file mode 100644 index 00000000..62c128b5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-docker-daemon-endpoint.html @@ -0,0 +1,80 @@ + + + + + defaultDockerDaemonEndpoint + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultDockerDaemonEndpoint

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-complete-u-r-l.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-complete-u-r-l.html new file mode 100644 index 00000000..a8b3f021 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-complete-u-r-l.html @@ -0,0 +1,80 @@ + + + + + defaultRegistryCompleteURL + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultRegistryCompleteURL

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-endpoint.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-endpoint.html new file mode 100644 index 00000000..754af282 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/default-registry-endpoint.html @@ -0,0 +1,80 @@ + + + + + defaultRegistryEndpoint + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    defaultRegistryEndpoint

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/index.html new file mode 100644 index 00000000..7534beaf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/index.html @@ -0,0 +1,389 @@ + + + + + Environment + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Environment

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    const val DEFAULT_REGISTRY_PORT: Int = 5000
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-host-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-host-dir.html new file mode 100644 index 00000000..8135a2a9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-host-dir.html @@ -0,0 +1,80 @@ + + + + + k8sGeneralDataHostDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    k8sGeneralDataHostDir

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-pvc-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-pvc-name.html new file mode 100644 index 00000000..78b66580 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-pvc-name.html @@ -0,0 +1,80 @@ + + + + + k8sGeneralDataPvcName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    k8sGeneralDataPvcName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-host-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-host-dir.html new file mode 100644 index 00000000..cf5c6a3d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-host-dir.html @@ -0,0 +1,80 @@ + + + + + k8sKanikoDataHostDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    k8sKanikoDataHostDir

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-pvc-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-pvc-name.html new file mode 100644 index 00000000..643adddb --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-pvc-name.html @@ -0,0 +1,80 @@ + + + + + k8sKanikoDataPvcName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    k8sKanikoDataPvcName

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/builder.html new file mode 100644 index 00000000..8873eb9f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/builder.html @@ -0,0 +1,80 @@ + + + + + builder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    builder

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/index.html new file mode 100644 index 00000000..7d712bf7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/-generic-container-builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/-generic-container-builder.html new file mode 100644 index 00000000..57d7754a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/-generic-container-builder.html @@ -0,0 +1,80 @@ + + + + + GenericContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GenericContainerBuilder

    +
    +
    constructor()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/build.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/build.html new file mode 100644 index 00000000..a66301a2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/build.html @@ -0,0 +1,80 @@ + + + + + build + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    build

    +
    +
    open override fun build(): Container(source)

    This method is used to build a Container object.

    Return

    A Container object after building it.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/index.html new file mode 100644 index 00000000..0df4315e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/index.html @@ -0,0 +1,483 @@ + + + + + GenericContainerBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun build(): Container

    This method is used to build a Container object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command arguments for the container.

    Sets the arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun withContainerFile(name: String, path: String, data: Map<String, String>, keyValSeparator: String = ""): GenericContainer.GenericContainerBuilder

    Adds a file to the container with the specified name, path, and content.

    Adds a container file to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    + +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU limit for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the CPU request for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a custom property to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables for the container.

    Adds an environment variable with the specified key and value.

    Sets an environment variable with the given key and value.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the environment variables of the container using a map of string key-value pairs.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the execution mode for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds an exposed port to the container configuration.

    Sets the exposed port for the container by specifying the name and port number.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Set the image to use for the container.

    Sets the image for the container using the given image URL.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the ephemeral flag for the container. If the ephemeral flag is set to true, the container will be deleted after it has stopped.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a label to the container with the given key and value.

    Adds a label with the provided key-value pair to the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the maximum lifetime for the container.

    Sets the maximum life time for the object.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory limit for the container.

    Sets the memory limit for the container in bytes.

    Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long.

    Sets the memory limit for the current operation.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the memory request for the container.

    Performs the task with the given memory request.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a new instance of the container object with the specified name.

    Sets the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the namespace for the ContainerBuilder.

    Sets the namespace for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the network name for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the line callback for logging purposes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Maps a container exposed network port to another network port.

    Sets the port mapping for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the volume for the container.

    Sets the volume name and mount path for the current instance of the object.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container.html new file mode 100644 index 00000000..d90453cc --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container.html @@ -0,0 +1,80 @@ + + + + + GenericContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GenericContainer

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/execute.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/execute.html new file mode 100644 index 00000000..5e5643a7 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/execute.html @@ -0,0 +1,81 @@ + + + + + execute + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    execute

    +
    +
    open override fun execute(executable: Executable, args: Args?, useTty: Boolean, workingDir: UnixDir?, input: InputStream?, output: OutputStream, waitTimeValue: Long?, waitTimeUnit: TimeUnit?): Pair<Int?, String?>(source)

    Executes a command in the container.

    +Note that for Docker, std out and std err are combined in the std out result - hence the std error string is always empty.

    Return

    a pair of the exit code and the std error output

    Parameters

    executable

    the command to execute

    args

    the arguments to pass to the command

    workingDir

    the working directory for the command

    input

    the input stream to pass to the command

    waitTimeValue

    the time to wait for the command to complete

    waitTimeUnit

    the time unit for the wait time

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-args.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-args.html new file mode 100644 index 00000000..1d7804ac --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-args.html @@ -0,0 +1,81 @@ + + + + + getArgs + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getArgs

    +
    +
    open override fun getArgs(): Args?(source)

    Retrieves the command arguments for the container.

    +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's

    Return

    the command arguments as an instance of Args, or null if there are no arguments.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-command.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-command.html new file mode 100644 index 00000000..12307e79 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-command.html @@ -0,0 +1,82 @@ + + + + + getCommand + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getCommand

    +
    +
    open override fun getCommand(): Executable?(source)

    Retrieves the executable command for the container.

    +Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's +image for both Docker and kubernetes.

    Return

    the executable command as an Executable object, or null if no command is specified

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-directory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-directory.html new file mode 100644 index 00000000..115e8194 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-directory.html @@ -0,0 +1,80 @@ + + + + + getDirectory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getDirectory

    +
    +
    open override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair<Path, List<Path>>(source)

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    Return

    a pair of the path of the downloaded directory and a list of the paths of the downloaded files

    Parameters

    remoteDir

    the path of the directory to download

    localDir

    the path where the directory will be downloaded to, defaults to a temporary directory

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-duration.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-duration.html new file mode 100644 index 00000000..694bd05c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-duration.html @@ -0,0 +1,80 @@ + + + + + getDuration + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getDuration

    +
    +
    open override fun getDuration(): Duration?(source)

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-env.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-env.html new file mode 100644 index 00000000..bb7f7eda --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-env.html @@ -0,0 +1,80 @@ + + + + + getEnv + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getEnv

    +
    +
    open override fun getEnv(): Map<EnvVarKey, EnvVarValue>(source)

    Retrieves the environment variables associated with the container.

    Return

    a map containing the environment variable keys and values

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-execution-mode.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-execution-mode.html new file mode 100644 index 00000000..380fb9ad --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-execution-mode.html @@ -0,0 +1,80 @@ + + + + + getExecutionMode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExecutionMode

    +
    +
    open override fun getExecutionMode(): ExecutionMode(source)

    Retrieves the execution mode of the container.

    Return

    the execution mode of the container as an ExecutionMode enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exit-code.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exit-code.html new file mode 100644 index 00000000..0bab5fc1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exit-code.html @@ -0,0 +1,80 @@ + + + + + getExitCode + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExitCode

    +
    +
    open override fun getExitCode(): Int?(source)

    Retrieves the exit code of the container.

    Return

    the exit code of the container, or null if the container is still running or has never been started.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exposed-ports.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exposed-ports.html new file mode 100644 index 00000000..4948873b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-exposed-ports.html @@ -0,0 +1,80 @@ + + + + + getExposedPorts + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getExposedPorts

    +
    +
    open override fun getExposedPorts(): List<NetworkPort>(source)

    Returns the list of network ports exposed by the container.

    Return

    the list of exposed network ports as a List of NetworkPort objects

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-file.html new file mode 100644 index 00000000..be300d35 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-file.html @@ -0,0 +1,80 @@ + + + + + getFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getFile

    +
    +
    open override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path(source)

    Downloads a file from the container.

    Return

    the path of the downloaded file

    Parameters

    remoteDir

    the path of the file to download

    remoteFilename

    the name of the file in the container

    localPath

    the path where the file will be downloaded to - if null, the file will be downloaded to the current directory, with the same name as the remote file, if not null, the file will be downloaded with the specified name unless the path is a directory, in which case the file will be downloaded to the directory with the same name as the remote file

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-host.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-host.html new file mode 100644 index 00000000..ace9821e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-host.html @@ -0,0 +1,80 @@ + + + + + getHost + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getHost

    +
    +
    open override fun getHost(): Host?(source)

    Retrieves the host of the container.

    Return

    the host of the container as a Host object, or null if the host is not set

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-image.html new file mode 100644 index 00000000..eb47ad1a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-image.html @@ -0,0 +1,80 @@ + + + + + getImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getImage

    +
    +
    open override fun getImage(): ImageURL(source)

    Retrieves the image for the container.

    Return

    the URL of the image

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-ip-address.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-ip-address.html new file mode 100644 index 00000000..4fa18e83 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-ip-address.html @@ -0,0 +1,80 @@ + + + + + getIpAddress + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getIpAddress

    +
    +
    open override fun getIpAddress(): InetAddress?(source)

    Retrieves the IP address of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-labels.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-labels.html new file mode 100644 index 00000000..7661ed32 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-labels.html @@ -0,0 +1,80 @@ + + + + + getLabels + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getLabels

    +
    +
    open override fun getLabels(): Map<LabelKey, LabelValue>(source)

    Retrieves the labels associated with the container.

    Return

    a map of LabelKey to LabelValue representing the labels

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-mapped-port.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-mapped-port.html new file mode 100644 index 00000000..41603518 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-mapped-port.html @@ -0,0 +1,80 @@ + + + + + getMappedPort + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getMappedPort

    +
    +
    open override fun getMappedPort(port: NetworkPort): NetworkPort(source)

    Returns the mapped port for the specified network port.

    Return

    the mapped port as a NetworkPort object

    Parameters

    port

    the network port for which to retrieve the mapped port

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-max-life-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-max-life-time.html new file mode 100644 index 00000000..8816582f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-max-life-time.html @@ -0,0 +1,80 @@ + + + + + getMaxLifeTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getMaxLifeTime

    +
    +
    open override fun getMaxLifeTime(): Duration?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-name.html new file mode 100644 index 00000000..8e0bd1fd --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-name.html @@ -0,0 +1,80 @@ + + + + + getName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getName

    +
    +
    open override fun getName(): ContainerName(source)

    Returns the name of the container.

    Return

    the name of the container as a ContainerName object

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-namespace.html new file mode 100644 index 00000000..dd4afaa1 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-namespace.html @@ -0,0 +1,80 @@ + + + + + getNamespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getNamespace

    +
    +
    open override fun getNamespace(): Namespace(source)

    Returns the namespace of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-network-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-network-name.html new file mode 100644 index 00000000..9245ba5a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-network-name.html @@ -0,0 +1,80 @@ + + + + + getNetworkName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getNetworkName

    +
    +
    open override fun getNetworkName(): NetworkName?(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-output-line-callback.html new file mode 100644 index 00000000..3e199552 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + getOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getOutputLineCallback

    +
    +

    Retrieves the log output callback of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-port-mappings.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-port-mappings.html new file mode 100644 index 00000000..91cf8add --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-port-mappings.html @@ -0,0 +1,80 @@ + + + + + getPortMappings + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getPortMappings

    +
    +

    Retrieves the port mappings for the container.

    Return

    a map of NetworkPort to NetworkPort representing the port mappings.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-runtime.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-runtime.html new file mode 100644 index 00000000..189db5a2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-runtime.html @@ -0,0 +1,80 @@ + + + + + getRuntime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getRuntime

    +
    +
    open override fun getRuntime(): ContainerRuntime(source)

    Retrieves the (underlying) runtime of the container.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-state.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-state.html new file mode 100644 index 00000000..c4bf4279 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-state.html @@ -0,0 +1,80 @@ + + + + + getState + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getState

    +
    +

    Retrieves the state of the container.

    Return

    the state of the container as a ContainerState enum value

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-volumes.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-volumes.html new file mode 100644 index 00000000..792ab280 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/get-volumes.html @@ -0,0 +1,80 @@ + + + + + getVolumes + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getVolumes

    +
    +
    open override fun getVolumes(): List<Volume>(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/index.html new file mode 100644 index 00000000..00375ba2 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/index.html @@ -0,0 +1,622 @@ + + + + + GenericContainer + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    GenericContainer

    +

    GenericContainer represents a generic container implementation that can be customized and built using the provided builder. It implements the Container interface.

    Inheritors

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    + + +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun execute(executable: Executable, args: Args?, useTty: Boolean, workingDir: UnixDir?, input: InputStream?, output: OutputStream, waitTimeValue: Long?, waitTimeUnit: TimeUnit?): Pair<Int?, String?>

    Executes a command in the container.

    open fun execute(command: List<String>, useTty: Boolean = false, workingDir: String? = null, input: InputStream? = null, output: OutputStream = OutputStream.nullOutputStream(), waitTimeValue: Long? = null, waitTimeUnit: TimeUnit? = null): Pair<Int?, String?>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getArgs(): Args?

    Retrieves the command arguments for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getCommand(): Executable?

    Retrieves the executable command for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair<Path, List<Path>>
    open fun getDirectory(remoteDir: String, localDir: String): Pair<Path, List<Path>>

    Downloads a directory from the container. Note that the downloaded files and directories include the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getDuration(): Duration?

    Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container was started, if stopped, returns the time the container was running.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getEnv(): Map<EnvVarKey, EnvVarValue>

    Retrieves the environment variables associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExecutionMode(): ExecutionMode

    Retrieves the execution mode of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExitCode(): Int?

    Retrieves the exit code of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getExposedPorts(): List<NetworkPort>

    Returns the list of network ports exposed by the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path

    Downloads a file from the container.

    open fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getHost(): Host?

    Retrieves the host of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getImage(): ImageURL

    Retrieves the image for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getIpAddress(): InetAddress?

    Retrieves the IP address of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getLabels(): Map<LabelKey, LabelValue>

    Retrieves the labels associated with the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMappedPort(port: NetworkPort): NetworkPort

    Returns the mapped port for the specified network port.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getMaxLifeTime(): Duration?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getName(): ContainerName

    Returns the name of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNamespace(): Namespace

    Returns the namespace of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getNetworkName(): NetworkName?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the log output callback of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the port mappings for the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getRuntime(): ContainerRuntime

    Retrieves the (underlying) runtime of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the state of the container.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun getVolumes(): List<Volume>
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Checks if the given network port has a mapping defined in the container's port mappings.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun isEphemeral(): Boolean

    Checks whether the container is ephemeral.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open fun onDelete()
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    open fun putDirectory(localDir: String, remoteDir: String): Long

    Uploads a directory to the container. Note that the uploaded files and directories include the the directory itself and all its contents.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long

    Uploads a file to the container.

    open fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForCompletion(timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun waitForState(state: Container.State, timeout: Long, unit: TimeUnit): Boolean

    Wait for the container to reach the specified state.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/is-ephemeral.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/is-ephemeral.html new file mode 100644 index 00000000..00cadd15 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/is-ephemeral.html @@ -0,0 +1,80 @@ + + + + + isEphemeral + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    isEphemeral

    +
    +
    open override fun isEphemeral(): Boolean(source)

    Checks whether the container is ephemeral.

    Return

    true if the container is ephemeral, false otherwise

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-directory.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-directory.html new file mode 100644 index 00000000..2b134349 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-directory.html @@ -0,0 +1,80 @@ + + + + + putDirectory + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    putDirectory

    +
    +
    open override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long(source)

    Uploads a directory to the container. Note that the uploaded files and directoroes include the the directory itself and all its contents.

    Return

    the size of the directory in bytes

    Parameters

    localDir

    the path of the directory to upload

    remoteDir

    the path where the directory will be uploaded in the container

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-file.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-file.html new file mode 100644 index 00000000..348f616a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/put-file.html @@ -0,0 +1,80 @@ + + + + + putFile + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    putFile

    +
    +
    open override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long(source)

    Uploads a file to the container.

    Return

    the size of the file in bytes

    Parameters

    localFile

    the path of the file to upload -

    remoteDir

    the path where the file will be uploaded in the container - if it doesn't exist, it will be attempted created

    remoteFilename

    the name of the file in the container - if null, the file will be uploaded with the same name as the local file

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/to-string.html new file mode 100644 index 00000000..e06c97f5 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-completion.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-completion.html new file mode 100644 index 00000000..138cb239 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-completion.html @@ -0,0 +1,80 @@ + + + + + waitForCompletion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitForCompletion

    +
    +
    open override fun waitForCompletion(timeout: Long, unit: TimeUnit): Boolean(source)

    Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state.

    Parameters

    timeout

    the maximum time to wait for the container to stop, default is 0 which means indefinite wait

    unit

    the time unit of the timeout, default is seconds

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-state.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-state.html new file mode 100644 index 00000000..2192b21f --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-state.html @@ -0,0 +1,80 @@ + + + + + waitForState + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    waitForState

    +
    +
    open override fun waitForState(state: Container.State, timeout: Long, unit: TimeUnit): Boolean(source)

    Wait for the container to reach the specified state.

    Parameters

    state

    the expected state of the container

    timeout

    the maximum time to wait for the container to reach the state, default is 0 which means indefinite wait

    unit

    the time unit of the timeout, default is seconds

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/index.html new file mode 100644 index 00000000..e6f1b9da --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/index.html @@ -0,0 +1,104 @@ + + + + + Companion + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Companion

    + +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun of(type: ContainerPlatformType = ContainerPlatformType.KUBERNETES): ImageBuilder

    Creates and returns of ImageBuilder based on the provided container type.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/of.html new file mode 100644 index 00000000..118ecce9 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-companion/of.html @@ -0,0 +1,80 @@ + + + + + of + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    of

    +
    +
    fun of(type: ContainerPlatformType = ContainerPlatformType.KUBERNETES): ImageBuilder(source)

    Creates and returns of ImageBuilder based on the provided container type.

    Return

    an instance of ImageBuilder

    Parameters

    type

    the type of container, defaults to ContainerType.KUBERNETES

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-image-builder.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-image-builder.html new file mode 100644 index 00000000..667083cf --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-image-builder.html @@ -0,0 +1,80 @@ + + + + + ImageBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageBuilder

    +
    +
    constructor()(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-c-o-m-p-l-e-t-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-c-o-m-p-l-e-t-e-d/index.html new file mode 100644 index 00000000..3dbaf383 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-c-o-m-p-l-e-t-e-d/index.html @@ -0,0 +1,119 @@ + + + + + COMPLETED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    COMPLETED

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-f-a-i-l-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-f-a-i-l-e-d/index.html new file mode 100644 index 00000000..ca127c01 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-f-a-i-l-e-d/index.html @@ -0,0 +1,119 @@ + + + + + FAILED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    FAILED

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n-i-t-i-a-l-i-z-e-d/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n-i-t-i-a-l-i-z-e-d/index.html new file mode 100644 index 00000000..00d2d216 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n-i-t-i-a-l-i-z-e-d/index.html @@ -0,0 +1,119 @@ + + + + + INITIALIZED + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    INITIALIZED

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n_-p-r-o-g-r-e-s-s/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n_-p-r-o-g-r-e-s-s/index.html new file mode 100644 index 00000000..e9a8c4de --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n_-p-r-o-g-r-e-s-s/index.html @@ -0,0 +1,119 @@ + + + + + IN_PROGRESS + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    IN_PROGRESS

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-u-n-k-n-o-w-n/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-u-n-k-n-o-w-n/index.html new file mode 100644 index 00000000..47c23dae --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/-u-n-k-n-o-w-n/index.html @@ -0,0 +1,119 @@ + + + + + UNKNOWN + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    UNKNOWN

    + +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/entries.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/entries.html new file mode 100644 index 00000000..229d12ec --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/entries.html @@ -0,0 +1,80 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    entries

    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    This method may be used to iterate over the enum entries.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/index.html new file mode 100644 index 00000000..705ff99a --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/index.html @@ -0,0 +1,247 @@ + + + + + State + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    State

    + +
    +
    +
    +
    +
    +

    Entries

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns a representation of an immutable list of all enum entries, in the order they're declared.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/value-of.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/value-of.html new file mode 100644 index 00000000..968df2ed --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/value-of.html @@ -0,0 +1,80 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    valueOf

    +
    +

    Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

    Throws

    if this enum type has no constant with the specified name

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/values.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/values.html new file mode 100644 index 00000000..fcb3b98c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/-state/values.html @@ -0,0 +1,80 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    values

    +
    +

    Returns an array containing the constants of this enum type, in the order they're declared.

    This method may be used to iterate over the constants.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/build-image.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/build-image.html new file mode 100644 index 00000000..1c696e74 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/build-image.html @@ -0,0 +1,80 @@ + + + + + buildImage + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    buildImage

    +
    +
    abstract fun buildImage(): Boolean(source)

    Builds an image.

    Return

    true if the image is successfully built, false otherwise.

    Throws

    if there is any exception encountered during the image build process.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-finish-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-finish-time.html new file mode 100644 index 00000000..c66b9969 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-finish-time.html @@ -0,0 +1,80 @@ + + + + + getFinishTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getFinishTime

    +
    +
    abstract fun getFinishTime(): Instant?(source)

    Retrieves the finish time of the image building process.

    Return

    The finish time of the image building process as an Instant, or null if the process has not finished yet.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-start-time.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-start-time.html new file mode 100644 index 00000000..8491e479 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-start-time.html @@ -0,0 +1,80 @@ + + + + + getStartTime + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getStartTime

    +
    +
    abstract fun getStartTime(): Instant?(source)

    Retrieves the start time of the image build process.

    Return

    The start time of the image build as an Instant object, or null if the start time is unknown.

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-state.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-state.html new file mode 100644 index 00000000..65dbd76c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/get-state.html @@ -0,0 +1,80 @@ + + + + + getState + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    getState

    +
    +

    Retrieves the current state.

    This method returns the current state of the object.

    Return

    the current state

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/index.html new file mode 100644 index 00000000..a54276c6 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/index.html @@ -0,0 +1,466 @@ + + + + + ImageBuilder + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    ImageBuilder

    +
    abstract class ImageBuilder(source)

    An abstract class for building Docker images. The class is designed to be extended by specific (concrete) implementations.

    Kubernetes quirks

    In order to build Docker images in a k8s cluster (using Kaniko) from a test environment running outside the cluster, you would normally use a shared volume between the host and the k8s cluster.

    +In order to share a folder between the host and the k8s cluster the following config apply for Docker Desktop on +WSL (Windows Subsystem for Linux): +

      +
    • On the host the shared directory must be under /mnt/wsl/..
    • +
    • In the k8s cluster the shared directory must be specified to be under /run/desktop/mnt/host/wsl/..
    • +
      +    apiVersion: v1
      +kind: PersistentVolume
      +metadata:
      +name: kaniko-data-pv
      +labels:
      +    type: local
      +spec:
      +storageClassName: hostpath
      +capacity:
      +    storage: 100Mi
      +accessModes:
      +    - ReadWriteMany
      +hostPath: /run/desktop/mnt/host/wsl/kaniko-data
      +
      +

      +When creating and configuring the ImageBuilder, this path must be used as the local path. +

      
      +    val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES)
      +          .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/mnt/wsl/kaniko-data")
      +          // other properties
      +
      +

      +For KinD k8s the shared folder can be anywhere on the host file system, but the kind cluster must be configured +using a custom config applied at cluster startup in order for containers to mount the shared folder. +

      +Example: +

      +Host (wsl or native linux) path: /home/user/k8s-share/kaniko-data +

      +Kind cluster config: +

      +    kind: Cluster
      +apiVersion: kind.x-k8s.io/v1alpha4
      +networking:
      +apiServerAddress: "0.0.0.0"
      +nodes:
      +- role: control-plane
      +extraMounts:
      +    - hostPath: /home/[user]/kaniko-data
      +      containerPath: /kaniko-data
      +
      +

      +When creating and configuring the ImageBuilder (for kubernetes), this path must be used as the local path. +

      
      +    val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES)
      +          .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/home/[user]/kaniko-data")
      +          // other properties
      +
    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    +
    +
    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    object Companion
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun buildImage(): Boolean

    Builds an image.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getFinishTime(): Instant?

    Retrieves the finish time of the image building process.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract fun getStartTime(): Instant?

    Retrieves the start time of the image build process.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Retrieves the current state.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open override fun toString(): String

    Returns a string representation of this ImageBuilder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds a custom property to the image builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Set the Docker context directory. This directory will be used as the build context when building the Docker image.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the image registry for the ImageBuilder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun withInsecureRegistry(insecureRegistry: Boolean): ImageBuilder

    Sets the insecure registry flag for the image builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    fun withLabel(key: String, value: String): ImageBuilder

    Adds a label to the ImageBuilder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the name of the image.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the namespace for the ImageBuilder - this is only relevant for Kubernetes.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the provided OutputLineCallback for this ImageBuilder instance.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the (registry) repository for the ImageBuilder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Adds the given image tag to the builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Sets the verbosity level for the ImageBuilder.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/to-string.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/to-string.html new file mode 100644 index 00000000..52ba277d --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/to-string.html @@ -0,0 +1,80 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    toString

    +
    +
    open override fun toString(): String(source)

    Returns a string representation of this ImageBuilder.

    Return

    a string representation of this ImageBuilder

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-custom-property.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-custom-property.html new file mode 100644 index 00000000..d0d18744 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-custom-property.html @@ -0,0 +1,80 @@ + + + + + withCustomProperty + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withCustomProperty

    +
    +

    Adds a custom property to the image builder.

    Return

    the modified ImageBuilder object

    Parameters

    key

    the key of the custom property

    value

    the value of the custom property

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-docker-context-dir.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-docker-context-dir.html new file mode 100644 index 00000000..358b32df --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-docker-context-dir.html @@ -0,0 +1,80 @@ + + + + + withDockerContextDir + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withDockerContextDir

    +
    +

    Set the Docker context directory. This directory will be used as the build context when building the Docker image.

    Parameters

    dir

    the directory to use as the build context, if this exists the Dockerfile and all files in this directory are used to build the image.

    Throws

    if the dir argument is not a directory


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-image-registry.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-image-registry.html new file mode 100644 index 00000000..bf88604e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-image-registry.html @@ -0,0 +1,80 @@ + + + + + withImageRegistry + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withImageRegistry

    +
    +

    Sets the image registry for the ImageBuilder.

    Return

    the current ImageBuilder instance

    Parameters

    registry

    the registry URL to be set


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-insecure-registry.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-insecure-registry.html new file mode 100644 index 00000000..db012045 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-insecure-registry.html @@ -0,0 +1,80 @@ + + + + + withInsecureRegistry + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withInsecureRegistry

    +
    +

    Sets the insecure registry flag for the image builder.

    Return

    the updated image builder instance

    Parameters

    insecureRegistry

    true to allow insecure registry, false otherwise

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-label.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-label.html new file mode 100644 index 00000000..bd84ea87 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-label.html @@ -0,0 +1,80 @@ + + + + + withLabel + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withLabel

    +
    +

    Adds a label to the ImageBuilder.

    Return

    the modified ImageBuilder instance with the added label

    Parameters

    key

    the label key

    value

    the label value


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-labels.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-labels.html new file mode 100644 index 00000000..06ff3c14 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-labels.html @@ -0,0 +1,80 @@ + + + + + withLabels + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withLabels

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-name.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-name.html new file mode 100644 index 00000000..0eedb661 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-name.html @@ -0,0 +1,80 @@ + + + + + withName + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withName

    +
    +

    Sets the name of the image.

    Return

    The instance of the ImageBuilder with the name set.

    Parameters

    name

    The name to set for the image.


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-namespace.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-namespace.html new file mode 100644 index 00000000..eb25d2ee --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-namespace.html @@ -0,0 +1,80 @@ + + + + + withNamespace + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withNamespace

    +
    +

    Sets the namespace for the ImageBuilder - this is only relevant for Kubernetes.

    Return

    the updated ImageBuilder with the specified namespace set

    Parameters

    namespace

    the namespace to set for the ImageBuilder


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-output-line-callback.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-output-line-callback.html new file mode 100644 index 00000000..ecfe162c --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-output-line-callback.html @@ -0,0 +1,80 @@ + + + + + withOutputLineCallback + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withOutputLineCallback

    +
    +

    Sets the provided OutputLineCallback for this ImageBuilder instance.

    Return

    the modified ImageBuilder instance

    Parameters

    outputLineCallback

    the LineCallback to be used

    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-repository.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-repository.html new file mode 100644 index 00000000..4137da46 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-repository.html @@ -0,0 +1,80 @@ + + + + + withRepository + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withRepository

    +
    +

    Sets the (registry) repository for the ImageBuilder.

    Return

    The updated ImageBuilder.

    Parameters

    repository

    The repository to set for the ImageBuilder.


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tag.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tag.html new file mode 100644 index 00000000..c75ddd85 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tag.html @@ -0,0 +1,80 @@ + + + + + withTag + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withTag

    +
    +

    Adds the given image tag to the builder.

    Return

    the updated ImageBuilder instance

    Parameters

    tag

    the image tag to add


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tags.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tags.html new file mode 100644 index 00000000..4e19503e --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-tags.html @@ -0,0 +1,80 @@ + + + + + withTags + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withTags

    +
    + +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-verbosity.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-verbosity.html new file mode 100644 index 00000000..3645ce2b --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-image-builder/with-verbosity.html @@ -0,0 +1,80 @@ + + + + + withVerbosity + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    withVerbosity

    +
    +

    Sets the verbosity level for the ImageBuilder.

    Return

    the ImageBuilder instance

    Parameters

    verbosity

    the verbosity level to set


    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html new file mode 100644 index 00000000..f44ebc40 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html @@ -0,0 +1,80 @@ + + + + + PermissionException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PermissionException

    +
    +
    constructor()(source)
    constructor(message: String)(source)
    constructor(cause: Throwable)(source)
    constructor(message: String, cause: Throwable)(source)
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/index.html new file mode 100644 index 00000000..bab17a91 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/-permission-exception/index.html @@ -0,0 +1,262 @@ + + + + + PermissionException + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    PermissionException

    +

    PermissionException is a subclass of ContainerException that is used to represent exceptions that occur when there is a permission issue.

    +
    +
    +
    +
    +
    +

    Constructors

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    constructor()
    constructor(message: String)
    constructor(cause: Throwable)
    constructor(message: String, cause: Throwable)
    +
    +
    +
    +
    +
    +
    +
    +

    Properties

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val cause: Throwable?
    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    open val message: String?
    +
    +
    +
    +
    +
    +
    +
    +

    Functions

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/no.acntech.easycontainers/index.html b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/index.html new file mode 100644 index 00000000..f510dd53 --- /dev/null +++ b/apidocs/kdoc/easycontainers/no.acntech.easycontainers/index.html @@ -0,0 +1,208 @@ + + + + + no.acntech.easycontainers + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    Package-level declarations

    +
    +
    +
    +
    +
    +

    Types

    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    AbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime. It contains methods for starting and stopping containers, executing commands inside containers, transferring files to and from containers, and retrieving information about the container runtime.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    Abstract base class for container builders.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    An interface for defining a callback to configure a container builder. Implement the ContainerBuilderCallback interface to provide custom configuration logic for a container builder.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    ContainerException is a subclass of RuntimeException that is used to represent exceptions that occur in the context of container operations.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    GenericContainer represents a generic container implementation that can be customized and built using the provided builder. It implements the Container interface.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +
    abstract class ImageBuilder

    An abstract class for building Docker images. The class is designed to be extended by specific (concrete) implementations.

    +
    +
    +
    +
    + +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    +

    PermissionException is a subclass of ContainerException that is used to represent exceptions that occur when there is a permission issue.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/easycontainers/package-list b/apidocs/kdoc/easycontainers/package-list new file mode 100644 index 00000000..f3095e59 --- /dev/null +++ b/apidocs/kdoc/easycontainers/package-list @@ -0,0 +1,848 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:no.acntech.easycontainers.custom////PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/index.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/index.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.Companion/builder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-companion/builder.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/index.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder.Companion/IMAGE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-companion/-i-m-a-g-e.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/index.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder/ElasticSearchContainerBuilder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/-elastic-search-container-builder.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder/build/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/build.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer.ElasticSearchContainerBuilder/withVersion/#no.acntech.easycontainers.model.SemanticVersion/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container-builder/with-version.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/index.html +$dokka.location:no.acntech.easycontainers.custom/ElasticSearchContainer/ElasticSearchContainer/#no.acntech.easycontainers.custom.ElasticSearchContainer.ElasticSearchContainerBuilder/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-elastic-search-container/-elastic-search-container.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/index.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.Companion/builder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-companion/builder.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/index.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder.Companion/DEFAULT_KANIKO_IMAGE_URL/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-d-e-f-a-u-l-t_-k-a-n-i-k-o_-i-m-a-g-e_-u-r-l.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder.Companion/KANIKO_DATA_VOLUME_MOUNT_PATH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-companion/-k-a-n-i-k-o_-d-a-t-a_-v-o-l-u-m-e_-m-o-u-n-t_-p-a-t-h.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/index.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/KanikoContainerBuilder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/-kaniko-container-builder.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/build/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/build.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/to-string.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDeleteDockerContext/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-delete-docker-context.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDockerContextSubDir/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-sub-dir.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDockerContextSubDir/#no.acntech.easycontainers.model.UnixDir/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-sub-dir.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDockerContextVolume/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDockerContextVolume/#no.acntech.easycontainers.model.Volume/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withDockerContextVolume/#no.acntech.easycontainers.model.VolumeName/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-docker-context-volume.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withImageName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-image-name.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withImageName/#no.acntech.easycontainers.model.ImageName/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-image-name.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withInsecureRegistry/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-insecure-registry.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withRegistry/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-registry.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withRegistry/#no.acntech.easycontainers.model.RegistryURL/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-registry.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withRepository/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-repository.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withRepository/#no.acntech.easycontainers.model.RepositoryName/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-repository.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withTag/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tag.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withTag/#no.acntech.easycontainers.model.ImageTag/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tag.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withTags/#kotlin.collections.Set[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-tags.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withVerbosity/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-verbosity.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer.KanikoContainerBuilder/withVerbosity/#no.acntech.easycontainers.model.Verbosity/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container-builder/with-verbosity.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer///PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/index.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer/KanikoContainer/#no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/-kaniko-container.html +$dokka.location:no.acntech.easycontainers.custom/KanikoContainer/onDelete/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.custom/-kaniko-container/on-delete.html +$dokka.location:no.acntech.easycontainers.docker////PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/index.html +$dokka.location:no.acntech.easycontainers.docker/DockerClientFactory///PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/index.html +$dokka.location:no.acntech.easycontainers.docker/DockerClientFactory/createDefaultClient/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-client-factory/create-default-client.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants///PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/index.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/DEFAULT_BRIDGE_NETWORK/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-b-r-i-d-g-e_-n-e-t-w-o-r-k.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/DEFAULT_DOCKER_API_VERSION/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-a-p-i_-v-e-r-s-i-o-n.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/DEFAULT_DOCKER_DAEMON_ENDPOINT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/DEFAULT_DOCKER_TCP_INSECURE_PORT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-i-n-s-e-c-u-r-e_-p-o-r-t.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/DEFAULT_DOCKER_TCP_SECURE_PORT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-d-e-f-a-u-l-t_-d-o-c-k-e-r_-t-c-p_-s-e-c-u-r-e_-p-o-r-t.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/ENV_DOCKER_DAEMON_ENDPOINT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-e-n-v_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/NETWORK_MODE_BRIDGE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-b-r-i-d-g-e.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/NETWORK_MODE_HOST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-h-o-s-t.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/NETWORK_MODE_NONE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-m-o-d-e_-n-o-n-e.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/NETWORK_NODE_CONTAINER/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-n-e-t-w-o-r-k_-n-o-d-e_-c-o-n-t-a-i-n-e-r.html +$dokka.location:no.acntech.easycontainers.docker/DockerConstants/PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-constants/-p-r-o-p_-e-n-a-b-l-e_-n-a-t-i-v-e_-d-o-c-k-e-r_-e-n-t-r-y-p-o-i-n-t_-s-t-r-a-t-e-g-y.html +$dokka.location:no.acntech.easycontainers.docker/DockerRegistryUtils///PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/index.html +$dokka.location:no.acntech.easycontainers.docker/DockerRegistryUtils/deleteImage/#kotlin.String#kotlin.String#kotlin.String?#kotlin.collections.List[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/delete-image.html +$dokka.location:no.acntech.easycontainers.docker/DockerRegistryUtils/getAllImageTags/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-all-image-tags.html +$dokka.location:no.acntech.easycontainers.docker/DockerRegistryUtils/getImageDigest/#kotlin.String#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.docker/-docker-registry-utils/get-image-digest.html +$dokka.location:no.acntech.easycontainers.kubernetes////PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/APPS_GROUP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-a-p-p-s_-g-r-o-u-p.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/BATCH_GROUP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-b-a-t-c-h_-g-r-o-u-p.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/CONFIG_MAPS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-o-n-f-i-g_-m-a-p-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/CREATE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-c-r-e-a-t-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/DEFAULT_GROUP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-f-a-u-l-t_-g-r-o-u-p.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/DELETE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-l-e-t-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/DEPLOYMENTS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-d-e-p-l-o-y-m-e-n-t-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/GET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-g-e-t.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/JOBS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-j-o-b-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/LIST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-l-i-s-t.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/NAMESPACE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-n-a-m-e-s-p-a-c-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/PODS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/POD_LOGS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-p-o-d_-l-o-g-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/SERVICES/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-s-e-r-v-i-c-e-s.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/UPDATE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-u-p-d-a-t-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker.Companion/WATCH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-companion/-w-a-t-c-h.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/AccessChecker/#io.fabric8.kubernetes.client.KubernetesClient/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/-access-checker.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canCreateConfigMaps/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-config-maps.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canCreateDeployments/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-deployments.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canCreateJobs/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-jobs.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canCreateNamespaces/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-namespaces.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canCreateServices/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-create-services.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canListNamespaces/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-namespaces.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canListPods/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-list-pods.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canMonitorDeployments/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-deployments.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canMonitorJobs/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-jobs.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/canMonitorPods/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/can-monitor-pods.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireCreateConfigMaps/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-config-maps.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireCreateDeployments/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-deployments.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireCreateJobs/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-jobs.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireCreateNamespaces/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-namespaces.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireCreateServices/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-create-services.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireListNamespaces/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-namespaces.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireListPods/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-list-pods.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireMonitorDeployments/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-deployments.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireMonitorJobs/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-jobs.html +$dokka.location:no.acntech.easycontainers.kubernetes/AccessChecker/requireMonitorPods/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-access-checker/require-monitor-pods.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer/ContainerLogStreamer/#kotlin.String#kotlin.String#io.fabric8.kubernetes.client.KubernetesClient#no.acntech.easycontainers.output.OutputLineCallback/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/-container-log-streamer.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer/namespace/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/namespace.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer/podName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/pod-name.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer/run/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/run.html +$dokka.location:no.acntech.easycontainers.kubernetes/ContainerLogStreamer/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-container-log-streamer/stop.html +$dokka.location:no.acntech.easycontainers.kubernetes/ErrorSupport///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/ErrorSupport/handleK8sException/#java.lang.Exception#org.slf4j.Logger/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-error-support/handle-k8s-exception.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sClientFactory///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sClientFactory/createDefaultClient/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-client-factory/create-default-client.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/APP_LABEL/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-a-p-p_-l-a-b-e-l.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/CLUSTER_IP_DIRECTIVE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-c-l-u-s-t-e-r_-i-p_-d-i-r-e-c-t-i-v-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/DEFAULT_NAMESPACE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-d-e-f-a-u-l-t_-n-a-m-e-s-p-a-c-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/ENV_HOSTNAME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-h-o-s-t-n-a-m-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/ENV_KUBERNETES_SERVICE_HOST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-h-o-s-t.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/ENV_KUBERNETES_SERVICE_PORT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-e-n-v_-k-u-b-e-r-n-e-t-e-s_-s-e-r-v-i-c-e_-p-o-r-t.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/MEDIUM_MEMORY_BACKED/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-m-e-d-i-u-m_-m-e-m-o-r-y_-b-a-c-k-e-d.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/NODE_PORT_DIRECTIVE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-d-i-r-e-c-t-i-v-e.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/NODE_PORT_RANGE_END/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-e-n-d.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/NODE_PORT_RANGE_START/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-n-o-d-e_-p-o-r-t_-r-a-n-g-e_-s-t-a-r-t.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sConstants/SERVICE_ACCOUNT_PATH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-constants/-s-e-r-v-i-c-e_-a-c-c-o-u-n-t_-p-a-t-h.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sJobRuntime///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sJobRuntime/K8sJobRuntime/#no.acntech.easycontainers.GenericContainer#io.fabric8.kubernetes.client.KubernetesClient/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/-k8s-job-runtime.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sJobRuntime/start/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/start.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sJobRuntime/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-job-runtime/stop.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/CONFIG_MAP_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-f-i-g_-m-a-p_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/CONTAINER_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-c-o-n-t-a-i-n-e-r_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/DEPLOYMENT_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-d-e-p-l-o-y-m-e-n-t_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/POD_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-o-d_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/PVC_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v-c_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/PV_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-p-v_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/SERVICE_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-s-e-r-v-i-c-e_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime.Companion/VOLUME_NAME_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-companion/-v-o-l-u-m-e_-n-a-m-e_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/K8sRuntime/#no.acntech.easycontainers.GenericContainer#io.fabric8.kubernetes.client.KubernetesClient/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/-k8s-runtime.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/delete/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/delete.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/getName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-name.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/getType/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/get-type.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/start/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/start.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sRuntime/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-runtime/stop.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sServiceRuntime///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sServiceRuntime/K8sServiceRuntime/#no.acntech.easycontainers.GenericContainer#io.fabric8.kubernetes.client.KubernetesClient/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/-k8s-service-runtime.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sServiceRuntime/kill/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/kill.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sServiceRuntime/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-service-runtime/stop.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/canAccessClusterAPI/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/can-access-cluster-a-p-i.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/instantToLabelValue/#java.time.Instant/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/instant-to-label-value.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/isLegalLabelKey/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-key.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/isLegalLabelValue/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-legal-label-value.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/isRunningInsideCluster/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-inside-cluster.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/isRunningOutsideCluster/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/is-running-outside-cluster.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/normalizeConfigMapName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-config-map-name.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/normalizeLabelKey/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-key.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/normalizeLabelValue/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-label-value.html +$dokka.location:no.acntech.easycontainers.kubernetes/K8sUtils/normalizeVolumeName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-k8s-utils/normalize-volume-name.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase.FAILED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-f-a-i-l-e-d/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase.PENDING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-p-e-n-d-i-n-g/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase.RUNNING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-r-u-n-n-i-n-g/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase.SUCCEEDED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-s-u-c-c-e-e-d-e-d/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase.UNKNOWN///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/-u-n-k-n-o-w-n/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase///PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/index.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/entries.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/value-of.html +$dokka.location:no.acntech.easycontainers.kubernetes/PodPhase/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.kubernetes/-pod-phase/values.html +$dokka.location:no.acntech.easycontainers.model.base////PointingToDeclaration/easycontainers/no.acntech.easycontainers.model.base/index.html +$dokka.location:no.acntech.easycontainers.model.base/SimpleValueObject///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/index.html +$dokka.location:no.acntech.easycontainers.model.base/SimpleValueObject/compareTo/#no.acntech.easycontainers.model.base.SimpleValueObject[TypeParam(bounds=[kotlin.Comparable[^]])]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/compare-to.html +$dokka.location:no.acntech.easycontainers.model.base/SimpleValueObject/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model.base/-simple-value-object/unwrap.html +$dokka.location:no.acntech.easycontainers.model.base/ValueObject///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model.base/-value-object/index.html +$dokka.location:no.acntech.easycontainers.model////PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/index.html +$dokka.location:no.acntech.easycontainers.model/Arg.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Arg.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Arg///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/index.html +$dokka.location:no.acntech.easycontainers.model/Arg/Arg/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/-arg.html +$dokka.location:no.acntech.easycontainers.model/Arg/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/to-string.html +$dokka.location:no.acntech.easycontainers.model/Arg/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/unwrap.html +$dokka.location:no.acntech.easycontainers.model/Arg/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-arg/value.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion/of/#kotlin.Array[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion/of/#kotlin.collections.List[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Args.Companion/ofWhiteSpaceSeparated/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/-companion/of-white-space-separated.html +$dokka.location:no.acntech.easycontainers.model/Args///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/index.html +$dokka.location:no.acntech.easycontainers.model/Args/Args/#kotlin.collections.List[no.acntech.easycontainers.model.Arg]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/-args.html +$dokka.location:no.acntech.easycontainers.model/Args/args/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/args.html +$dokka.location:no.acntech.easycontainers.model/Args/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/to-string.html +$dokka.location:no.acntech.easycontainers.model/Args/toStringList/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-args/to-string-list.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion/MILLI_CPU_SUFFIX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/-m-i-l-l-i_-c-p-u_-s-u-f-f-i-x.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion/of/#kotlin.Double/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/CPU.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/CPU///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/index.html +$dokka.location:no.acntech.easycontainers.model/CPU/CPU/#kotlin.Double/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/-c-p-u.html +$dokka.location:no.acntech.easycontainers.model/CPU/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/to-string.html +$dokka.location:no.acntech.easycontainers.model/CPU/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/unwrap.html +$dokka.location:no.acntech.easycontainers.model/CPU/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-c-p-u/value.html +$dokka.location:no.acntech.easycontainers.model/Container.State.DELETED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-d-e-l-e-t-e-d/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.FAILED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-f-a-i-l-e-d/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.INITIALIZING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-i-n-i-t-i-a-l-i-z-i-n-g/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.RUNNING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-r-u-n-n-i-n-g/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.STOPPED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-s-t-o-p-p-e-d/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.TERMINATING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-t-e-r-m-i-n-a-t-i-n-g/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.UNINITIATED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-i-n-i-t-i-a-t-e-d/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State.UNKNOWN///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container/-state/-u-n-k-n-o-w-n/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/-state/index.html +$dokka.location:no.acntech.easycontainers.model/Container.State/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/-state/entries.html +$dokka.location:no.acntech.easycontainers.model/Container.State/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/-state/value-of.html +$dokka.location:no.acntech.easycontainers.model/Container.State/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/-state/values.html +$dokka.location:no.acntech.easycontainers.model/Container///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/index.html +$dokka.location:no.acntech.easycontainers.model/Container/execute/#kotlin.collections.List[kotlin.String]#kotlin.Boolean#kotlin.String?#java.io.InputStream?#java.io.OutputStream#kotlin.Long?#java.util.concurrent.TimeUnit?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/execute.html +$dokka.location:no.acntech.easycontainers.model/Container/execute/#no.acntech.easycontainers.model.Executable#no.acntech.easycontainers.model.Args?#kotlin.Boolean#no.acntech.easycontainers.model.UnixDir?#java.io.InputStream?#java.io.OutputStream#kotlin.Long?#java.util.concurrent.TimeUnit?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/execute.html +$dokka.location:no.acntech.easycontainers.model/Container/getArgs/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-args.html +$dokka.location:no.acntech.easycontainers.model/Container/getCommand/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-command.html +$dokka.location:no.acntech.easycontainers.model/Container/getDirectory/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-directory.html +$dokka.location:no.acntech.easycontainers.model/Container/getDirectory/#no.acntech.easycontainers.model.UnixDir#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-directory.html +$dokka.location:no.acntech.easycontainers.model/Container/getDuration/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-duration.html +$dokka.location:no.acntech.easycontainers.model/Container/getEnv/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-env.html +$dokka.location:no.acntech.easycontainers.model/Container/getExecutionMode/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-execution-mode.html +$dokka.location:no.acntech.easycontainers.model/Container/getExitCode/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-exit-code.html +$dokka.location:no.acntech.easycontainers.model/Container/getExposedPorts/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-exposed-ports.html +$dokka.location:no.acntech.easycontainers.model/Container/getFile/#kotlin.String#kotlin.String#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-file.html +$dokka.location:no.acntech.easycontainers.model/Container/getFile/#no.acntech.easycontainers.model.UnixDir#kotlin.String#java.nio.file.Path?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-file.html +$dokka.location:no.acntech.easycontainers.model/Container/getHost/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-host.html +$dokka.location:no.acntech.easycontainers.model/Container/getImage/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-image.html +$dokka.location:no.acntech.easycontainers.model/Container/getIpAddress/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-ip-address.html +$dokka.location:no.acntech.easycontainers.model/Container/getLabels/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-labels.html +$dokka.location:no.acntech.easycontainers.model/Container/getMappedPort/#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-mapped-port.html +$dokka.location:no.acntech.easycontainers.model/Container/getMaxLifeTime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-max-life-time.html +$dokka.location:no.acntech.easycontainers.model/Container/getName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-name.html +$dokka.location:no.acntech.easycontainers.model/Container/getNamespace/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-namespace.html +$dokka.location:no.acntech.easycontainers.model/Container/getNetworkName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-network-name.html +$dokka.location:no.acntech.easycontainers.model/Container/getOutputLineCallback/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-output-line-callback.html +$dokka.location:no.acntech.easycontainers.model/Container/getPortMappings/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-port-mappings.html +$dokka.location:no.acntech.easycontainers.model/Container/getRuntime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-runtime.html +$dokka.location:no.acntech.easycontainers.model/Container/getState/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-state.html +$dokka.location:no.acntech.easycontainers.model/Container/getVolumes/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/get-volumes.html +$dokka.location:no.acntech.easycontainers.model/Container/hasPortMapping/#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/has-port-mapping.html +$dokka.location:no.acntech.easycontainers.model/Container/isEphemeral/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/is-ephemeral.html +$dokka.location:no.acntech.easycontainers.model/Container/onDelete/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/on-delete.html +$dokka.location:no.acntech.easycontainers.model/Container/putDirectory/#java.nio.file.Path#no.acntech.easycontainers.model.UnixDir/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/put-directory.html +$dokka.location:no.acntech.easycontainers.model/Container/putDirectory/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/put-directory.html +$dokka.location:no.acntech.easycontainers.model/Container/putFile/#java.nio.file.Path#no.acntech.easycontainers.model.UnixDir#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/put-file.html +$dokka.location:no.acntech.easycontainers.model/Container/putFile/#kotlin.String#kotlin.String#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/put-file.html +$dokka.location:no.acntech.easycontainers.model/Container/waitForCompletion/#kotlin.Long#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/wait-for-completion.html +$dokka.location:no.acntech.easycontainers.model/Container/waitForState/#no.acntech.easycontainers.model.Container.State#kotlin.Long#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container/wait-for-state.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/build/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/build.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withArgs/#kotlin.collections.List[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-args.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withArgs/#no.acntech.easycontainers.model.Args/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-args.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCommand/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-command.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCommand/#no.acntech.easycontainers.model.Executable/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-command.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerFile/#kotlin.String#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerFile/#kotlin.String#kotlin.String#kotlin.collections.Map[kotlin.String,kotlin.String]#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerFile/#no.acntech.easycontainers.model.ContainerFile/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerFile/#no.acntech.easycontainers.model.ContainerFileName#no.acntech.easycontainers.model.UnixDir#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerFile/#no.acntech.easycontainers.model.ContainerFileName#no.acntech.easycontainers.model.UnixDir#kotlin.collections.Map[kotlin.String,kotlin.String]#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withContainerPlatformType/#no.acntech.easycontainers.model.ContainerPlatformType/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-container-platform-type.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuLimit/#kotlin.Double/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuLimit/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuLimit/#no.acntech.easycontainers.model.CPU/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuRequest/#kotlin.Double/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuRequest/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCpuRequest/#no.acntech.easycontainers.model.CPU/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-cpu-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withCustomProperty/#kotlin.String#kotlin.Any/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-custom-property.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withEnv/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withEnv/#kotlin.collections.Map[no.acntech.easycontainers.model.EnvVarKey,no.acntech.easycontainers.model.EnvVarValue]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withEnv/#no.acntech.easycontainers.model.EnvVarKey#no.acntech.easycontainers.model.EnvVarValue/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withEnvAsStringMap/#kotlin.collections.Map[kotlin.String,kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-env-as-string-map.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withExecutionMode/#no.acntech.easycontainers.model.ExecutionMode/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-execution-mode.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withExposedPort/#kotlin.String#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-exposed-port.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withExposedPort/#no.acntech.easycontainers.model.PortMappingName#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-exposed-port.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withImage/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-image.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withImage/#no.acntech.easycontainers.model.ImageURL/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-image.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withIsEphemeral/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-is-ephemeral.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withLabel/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-label.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withLabel/#no.acntech.easycontainers.model.LabelKey#no.acntech.easycontainers.model.LabelValue/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-label.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMaxLifeTime/#java.time.Duration/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMaxLifeTime/#kotlin.Long#java.time.temporal.ChronoUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMaxLifeTime/#kotlin.Long#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-max-life-time.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryLimit/#java.math.BigInteger/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryLimit/#kotlin.Long/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryLimit/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryLimit/#no.acntech.easycontainers.model.Memory/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-limit.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryRequest/#java.math.BigInteger/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryRequest/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withMemoryRequest/#no.acntech.easycontainers.model.Memory/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-memory-request.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withName/#no.acntech.easycontainers.model.ContainerName/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withNamespace/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-namespace.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withNamespace/#no.acntech.easycontainers.model.Namespace/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-namespace.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withNetworkName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-network-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withNetworkName/#no.acntech.easycontainers.model.NetworkName/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-network-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withOutputLineCallback/#no.acntech.easycontainers.output.OutputLineCallback/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-output-line-callback.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withPortMapping/#kotlin.Int#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-port-mapping.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withPortMapping/#no.acntech.easycontainers.model.NetworkPort#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-port-mapping.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withVolume/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withVolume/#no.acntech.easycontainers.model.Volume/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html +$dokka.location:no.acntech.easycontainers.model/ContainerBuilder/withVolume/#no.acntech.easycontainers.model.VolumeName#no.acntech.easycontainers.model.UnixDir/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-builder/with-volume.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile/ContainerFile/#no.acntech.easycontainers.model.ContainerFileName#no.acntech.easycontainers.model.UnixDir#kotlin.String?#java.nio.file.Path?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/-container-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile/content/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/content.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile/hostFile/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/host-file.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile/mountPath/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/mount-path.html +$dokka.location:no.acntech.easycontainers.model/ContainerFile/name/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file/name.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName/ContainerFileName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/-container-file-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/ContainerFileName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-file-name/value.html +$dokka.location:no.acntech.easycontainers.model/ContainerName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ContainerName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerName/ContainerName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/-container-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/ContainerName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/ContainerName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-name/value.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType.DOCKER///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container-platform-type/-d-o-c-k-e-r/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType.KUBERNETES///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-container-platform-type/-k-u-b-e-r-n-e-t-e-s/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-platform-type/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-platform-type/entries.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-platform-type/value-of.html +$dokka.location:no.acntech.easycontainers.model/ContainerPlatformType/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-platform-type/values.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/index.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/delete/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/delete.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/getContainer/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-container.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/getName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-name.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/getType/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/get-type.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/kill/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/kill.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/start/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/start.html +$dokka.location:no.acntech.easycontainers.model/ContainerRuntime/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-container-runtime/stop.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/index.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey/EnvVarKey/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/-env-var-key.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/to-string.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/unwrap.html +$dokka.location:no.acntech.easycontainers.model/EnvVarKey/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-key/value.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/index.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue/EnvVarValue/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/-env-var-value.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/to-string.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/unwrap.html +$dokka.location:no.acntech.easycontainers.model/EnvVarValue/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-env-var-value/value.html +$dokka.location:no.acntech.easycontainers.model/Executable.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Executable.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Executable///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/index.html +$dokka.location:no.acntech.easycontainers.model/Executable/Executable/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/-executable.html +$dokka.location:no.acntech.easycontainers.model/Executable/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/to-string.html +$dokka.location:no.acntech.easycontainers.model/Executable/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/unwrap.html +$dokka.location:no.acntech.easycontainers.model/Executable/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-executable/value.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode.SERVICE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-execution-mode/-s-e-r-v-i-c-e/index.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode.TASK///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-execution-mode/-t-a-s-k/index.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-execution-mode/index.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-execution-mode/entries.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-execution-mode/value-of.html +$dokka.location:no.acntech.easycontainers.model/ExecutionMode/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-execution-mode/values.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion/MAX_LENGTH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-a-x_-l-e-n-g-t-h.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion/MIN_LENGTH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/-companion/-m-i-n_-l-e-n-g-t-h.html +$dokka.location:no.acntech.easycontainers.model/Host.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Host///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/index.html +$dokka.location:no.acntech.easycontainers.model/Host/Host/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/-host.html +$dokka.location:no.acntech.easycontainers.model/Host/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/to-string.html +$dokka.location:no.acntech.easycontainers.model/Host/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/unwrap.html +$dokka.location:no.acntech.easycontainers.model/Host/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-host/value.html +$dokka.location:no.acntech.easycontainers.model/ImageName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/ImageName.Companion/DEFAULT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/-d-e-f-a-u-l-t.html +$dokka.location:no.acntech.easycontainers.model/ImageName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ImageName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/index.html +$dokka.location:no.acntech.easycontainers.model/ImageName/ImageName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/-image-name.html +$dokka.location:no.acntech.easycontainers.model/ImageName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/ImageName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/ImageName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-name/value.html +$dokka.location:no.acntech.easycontainers.model/ImageTag.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/ImageTag.Companion/LATEST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/-l-a-t-e-s-t.html +$dokka.location:no.acntech.easycontainers.model/ImageTag.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ImageTag///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/index.html +$dokka.location:no.acntech.easycontainers.model/ImageTag/ImageTag/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/-image-tag.html +$dokka.location:no.acntech.easycontainers.model/ImageTag/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/to-string.html +$dokka.location:no.acntech.easycontainers.model/ImageTag/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/unwrap.html +$dokka.location:no.acntech.easycontainers.model/ImageTag/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-tag/value.html +$dokka.location:no.acntech.easycontainers.model/ImageURL.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/ImageURL.Companion/of/#kotlin.String#kotlin.String#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ImageURL.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/ImageURL///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/index.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/ImageURL/#no.acntech.easycontainers.model.RegistryURL#no.acntech.easycontainers.model.RepositoryName#no.acntech.easycontainers.model.ImageName#no.acntech.easycontainers.model.ImageTag/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/-image-u-r-l.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/imageName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/image-name.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/registryUrl/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/registry-url.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/repositoryName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/repository-name.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/tag/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/tag.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/toFQDN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-f-q-d-n.html +$dokka.location:no.acntech.easycontainers.model/ImageURL/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-image-u-r-l/to-string.html +$dokka.location:no.acntech.easycontainers.model/LabelKey.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/LabelKey.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/LabelKey///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/index.html +$dokka.location:no.acntech.easycontainers.model/LabelKey/LabelKey/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/-label-key.html +$dokka.location:no.acntech.easycontainers.model/LabelKey/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/to-string.html +$dokka.location:no.acntech.easycontainers.model/LabelKey/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/unwrap.html +$dokka.location:no.acntech.easycontainers.model/LabelKey/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-key/value.html +$dokka.location:no.acntech.easycontainers.model/LabelValue.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/LabelValue.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/LabelValue///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/index.html +$dokka.location:no.acntech.easycontainers.model/LabelValue/LabelValue/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/-label-value.html +$dokka.location:no.acntech.easycontainers.model/LabelValue/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/to-string.html +$dokka.location:no.acntech.easycontainers.model/LabelValue/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/unwrap.html +$dokka.location:no.acntech.easycontainers.model/LabelValue/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-label-value/value.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Ei/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ei.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Gi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-gi.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Ki/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ki.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Mi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-mi.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Pi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-pi.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/Ti/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/-ti.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/of/#java.math.BigInteger/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Memory.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Memory///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/index.html +$dokka.location:no.acntech.easycontainers.model/Memory/Memory/#java.math.BigInteger/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/-memory.html +$dokka.location:no.acntech.easycontainers.model/Memory/bytes/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/bytes.html +$dokka.location:no.acntech.easycontainers.model/Memory/toEi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-ei.html +$dokka.location:no.acntech.easycontainers.model/Memory/toFormattedString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-formatted-string.html +$dokka.location:no.acntech.easycontainers.model/Memory/toGi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-gi.html +$dokka.location:no.acntech.easycontainers.model/Memory/toKi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-ki.html +$dokka.location:no.acntech.easycontainers.model/Memory/toMi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-mi.html +$dokka.location:no.acntech.easycontainers.model/Memory/toPi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-pi.html +$dokka.location:no.acntech.easycontainers.model/Memory/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-string.html +$dokka.location:no.acntech.easycontainers.model/Memory/toTi/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/to-ti.html +$dokka.location:no.acntech.easycontainers.model/Memory/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-memory/unwrap.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion/DEFAULT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-d-e-f-a-u-l-t.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion/TEST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/-t-e-s-t.html +$dokka.location:no.acntech.easycontainers.model/Namespace.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Namespace///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/index.html +$dokka.location:no.acntech.easycontainers.model/Namespace/Namespace/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/-namespace.html +$dokka.location:no.acntech.easycontainers.model/Namespace/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/unwrap.html +$dokka.location:no.acntech.easycontainers.model/Namespace/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-namespace/value.html +$dokka.location:no.acntech.easycontainers.model/NetworkName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/NetworkName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/NetworkName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/index.html +$dokka.location:no.acntech.easycontainers.model/NetworkName/NetworkName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/-network-name.html +$dokka.location:no.acntech.easycontainers.model/NetworkName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/NetworkName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/NetworkName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-name/value.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion/HTTP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion/HTTPS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-h-t-t-p-s.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion/SSH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/-s-s-h.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion/of/#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/index.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort/NetworkPort/#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/-network-port.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/to-string.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/unwrap.html +$dokka.location:no.acntech.easycontainers.model/NetworkPort/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-network-port/value.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion/HTTP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion/HTTPS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-h-t-t-p-s.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion/SSH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-s-s-h.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion/TRANSPORT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/-t-r-a-n-s-p-o-r-t.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/index.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName/PortMappingName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/-port-mapping-name.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/PortMappingName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-port-mapping-name/value.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion/DOCKER/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-d-o-c-k-e-r.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion/KUBERNETES/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-k-u-b-e-r-n-e-t-e-s.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion/LOCAL/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/-l-o-c-a-l.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/index.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL/RegistryURL/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/-registry-u-r-l.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/to-string.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/unwrap.html +$dokka.location:no.acntech.easycontainers.model/RegistryURL/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-registry-u-r-l/value.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion/DEFAULT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-d-e-f-a-u-l-t.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion/TEST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/-t-e-s-t.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/index.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName/RepositoryName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/-repository-name.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/RepositoryName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-repository-name/value.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/index.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion/SemanticVersion/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/-semantic-version.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/to-string.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/unwrap.html +$dokka.location:no.acntech.easycontainers.model/SemanticVersion/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-semantic-version/value.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/ETC/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-e-t-c.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/HOME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-h-o-m-e.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/MNT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-m-n-t.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/ROOT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-r-o-o-t.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/TMP/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/-t-m-p.html +$dokka.location:no.acntech.easycontainers.model/UnixDir.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/UnixDir///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/index.html +$dokka.location:no.acntech.easycontainers.model/UnixDir/UnixDir/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/-unix-dir.html +$dokka.location:no.acntech.easycontainers.model/UnixDir/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/to-string.html +$dokka.location:no.acntech.easycontainers.model/UnixDir/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/unwrap.html +$dokka.location:no.acntech.easycontainers.model/UnixDir/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-unix-dir/value.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.DEBUG///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-d-e-b-u-g/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.ERROR///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-e-r-r-o-r/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.FATAL///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-f-a-t-a-l/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.INFO///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-i-n-f-o/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.PANIC///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-p-a-n-i-c/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.TRACE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-t-r-a-c-e/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity.WARN///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers.model/-verbosity/-w-a-r-n/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/index.html +$dokka.location:no.acntech.easycontainers.model/Verbosity/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/entries.html +$dokka.location:no.acntech.easycontainers.model/Verbosity/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/value.html +$dokka.location:no.acntech.easycontainers.model/Verbosity/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/value-of.html +$dokka.location:no.acntech.easycontainers.model/Verbosity/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-verbosity/values.html +$dokka.location:no.acntech.easycontainers.model/Volume///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/index.html +$dokka.location:no.acntech.easycontainers.model/Volume/Volume/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/-volume.html +$dokka.location:no.acntech.easycontainers.model/Volume/Volume/#no.acntech.easycontainers.model.VolumeName#no.acntech.easycontainers.model.UnixDir#java.nio.file.Path?#kotlin.Boolean#no.acntech.easycontainers.model.Memory?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/-volume.html +$dokka.location:no.acntech.easycontainers.model/Volume/hostDir/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/host-dir.html +$dokka.location:no.acntech.easycontainers.model/Volume/memory/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/memory.html +$dokka.location:no.acntech.easycontainers.model/Volume/memoryBacked/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/memory-backed.html +$dokka.location:no.acntech.easycontainers.model/Volume/mountDir/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/mount-dir.html +$dokka.location:no.acntech.easycontainers.model/Volume/name/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume/name.html +$dokka.location:no.acntech.easycontainers.model/VolumeName.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/index.html +$dokka.location:no.acntech.easycontainers.model/VolumeName.Companion/of/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/-companion/of.html +$dokka.location:no.acntech.easycontainers.model/VolumeName///PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/index.html +$dokka.location:no.acntech.easycontainers.model/VolumeName/VolumeName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/-volume-name.html +$dokka.location:no.acntech.easycontainers.model/VolumeName/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/to-string.html +$dokka.location:no.acntech.easycontainers.model/VolumeName/unwrap/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/unwrap.html +$dokka.location:no.acntech.easycontainers.model/VolumeName/value/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.model/-volume-name/value.html +$dokka.location:no.acntech.easycontainers.output////PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/index.html +$dokka.location:no.acntech.easycontainers.output/LineReader///PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-line-reader/index.html +$dokka.location:no.acntech.easycontainers.output/LineReader/LineReader/#java.io.InputStream#no.acntech.easycontainers.output.OutputLineCallback/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-line-reader/-line-reader.html +$dokka.location:no.acntech.easycontainers.output/LineReader/read/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-line-reader/read.html +$dokka.location:no.acntech.easycontainers.output/LineReader/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-line-reader/stop.html +$dokka.location:no.acntech.easycontainers.output/OutputLineCallback///PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-output-line-callback/index.html +$dokka.location:no.acntech.easycontainers.output/OutputLineCallback/onLine/#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-output-line-callback/on-line.html +$dokka.location:no.acntech.easycontainers.output/Slf4JOutputLineCallback///PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/index.html +$dokka.location:no.acntech.easycontainers.output/Slf4JOutputLineCallback/Slf4JOutputLineCallback/#org.slf4j.Logger#org.slf4j.event.Level#org.slf4j.Marker?#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/-slf4-j-output-line-callback.html +$dokka.location:no.acntech.easycontainers.output/Slf4JOutputLineCallback/onLine/#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.output/-slf4-j-output-line-callback/on-line.html +$dokka.location:no.acntech.easycontainers.util.collections////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/index.html +$dokka.location:no.acntech.easycontainers.util.collections//prettyPrint/kotlin.collections.List[*]#kotlin.Int#kotlin.Char/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/pretty-print.html +$dokka.location:no.acntech.easycontainers.util.collections//prettyPrint/kotlin.collections.Map[*,*]#kotlin.Boolean#kotlin.Int#kotlin.Char#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/pretty-print.html +$dokka.location:no.acntech.easycontainers.util.collections//toStringCollection/kotlin.collections.Collection[*]#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/to-string-collection.html +$dokka.location:no.acntech.easycontainers.util.collections//toStringList/kotlin.collections.List[*]#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/to-string-list.html +$dokka.location:no.acntech.easycontainers.util.collections//toStringMap/kotlin.collections.Map[*,*]#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/to-string-map.html +$dokka.location:no.acntech.easycontainers.util.collections//toStringSet/kotlin.collections.Set[*]#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.collections/to-string-set.html +$dokka.location:no.acntech.easycontainers.util.io////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/index.html +$dokka.location:no.acntech.easycontainers.util.io//closeQuietly/java.io.Closeable?#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/close-quietly.html +$dokka.location:no.acntech.easycontainers.util.io//pipe/#kotlin.Function1[java.io.OutputStream,TypeParam(bounds=[kotlin.Any?])]#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/pipe.html +$dokka.location:no.acntech.easycontainers.util.io//pipe/#kotlin.Function1[java.io.OutputStream,TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/pipe.html +$dokka.location:no.acntech.easycontainers.util.io//toUtf8String/java.io.ByteArrayOutputStream#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/to-utf8-string.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/index.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/isCompleteUnixPath/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/is-complete-unix-path.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/tar/#java.nio.file.Path#java.io.OutputStream#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/tar/#java.nio.file.Path#java.nio.file.Path#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/tar/#java.nio.file.Path#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/tarFile/#java.nio.file.Path#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/tar-file.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/untar/#java.io.File#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/untar/#java.io.InputStream#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar.html +$dokka.location:no.acntech.easycontainers.util.io/FileUtils/untarFile/#java.io.File#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.io/-file-utils/untar-file.html +$dokka.location:no.acntech.easycontainers.util.lang////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/index.html +$dokka.location:no.acntech.easycontainers.util.lang//SNAKE_TO_CAMEL/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-s-n-a-k-e_-t-o_-c-a-m-e-l.html +$dokka.location:no.acntech.easycontainers.util.lang//asStringMap/kotlin.Any#kotlin.collections.Map[kotlin.String,kotlin.Any?]#kotlin.collections.MutableSet[kotlin.Any]#kotlin.Int#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/as-string-map.html +$dokka.location:no.acntech.easycontainers.util.lang//createCaseFormatTransformFunction/#com.google.common.base.CaseFormat#com.google.common.base.CaseFormat/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/create-case-format-transform-function.html +$dokka.location:no.acntech.easycontainers.util.lang//defaultFinally/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/default-finally.html +$dokka.location:no.acntech.easycontainers.util.lang//defaultNoMatchHandler/#java.lang.Exception/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/default-no-match-handler.html +$dokka.location:no.acntech.easycontainers.util.lang//defaultOnError/#java.lang.Exception/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/default-on-error.html +$dokka.location:no.acntech.easycontainers.util.lang//guardedExecution/#kotlin.Function0[kotlin.Unit]#kotlin.Array[kotlin.Pair[kotlin.collections.List[kotlin.reflect.KClass[java.lang.Exception]],kotlin.Function1[java.lang.Exception,kotlin.Unit]]]#kotlin.Function1[java.lang.Exception,kotlin.Unit]#kotlin.Function0[kotlin.Unit]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/guarded-execution.html +$dokka.location:no.acntech.easycontainers.util.lang//guardedExecution/#kotlin.Function0[kotlin.Unit]#kotlin.collections.List[kotlin.reflect.KClass[java.lang.Exception]]#kotlin.Function1[java.lang.Exception,kotlin.Unit]#kotlin.Function1[java.lang.Exception,kotlin.Unit]#kotlin.Function0[kotlin.Unit]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/guarded-execution.html +$dokka.location:no.acntech.easycontainers.util.lang//identityTransform/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/identity-transform.html +$dokka.location:no.acntech.easycontainers.util.lang//prettyPrintMe/kotlin.Any#kotlin.collections.Map[kotlin.String,kotlin.Any]/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/pretty-print-me.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/index.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/RangeValidator/#TypeParam(bounds=[kotlin.Comparable[^]])?#TypeParam(bounds=[kotlin.Comparable[^]])?#TypeParam(bounds=[kotlin.Comparable[^]])?#TypeParam(bounds=[kotlin.Comparable[^]])?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/-range-validator.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/exclusiveMax/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-max.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/exclusiveMin/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/exclusive-min.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/inclusiveMax/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-max.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/inclusiveMin/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/inclusive-min.html +$dokka.location:no.acntech.easycontainers.util.lang/RangeValidator/validate/#TypeParam(bounds=[kotlin.Comparable[^]])/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-range-validator/validate.html +$dokka.location:no.acntech.easycontainers.util.lang/Transform///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-transform/index.html +$dokka.location:no.acntech.easycontainers.util.lang/ValidationException///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/index.html +$dokka.location:no.acntech.easycontainers.util.lang/ValidationException/ValidationException/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html +$dokka.location:no.acntech.easycontainers.util.lang/ValidationException/ValidationException/#kotlin.String#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html +$dokka.location:no.acntech.easycontainers.util.lang/ValidationException/ValidationException/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html +$dokka.location:no.acntech.easycontainers.util.lang/ValidationException/ValidationException/#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validation-exception/-validation-exception.html +$dokka.location:no.acntech.easycontainers.util.lang/Validator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validator/index.html +$dokka.location:no.acntech.easycontainers.util.lang/Validator/validate/#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.lang/-validator/validate.html +$dokka.location:no.acntech.easycontainers.util.net////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.net/index.html +$dokka.location:no.acntech.easycontainers.util.net/NetworkUtils///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.net/-network-utils/index.html +$dokka.location:no.acntech.easycontainers.util.net/NetworkUtils/getLocalIpAddresses/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.net/-network-utils/get-local-ip-addresses.html +$dokka.location:no.acntech.easycontainers.util.net/NetworkUtils/isIp4Address/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-ip4-address.html +$dokka.location:no.acntech.easycontainers.util.net/NetworkUtils/isTcpPortOpen/#kotlin.String#kotlin.Int#kotlin.Int/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.net/-network-utils/is-tcp-port-open.html +$dokka.location:no.acntech.easycontainers.util.platform////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/index.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/index.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/convertToDockerPath/#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-to-docker-path.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/convertUnixPathToWindowsWslPath/#kotlin.String#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-unix-path-to-windows-wsl-path.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/convertWindowsPathToUnix/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/convertWindowsPathToUnixWslPath/#kotlin.String#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/convert-windows-path-to-unix-wsl-path.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/createDirectoryInWsl/#kotlin.String#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/create-directory-in-wsl.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/getDefaultWslDistro/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-default-wsl-distro.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/getWslDistroNames/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-distro-names.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/getWslIpAddress/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/get-wsl-ip-address.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/isDockerDesktopOnWindows/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-docker-desktop-on-windows.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/isLinux/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-linux.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/isMac/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-mac.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/isWindows/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-windows.html +$dokka.location:no.acntech.easycontainers.util.platform/PlatformUtils/isWslInstalled/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.platform/-platform-utils/is-wsl-installed.html +$dokka.location:no.acntech.easycontainers.util.text////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/index.html +$dokka.location:no.acntech.easycontainers.util.text//AMPERSAND/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-a-m-p-e-r-s-a-n-d.html +$dokka.location:no.acntech.easycontainers.util.text//ASTERISK/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-a-s-t-e-r-i-s-k.html +$dokka.location:no.acntech.easycontainers.util.text//AT_SIGN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-a-t_-s-i-g-n.html +$dokka.location:no.acntech.easycontainers.util.text//BACKTICK/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k-t-i-c-k.html +$dokka.location:no.acntech.easycontainers.util.text//BACK_SLASH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-b-a-c-k_-s-l-a-s-h.html +$dokka.location:no.acntech.easycontainers.util.text//CARET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-a-r-e-t.html +$dokka.location:no.acntech.easycontainers.util.text//COLON/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-o-l-o-n.html +$dokka.location:no.acntech.easycontainers.util.text//COMMA/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a.html +$dokka.location:no.acntech.easycontainers.util.text//COMMA_SPACE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-o-m-m-a_-s-p-a-c-e.html +$dokka.location:no.acntech.easycontainers.util.text//CR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-r.html +$dokka.location:no.acntech.easycontainers.util.text//CRLF/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-c-r-l-f.html +$dokka.location:no.acntech.easycontainers.util.text//DOLLAR_SIGN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-d-o-l-l-a-r_-s-i-g-n.html +$dokka.location:no.acntech.easycontainers.util.text//DOT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-d-o-t.html +$dokka.location:no.acntech.easycontainers.util.text//DOUBLE_QUOTE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-d-o-u-b-l-e_-q-u-o-t-e.html +$dokka.location:no.acntech.easycontainers.util.text//EMPTY_STRING/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-e-m-p-t-y_-s-t-r-i-n-g.html +$dokka.location:no.acntech.easycontainers.util.text//EQ/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-e-q.html +$dokka.location:no.acntech.easycontainers.util.text//EQUALS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-e-q-u-a-l-s.html +$dokka.location:no.acntech.easycontainers.util.text//EXCLAMATION_MARK/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-e-x-c-l-a-m-a-t-i-o-n_-m-a-r-k.html +$dokka.location:no.acntech.easycontainers.util.text//FORWARD_SLASH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-f-o-r-w-a-r-d_-s-l-a-s-h.html +$dokka.location:no.acntech.easycontainers.util.text//GT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-g-t.html +$dokka.location:no.acntech.easycontainers.util.text//GT_EQ/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-g-t_-e-q.html +$dokka.location:no.acntech.easycontainers.util.text//HASH/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-h-a-s-h.html +$dokka.location:no.acntech.easycontainers.util.text//HYPHEN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-h-y-p-h-e-n.html +$dokka.location:no.acntech.easycontainers.util.text//LEFT_CURLY_BRACKET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html +$dokka.location:no.acntech.easycontainers.util.text//LEFT_PAREN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-p-a-r-e-n.html +$dokka.location:no.acntech.easycontainers.util.text//LEFT_SQUARE_BRACKET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-e-f-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html +$dokka.location:no.acntech.easycontainers.util.text//LT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-t.html +$dokka.location:no.acntech.easycontainers.util.text//LT_EQ/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-t_-e-q.html +$dokka.location:no.acntech.easycontainers.util.text//LT_GT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-l-t_-g-t.html +$dokka.location:no.acntech.easycontainers.util.text//MINUS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-m-i-n-u-s.html +$dokka.location:no.acntech.easycontainers.util.text//NEW_LINE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-n-e-w_-l-i-n-e.html +$dokka.location:no.acntech.easycontainers.util.text//PERCENT_SIGN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-p-e-r-c-e-n-t_-s-i-g-n.html +$dokka.location:no.acntech.easycontainers.util.text//PIPE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-p-i-p-e.html +$dokka.location:no.acntech.easycontainers.util.text//PLUS/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-p-l-u-s.html +$dokka.location:no.acntech.easycontainers.util.text//QUESTION_MARK/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-q-u-e-s-t-i-o-n_-m-a-r-k.html +$dokka.location:no.acntech.easycontainers.util.text//RIGHT_CURLY_BRACKET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-c-u-r-l-y_-b-r-a-c-k-e-t.html +$dokka.location:no.acntech.easycontainers.util.text//RIGHT_PAREN/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-p-a-r-e-n.html +$dokka.location:no.acntech.easycontainers.util.text//RIGHT_SQUARE_BRACKET/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-r-i-g-h-t_-s-q-u-a-r-e_-b-r-a-c-k-e-t.html +$dokka.location:no.acntech.easycontainers.util.text//SEMICOLON/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-s-e-m-i-c-o-l-o-n.html +$dokka.location:no.acntech.easycontainers.util.text//SINGLE_QUOTE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-s-i-n-g-l-e_-q-u-o-t-e.html +$dokka.location:no.acntech.easycontainers.util.text//SPACE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-s-p-a-c-e.html +$dokka.location:no.acntech.easycontainers.util.text//TAB/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-t-a-b.html +$dokka.location:no.acntech.easycontainers.util.text//TILDE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-t-i-l-d-e.html +$dokka.location:no.acntech.easycontainers.util.text//UNDERSCORE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-u-n-d-e-r-s-c-o-r-e.html +$dokka.location:no.acntech.easycontainers.util.text//VERTICAL_BAR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-v-e-r-t-i-c-a-l_-b-a-r.html +$dokka.location:no.acntech.easycontainers.util.text//WHITESPACE_REGEX/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-w-h-i-t-e-s-p-a-c-e_-r-e-g-e-x.html +$dokka.location:no.acntech.easycontainers.util.text//splitOnWhites/kotlin.String#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/split-on-whites.html +$dokka.location:no.acntech.easycontainers.util.text//truncate/kotlin.String#kotlin.Int#kotlin.String#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/truncate.html +$dokka.location:no.acntech.easycontainers.util.text/LengthValidator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-length-validator/index.html +$dokka.location:no.acntech.easycontainers.util.text/LengthValidator/LengthValidator/#kotlin.Int?#kotlin.Int?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-length-validator/-length-validator.html +$dokka.location:no.acntech.easycontainers.util.text/LengthValidator/max/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-length-validator/max.html +$dokka.location:no.acntech.easycontainers.util.text/LengthValidator/min/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-length-validator/min.html +$dokka.location:no.acntech.easycontainers.util.text/LengthValidator/validate/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-length-validator/validate.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/index.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/RegexValidator/#kotlin.text.Regex/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/-regex-validator.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/equals/#kotlin.Any?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/equals.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/hashCode/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/hash-code.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/pattern/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/pattern.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/to-string.html +$dokka.location:no.acntech.easycontainers.util.text/RegexValidator/validate/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-regex-validator/validate.html +$dokka.location:no.acntech.easycontainers.util.text/StringValidator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-string-validator/index.html +$dokka.location:no.acntech.easycontainers.util.text/StringValidator/StringValidator/#kotlin.Int?#kotlin.Int?#no.acntech.easycontainers.util.lang.RangeValidator[kotlin.String]?#no.acntech.easycontainers.util.lang.Validator[kotlin.String]?#no.acntech.easycontainers.util.lang.Validator[kotlin.String]?#no.acntech.easycontainers.util.lang.Validator[kotlin.String]?/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-string-validator/-string-validator.html +$dokka.location:no.acntech.easycontainers.util.text/StringValidator/validate/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.text/-string-validator/validate.html +$dokka.location:no.acntech.easycontainers.util.time////PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/index.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator///PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/index.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator/WaitTimeCalculator/#kotlin.Long#java.util.concurrent.TimeUnit#kotlin.Long/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/-wait-time-calculator.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator/getRemainingTime/#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/get-remaining-time.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator/startTime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/start-time.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator/waitTimeUnit/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-unit.html +$dokka.location:no.acntech.easycontainers.util.time/WaitTimeCalculator/waitTimeValue/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers.util.time/-wait-time-calculator/wait-time-value.html +$dokka.location:no.acntech.easycontainers////PointingToDeclaration/easycontainers/no.acntech.easycontainers/index.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/index.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime.Companion/GENERAL_EXECUTOR_SERVICE/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-g-e-n-e-r-a-l_-e-x-e-c-u-t-o-r_-s-e-r-v-i-c-e.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime.Companion/SCHEDULER/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-companion/-s-c-h-e-d-u-l-e-r.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/index.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime/AbstractContainerRuntime/#no.acntech.easycontainers.GenericContainer/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/-abstract-container-runtime.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime/delete/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/delete.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime/getContainer/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/get-container.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime/start/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/start.html +$dokka.location:no.acntech.easycontainers/AbstractContainerRuntime/stop/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-abstract-container-runtime/stop.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/index.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/BaseContainerBuilder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/-base-container-builder.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/to-string.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withArgs/#no.acntech.easycontainers.model.Args/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-args.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withCommand/#no.acntech.easycontainers.model.Executable/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-command.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withContainerFile/#no.acntech.easycontainers.model.ContainerFile/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-file.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withContainerPlatformType/#no.acntech.easycontainers.model.ContainerPlatformType/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-container-platform-type.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withCpuLimit/#no.acntech.easycontainers.model.CPU/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-limit.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withCpuRequest/#no.acntech.easycontainers.model.CPU/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-cpu-request.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withCustomProperty/#kotlin.String#kotlin.Any/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-custom-property.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withEnv/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withEnv/#kotlin.collections.Map[no.acntech.easycontainers.model.EnvVarKey,no.acntech.easycontainers.model.EnvVarValue]/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withEnv/#no.acntech.easycontainers.model.EnvVarKey#no.acntech.easycontainers.model.EnvVarValue/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-env.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withExecutionMode/#no.acntech.easycontainers.model.ExecutionMode/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-execution-mode.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withExposedPort/#no.acntech.easycontainers.model.PortMappingName#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-exposed-port.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withImage/#no.acntech.easycontainers.model.ImageURL/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-image.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withIsEphemeral/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-is-ephemeral.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withLabel/#no.acntech.easycontainers.model.LabelKey#no.acntech.easycontainers.model.LabelValue/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-label.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withMaxLifeTime/#java.time.Duration/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-max-life-time.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withMaxLifeTime/#kotlin.Long#java.time.temporal.ChronoUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-max-life-time.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withMemoryLimit/#no.acntech.easycontainers.model.Memory/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-limit.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withMemoryRequest/#no.acntech.easycontainers.model.Memory/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-memory-request.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withName/#no.acntech.easycontainers.model.ContainerName/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-name.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withNamespace/#no.acntech.easycontainers.model.Namespace/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-namespace.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withNetworkName/#no.acntech.easycontainers.model.NetworkName/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-network-name.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withOutputLineCallback/#no.acntech.easycontainers.output.OutputLineCallback/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-output-line-callback.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withPortMapping/#no.acntech.easycontainers.model.NetworkPort#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-port-mapping.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withVolume/#no.acntech.easycontainers.model.Volume/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-volume.html +$dokka.location:no.acntech.easycontainers/BaseContainerBuilder/withVolume/#no.acntech.easycontainers.model.VolumeName#no.acntech.easycontainers.model.UnixDir/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-base-container-builder/with-volume.html +$dokka.location:no.acntech.easycontainers/ContainerBuilderCallback///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-builder-callback/index.html +$dokka.location:no.acntech.easycontainers/ContainerBuilderCallback/configure/#no.acntech.easycontainers.model.ContainerBuilder[*]/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-builder-callback/configure.html +$dokka.location:no.acntech.easycontainers/ContainerException///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-exception/index.html +$dokka.location:no.acntech.easycontainers/ContainerException/ContainerException/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html +$dokka.location:no.acntech.easycontainers/ContainerException/ContainerException/#kotlin.String#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html +$dokka.location:no.acntech.easycontainers/ContainerException/ContainerException/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html +$dokka.location:no.acntech.easycontainers/ContainerException/ContainerException/#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-container-exception/-container-exception.html +$dokka.location:no.acntech.easycontainers/Environment///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/index.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_K8S_GENERAL_DATA_HOST_DIR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_K8S_GENERAL_DATA_PVC_NAME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_K8S_KANIKO_DATA_HOST_DIR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_K8S_KANIKO_DATA_PVC_NAME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_REGISTRY_HOST/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-h-o-s-t.html +$dokka.location:no.acntech.easycontainers/Environment/DEFAULT_REGISTRY_PORT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-d-e-f-a-u-l-t_-r-e-g-i-s-t-r-y_-p-o-r-t.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_DOCKER_DAEMON_ENDPOINT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-d-o-c-k-e-r_-d-a-e-m-o-n_-e-n-d-p-o-i-n-t.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_INSECURE_REGISTRY/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-i-n-s-e-c-u-r-e_-r-e-g-i-s-t-r-y.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_K8S_GENERAL_DATA_HOST_DIR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-h-o-s-t_-d-i-r.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_K8S_GENERAL_DATA_PVC_NAME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-g-e-n-e-r-a-l_-d-a-t-a_-p-v-c_-n-a-m-e.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_K8S_KANIKO_DATA_HOST_DIR/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-h-o-s-t_-d-i-r.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_K8S_KANIKO_DATA_PVC_NAME/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-k8-s_-k-a-n-i-k-o_-d-a-t-a_-p-v-c_-n-a-m-e.html +$dokka.location:no.acntech.easycontainers/Environment/PROP_REGISTRY_ENDPOINT/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/-p-r-o-p_-r-e-g-i-s-t-r-y_-e-n-d-p-o-i-n-t.html +$dokka.location:no.acntech.easycontainers/Environment/defaultDockerDaemonEndpoint/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/default-docker-daemon-endpoint.html +$dokka.location:no.acntech.easycontainers/Environment/defaultRegistryCompleteURL/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/default-registry-complete-u-r-l.html +$dokka.location:no.acntech.easycontainers/Environment/defaultRegistryEndpoint/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/default-registry-endpoint.html +$dokka.location:no.acntech.easycontainers/Environment/k8sGeneralDataHostDir/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-host-dir.html +$dokka.location:no.acntech.easycontainers/Environment/k8sGeneralDataPvcName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/k8s-general-data-pvc-name.html +$dokka.location:no.acntech.easycontainers/Environment/k8sKanikoDataHostDir/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-host-dir.html +$dokka.location:no.acntech.easycontainers/Environment/k8sKanikoDataPvcName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-environment/k8s-kaniko-data-pvc-name.html +$dokka.location:no.acntech.easycontainers/GenericContainer.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-companion/index.html +$dokka.location:no.acntech.easycontainers/GenericContainer.Companion/builder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-companion/builder.html +$dokka.location:no.acntech.easycontainers/GenericContainer.GenericContainerBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/index.html +$dokka.location:no.acntech.easycontainers/GenericContainer.GenericContainerBuilder/GenericContainerBuilder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/-generic-container-builder.html +$dokka.location:no.acntech.easycontainers/GenericContainer.GenericContainerBuilder/build/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container-builder/build.html +$dokka.location:no.acntech.easycontainers/GenericContainer///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/index.html +$dokka.location:no.acntech.easycontainers/GenericContainer/GenericContainer/#no.acntech.easycontainers.GenericContainer.GenericContainerBuilder/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/-generic-container.html +$dokka.location:no.acntech.easycontainers/GenericContainer/execute/#no.acntech.easycontainers.model.Executable#no.acntech.easycontainers.model.Args?#kotlin.Boolean#no.acntech.easycontainers.model.UnixDir?#java.io.InputStream?#java.io.OutputStream#kotlin.Long?#java.util.concurrent.TimeUnit?/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/execute.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getArgs/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-args.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getCommand/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-command.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getDirectory/#no.acntech.easycontainers.model.UnixDir#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-directory.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getDuration/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-duration.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getEnv/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-env.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getExecutionMode/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-execution-mode.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getExitCode/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-exit-code.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getExposedPorts/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-exposed-ports.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getFile/#no.acntech.easycontainers.model.UnixDir#kotlin.String#java.nio.file.Path?/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-file.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getHost/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-host.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getImage/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-image.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getIpAddress/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-ip-address.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getLabels/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-labels.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getMappedPort/#no.acntech.easycontainers.model.NetworkPort/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-mapped-port.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getMaxLifeTime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-max-life-time.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-name.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getNamespace/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-namespace.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getNetworkName/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-network-name.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getOutputLineCallback/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-output-line-callback.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getPortMappings/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-port-mappings.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getRuntime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-runtime.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getState/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-state.html +$dokka.location:no.acntech.easycontainers/GenericContainer/getVolumes/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/get-volumes.html +$dokka.location:no.acntech.easycontainers/GenericContainer/isEphemeral/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/is-ephemeral.html +$dokka.location:no.acntech.easycontainers/GenericContainer/putDirectory/#java.nio.file.Path#no.acntech.easycontainers.model.UnixDir/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/put-directory.html +$dokka.location:no.acntech.easycontainers/GenericContainer/putFile/#java.nio.file.Path#no.acntech.easycontainers.model.UnixDir#kotlin.String?/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/put-file.html +$dokka.location:no.acntech.easycontainers/GenericContainer/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/to-string.html +$dokka.location:no.acntech.easycontainers/GenericContainer/waitForCompletion/#kotlin.Long#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-completion.html +$dokka.location:no.acntech.easycontainers/GenericContainer/waitForState/#no.acntech.easycontainers.model.Container.State#kotlin.Long#java.util.concurrent.TimeUnit/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-generic-container/wait-for-state.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.Companion///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-companion/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.Companion/of/#no.acntech.easycontainers.model.ContainerPlatformType/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-companion/of.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State.COMPLETED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers/-image-builder/-state/-c-o-m-p-l-e-t-e-d/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State.FAILED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers/-image-builder/-state/-f-a-i-l-e-d/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State.INITIALIZED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n-i-t-i-a-l-i-z-e-d/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State.IN_PROGRESS///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers/-image-builder/-state/-i-n_-p-r-o-g-r-e-s-s/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State.UNKNOWN///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}easycontainers/no.acntech.easycontainers/-image-builder/-state/-u-n-k-n-o-w-n/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-state/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State/entries/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-state/entries.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State/valueOf/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-state/value-of.html +$dokka.location:no.acntech.easycontainers/ImageBuilder.State/values/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-state/values.html +$dokka.location:no.acntech.easycontainers/ImageBuilder///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/index.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/ImageBuilder/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/-image-builder.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/buildImage/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/build-image.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/getFinishTime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/get-finish-time.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/getStartTime/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/get-start-time.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/getState/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/get-state.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/toString/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/to-string.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withCustomProperty/#kotlin.String#kotlin.Any/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-custom-property.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withDockerContextDir/#java.nio.file.Path/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-docker-context-dir.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withDockerContextDir/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-docker-context-dir.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withImageRegistry/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-image-registry.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withImageRegistry/#no.acntech.easycontainers.model.RegistryURL/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-image-registry.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withInsecureRegistry/#kotlin.Boolean/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-insecure-registry.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withLabel/#kotlin.String#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-label.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withLabel/#no.acntech.easycontainers.model.LabelKey#no.acntech.easycontainers.model.LabelValue/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-label.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withLabels/#kotlin.collections.Map[kotlin.String,kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-labels.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withName/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-name.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withName/#no.acntech.easycontainers.model.ImageName/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-name.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withNamespace/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-namespace.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withNamespace/#no.acntech.easycontainers.model.Namespace/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-namespace.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withOutputLineCallback/#no.acntech.easycontainers.output.OutputLineCallback/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-output-line-callback.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withRepository/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-repository.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withRepository/#no.acntech.easycontainers.model.RepositoryName/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-repository.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withTag/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-tag.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withTag/#no.acntech.easycontainers.model.ImageTag/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-tag.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withTags/#kotlin.collections.Set[kotlin.String]/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-tags.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withVerbosity/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-verbosity.html +$dokka.location:no.acntech.easycontainers/ImageBuilder/withVerbosity/#no.acntech.easycontainers.model.Verbosity/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-image-builder/with-verbosity.html +$dokka.location:no.acntech.easycontainers/PermissionException///PointingToDeclaration/easycontainers/no.acntech.easycontainers/-permission-exception/index.html +$dokka.location:no.acntech.easycontainers/PermissionException/PermissionException/#/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html +$dokka.location:no.acntech.easycontainers/PermissionException/PermissionException/#kotlin.String#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html +$dokka.location:no.acntech.easycontainers/PermissionException/PermissionException/#kotlin.String/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html +$dokka.location:no.acntech.easycontainers/PermissionException/PermissionException/#kotlin.Throwable/PointingToDeclaration/easycontainers/no.acntech.easycontainers/-permission-exception/-permission-exception.html +no.acntech.easycontainers +no.acntech.easycontainers.custom +no.acntech.easycontainers.docker +no.acntech.easycontainers.kubernetes +no.acntech.easycontainers.model +no.acntech.easycontainers.model.base +no.acntech.easycontainers.output +no.acntech.easycontainers.util.collections +no.acntech.easycontainers.util.io +no.acntech.easycontainers.util.lang +no.acntech.easycontainers.util.net +no.acntech.easycontainers.util.platform +no.acntech.easycontainers.util.text +no.acntech.easycontainers.util.time + diff --git a/apidocs/kdoc/images/anchor-copy-button.svg b/apidocs/kdoc/images/anchor-copy-button.svg new file mode 100644 index 00000000..19c1fa3f --- /dev/null +++ b/apidocs/kdoc/images/anchor-copy-button.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/apidocs/kdoc/images/arrow_down.svg b/apidocs/kdoc/images/arrow_down.svg new file mode 100644 index 00000000..639aaf12 --- /dev/null +++ b/apidocs/kdoc/images/arrow_down.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/apidocs/kdoc/images/burger.svg b/apidocs/kdoc/images/burger.svg new file mode 100644 index 00000000..fcca732b --- /dev/null +++ b/apidocs/kdoc/images/burger.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/apidocs/kdoc/images/copy-icon.svg b/apidocs/kdoc/images/copy-icon.svg new file mode 100644 index 00000000..2cb02ec6 --- /dev/null +++ b/apidocs/kdoc/images/copy-icon.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/apidocs/kdoc/images/copy-successful-icon.svg b/apidocs/kdoc/images/copy-successful-icon.svg new file mode 100644 index 00000000..c4b95383 --- /dev/null +++ b/apidocs/kdoc/images/copy-successful-icon.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/apidocs/kdoc/images/footer-go-to-link.svg b/apidocs/kdoc/images/footer-go-to-link.svg new file mode 100644 index 00000000..a87add7a --- /dev/null +++ b/apidocs/kdoc/images/footer-go-to-link.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/apidocs/kdoc/images/go-to-top-icon.svg b/apidocs/kdoc/images/go-to-top-icon.svg new file mode 100644 index 00000000..abc3d1ce --- /dev/null +++ b/apidocs/kdoc/images/go-to-top-icon.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/apidocs/kdoc/images/homepage.svg b/apidocs/kdoc/images/homepage.svg new file mode 100644 index 00000000..e3c83b1c --- /dev/null +++ b/apidocs/kdoc/images/homepage.svg @@ -0,0 +1,3 @@ + + + diff --git a/apidocs/kdoc/images/logo-icon.svg b/apidocs/kdoc/images/logo-icon.svg new file mode 100644 index 00000000..e42f9570 --- /dev/null +++ b/apidocs/kdoc/images/logo-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/abstract-class-kotlin.svg b/apidocs/kdoc/images/nav-icons/abstract-class-kotlin.svg new file mode 100644 index 00000000..19d6148c --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/abstract-class-kotlin.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/abstract-class.svg b/apidocs/kdoc/images/nav-icons/abstract-class.svg new file mode 100644 index 00000000..60182030 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/abstract-class.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/annotation-kotlin.svg b/apidocs/kdoc/images/nav-icons/annotation-kotlin.svg new file mode 100644 index 00000000..b90f508c --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/annotation-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/annotation.svg b/apidocs/kdoc/images/nav-icons/annotation.svg new file mode 100644 index 00000000..b80c54b4 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/annotation.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/class-kotlin.svg b/apidocs/kdoc/images/nav-icons/class-kotlin.svg new file mode 100644 index 00000000..797a2423 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/class-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/class.svg b/apidocs/kdoc/images/nav-icons/class.svg new file mode 100644 index 00000000..3f1ad167 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/class.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/enum-kotlin.svg b/apidocs/kdoc/images/nav-icons/enum-kotlin.svg new file mode 100644 index 00000000..775a7cc9 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/enum-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/enum.svg b/apidocs/kdoc/images/nav-icons/enum.svg new file mode 100644 index 00000000..fa7f2476 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/enum.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/exception-class.svg b/apidocs/kdoc/images/nav-icons/exception-class.svg new file mode 100644 index 00000000..c0b2bdeb --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/exception-class.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/field-value.svg b/apidocs/kdoc/images/nav-icons/field-value.svg new file mode 100644 index 00000000..2771ee56 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/field-value.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/field-variable.svg b/apidocs/kdoc/images/nav-icons/field-variable.svg new file mode 100644 index 00000000..e2d2bbd0 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/field-variable.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/function.svg b/apidocs/kdoc/images/nav-icons/function.svg new file mode 100644 index 00000000..f0da64a0 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/function.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/interface-kotlin.svg b/apidocs/kdoc/images/nav-icons/interface-kotlin.svg new file mode 100644 index 00000000..5e163260 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/interface-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/interface.svg b/apidocs/kdoc/images/nav-icons/interface.svg new file mode 100644 index 00000000..32063ba2 --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/interface.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/object.svg b/apidocs/kdoc/images/nav-icons/object.svg new file mode 100644 index 00000000..31f0ee3e --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/object.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/nav-icons/typealias-kotlin.svg b/apidocs/kdoc/images/nav-icons/typealias-kotlin.svg new file mode 100644 index 00000000..f4bb238b --- /dev/null +++ b/apidocs/kdoc/images/nav-icons/typealias-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/apidocs/kdoc/images/theme-toggle.svg b/apidocs/kdoc/images/theme-toggle.svg new file mode 100644 index 00000000..df86202b --- /dev/null +++ b/apidocs/kdoc/images/theme-toggle.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/apidocs/kdoc/index.html b/apidocs/kdoc/index.html new file mode 100644 index 00000000..fd4234ba --- /dev/null +++ b/apidocs/kdoc/index.html @@ -0,0 +1,333 @@ + + + + + easycontainers + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +

    easycontainers

    +
    +

    Packages

    +
    +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    Link copied to clipboard
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + diff --git a/apidocs/kdoc/navigation.html b/apidocs/kdoc/navigation.html new file mode 100644 index 00000000..d8153dd1 --- /dev/null +++ b/apidocs/kdoc/navigation.html @@ -0,0 +1,658 @@ +
    + + + + + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + + + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + + + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + + + + + + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + + + + + + + +
    + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    +
    + +
    + + +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + + + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + + + + + +
    + +
    + +
    + +
    + + +
    + +
    +
    + +
    + + + + +
    + +
    + diff --git a/apidocs/kdoc/scripts/clipboard.js b/apidocs/kdoc/scripts/clipboard.js new file mode 100644 index 00000000..7a4f33c5 --- /dev/null +++ b/apidocs/kdoc/scripts/clipboard.js @@ -0,0 +1,56 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +window.addEventListener('load', () => { + document.querySelectorAll('span.copy-icon').forEach(element => { + element.addEventListener('click', (el) => copyElementsContentToClipboard(element)); + }) + + document.querySelectorAll('span.anchor-icon').forEach(element => { + element.addEventListener('click', (el) => { + if(element.hasAttribute('pointing-to')){ + const location = hrefWithoutCurrentlyUsedAnchor() + '#' + element.getAttribute('pointing-to') + copyTextToClipboard(element, location) + } + }); + }) +}) + +const copyElementsContentToClipboard = (element) => { + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(element.parentNode.parentNode); + selection.removeAllRanges(); + selection.addRange(range); + + copyAndShowPopup(element, () => selection.removeAllRanges()) +} + +const copyTextToClipboard = (element, text) => { + var textarea = document.createElement("textarea"); + textarea.textContent = text; + textarea.style.position = "fixed"; + document.body.appendChild(textarea); + textarea.select(); + + copyAndShowPopup(element, () => document.body.removeChild(textarea)) +} + +const copyAndShowPopup = (element, after) => { + try { + document.execCommand('copy'); + element.nextElementSibling.classList.add('active-popup'); + setTimeout(() => { + element.nextElementSibling.classList.remove('active-popup'); + }, 1200); + } catch (e) { + console.error('Failed to write to clipboard:', e) + } + finally { + if(after) after() + } +} + +const hrefWithoutCurrentlyUsedAnchor = () => window.location.href.split('#')[0] + diff --git a/apidocs/kdoc/scripts/main.js b/apidocs/kdoc/scripts/main.js new file mode 100644 index 00000000..ba6c3473 --- /dev/null +++ b/apidocs/kdoc/scripts/main.js @@ -0,0 +1,44 @@ +(()=>{var e={8527:e=>{e.exports=''},5570:e=>{e.exports=''},107:e=>{e.exports=''},7224:e=>{e.exports=''},538:e=>{e.exports=''},1924:(e,n,t)=>{"use strict";var r=t(210),o=t(5559),i=o(r("String.prototype.indexOf"));e.exports=function(e,n){var t=r(e,!!n);return"function"==typeof t&&i(e,".prototype.")>-1?o(t):t}},5559:(e,n,t)=>{"use strict";var r=t(8612),o=t(210),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),l=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),s=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var n=l(r,a,arguments);if(c&&u){var t=c(n,"length");t.configurable&&u(n,"length",{value:1+s(0,e.length-(arguments.length-1))})}return n};var f=function(){return l(r,i,arguments)};u?u(e.exports,"apply",{value:f}):e.exports.apply=f},4184:(e,n)=>{var t; +/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],n=0;n{"use strict";e.exports=function(e,n){var t=this,r=t.constructor;return t.options=Object.assign({storeInstancesGlobally:!0},n||{}),t.callbacks={},t.directMap={},t.sequenceLevels={},t.resetTimer=null,t.ignoreNextKeyup=!1,t.ignoreNextKeypress=!1,t.nextExpectedAction=!1,t.element=e,t.addEvents(),t.options.storeInstancesGlobally&&r.instances.push(t),t},e.exports.prototype.bind=t(2207),e.exports.prototype.bindMultiple=t(3396),e.exports.prototype.unbind=t(9208),e.exports.prototype.trigger=t(9855),e.exports.prototype.reset=t(6214),e.exports.prototype.stopCallback=t(3450),e.exports.prototype.handleKey=t(3067),e.exports.prototype.addEvents=t(718),e.exports.prototype.bindSingle=t(8763),e.exports.prototype.getKeyInfo=t(5825),e.exports.prototype.pickBestAction=t(8608),e.exports.prototype.getReverseMap=t(3956),e.exports.prototype.getMatches=t(3373),e.exports.prototype.resetSequences=t(3346),e.exports.prototype.fireCallback=t(2684),e.exports.prototype.bindSequence=t(7103),e.exports.prototype.resetSequenceTimer=t(7309),e.exports.prototype.detach=t(7554),e.exports.instances=[],e.exports.reset=t(1822),e.exports.REVERSE_MAP=null},718:(e,n,t)=>{"use strict";e.exports=function(){var e=this,n=t(4323),r=e.element;e.eventHandler=t(9646).bind(e),n(r,"keypress",e.eventHandler),n(r,"keydown",e.eventHandler),n(r,"keyup",e.eventHandler)}},2207:e=>{"use strict";e.exports=function(e,n,t){return e=e instanceof Array?e:[e],this.bindMultiple(e,n,t),this}},3396:e=>{"use strict";e.exports=function(e,n,t){for(var r=0;r{"use strict";e.exports=function(e,n,r,o){var i=this;function a(n){return function(){i.nextExpectedAction=n,++i.sequenceLevels[e],i.resetSequenceTimer()}}function l(n){var a;i.fireCallback(r,n,e),"keyup"!==o&&(a=t(6770),i.ignoreNextKeyup=a(n)),setTimeout((function(){i.resetSequences()}),10)}i.sequenceLevels[e]=0;for(var c=0;c{"use strict";e.exports=function(e,n,t,r,o){var i=this;i.directMap[e+":"+t]=n;var a,l=(e=e.replace(/\s+/g," ")).split(" ");l.length>1?i.bindSequence(e,l,n,t):(a=i.getKeyInfo(e,t),i.callbacks[a.key]=i.callbacks[a.key]||[],i.getMatches(a.key,a.modifiers,{type:a.action},r,e,o),i.callbacks[a.key][r?"unshift":"push"]({callback:n,modifiers:a.modifiers,action:a.action,seq:r,level:o,combo:e}))}},7554:(e,n,t)=>{var r=t(4323).off;e.exports=function(){var e=this,n=e.element;r(n,"keypress",e.eventHandler),r(n,"keydown",e.eventHandler),r(n,"keyup",e.eventHandler)}},4323:e=>{function n(e,n,t,r){return!e.addEventListener&&(n="on"+n),(e.addEventListener||e.attachEvent).call(e,n,t,r),t}e.exports=n,e.exports.on=n,e.exports.off=function(e,n,t,r){return!e.removeEventListener&&(n="on"+n),(e.removeEventListener||e.detachEvent).call(e,n,t,r),t}},2684:(e,n,t)=>{"use strict";e.exports=function(e,n,r,o){this.stopCallback(n,n.target||n.srcElement,r,o)||!1===e(n,r)&&(t(1350)(n),t(6103)(n))}},5825:(e,n,t)=>{"use strict";e.exports=function(e,n){var r,o,i,a,l,c,u=[];for(r=t(4520)(e),a=t(7549),l=t(5355),c=t(8581),i=0;i{"use strict";e.exports=function(e,n,r,o,i,a){var l,c,u,s,f=this,p=[],d=r.type;"keypress"!==d||r.code&&"Arrow"===r.code.slice(0,5)||(f.callbacks["any-character"]||[]).forEach((function(e){p.push(e)}));if(!f.callbacks[e])return p;for(u=t(8581),"keyup"===d&&u(e)&&(n=[e]),l=0;l{"use strict";e.exports=function(){var e,n=this.constructor;if(!n.REVERSE_MAP)for(var r in n.REVERSE_MAP={},e=t(4766))r>95&&r<112||e.hasOwnProperty(r)&&(n.REVERSE_MAP[e[r]]=r);return n.REVERSE_MAP}},3067:(e,n,t)=>{"use strict";e.exports=function(e,n,r){var o,i,a,l,c=this,u={},s=0,f=!1;for(o=c.getMatches(e,n,r),i=0;i{"use strict";e.exports=function(e){var n,r=this;"number"!=typeof e.which&&(e.which=e.keyCode);var o=t(6770)(e);void 0!==o&&("keyup"!==e.type||r.ignoreNextKeyup!==o?(n=t(4610),r.handleKey(o,n(e),e)):r.ignoreNextKeyup=!1)}},5532:e=>{"use strict";e.exports=function(e,n){return e.sort().join(",")===n.sort().join(",")}},8608:e=>{"use strict";e.exports=function(e,n,t){return t||(t=this.getReverseMap()[e]?"keydown":"keypress"),"keypress"===t&&n.length&&(t="keydown"),t}},6214:e=>{"use strict";e.exports=function(){return this.callbacks={},this.directMap={},this}},7309:e=>{"use strict";e.exports=function(){var e=this;clearTimeout(e.resetTimer),e.resetTimer=setTimeout((function(){e.resetSequences()}),1e3)}},3346:e=>{"use strict";e.exports=function(e){var n=this;e=e||{};var t,r=!1;for(t in n.sequenceLevels)e[t]?r=!0:n.sequenceLevels[t]=0;r||(n.nextExpectedAction=!1)}},3450:e=>{"use strict";e.exports=function(e,n){if((" "+n.className+" ").indexOf(" combokeys ")>-1)return!1;var t=n.tagName.toLowerCase();return"input"===t||"select"===t||"textarea"===t||n.isContentEditable}},9855:e=>{"use strict";e.exports=function(e,n){return this.directMap[e+":"+n]&&this.directMap[e+":"+n]({},e),this}},9208:e=>{"use strict";e.exports=function(e,n){return this.bind(e,(function(){}),n)}},1822:e=>{"use strict";e.exports=function(){this.instances.forEach((function(e){e.reset()}))}},6770:(e,n,t)=>{"use strict";e.exports=function(e){var n,r;if(n=t(4766),r=t(5295),"keypress"===e.type){var o=String.fromCharCode(e.which);return e.shiftKey||(o=o.toLowerCase()),o}return void 0!==n[e.which]?n[e.which]:void 0!==r[e.which]?r[e.which]:String.fromCharCode(e.which).toLowerCase()}},4610:e=>{"use strict";e.exports=function(e){var n=[];return e.shiftKey&&n.push("shift"),e.altKey&&n.push("alt"),e.ctrlKey&&n.push("ctrl"),e.metaKey&&n.push("meta"),n}},8581:e=>{"use strict";e.exports=function(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}},4520:e=>{"use strict";e.exports=function(e){return"+"===e?["+"]:e.split("+")}},1350:e=>{"use strict";e.exports=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},5355:e=>{"use strict";e.exports={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"}},7549:e=>{"use strict";e.exports={option:"alt",command:"meta",return:"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"}},5295:e=>{"use strict";e.exports={106:"*",107:"plus",109:"minus",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}},4766:e=>{"use strict";e.exports={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",173:"minus",187:"plus",189:"minus",224:"meta"};for(var n=1;n<20;++n)e.exports[111+n]="f"+n;for(n=0;n<=9;++n)e.exports[n+96]=n},6103:e=>{"use strict";e.exports=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}},3362:()=>{var e;!function(){var e=Math.PI,n=2*e,t=e/180,r=document.createElement("div");document.head.appendChild(r);var o=self.ConicGradient=function(e){o.all.push(this),e=e||{},this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.repeating=!!e.repeating,this.size=e.size||Math.max(innerWidth,innerHeight),this.canvas.width=this.canvas.height=this.size;var n=e.stops;this.stops=(n||"").split(/\s*,(?![^(]*\))\s*/),this.from=0;for(var t=0;t0){var i=this.stops[0].clone();i.pos=0,this.stops.unshift(i)}if(void 0===this.stops[this.stops.length-1].pos)this.stops[this.stops.length-1].pos=1;else if(!this.repeating&&this.stops[this.stops.length-1].pos<1){var a=this.stops[this.stops.length-1].clone();a.pos=1,this.stops.push(a)}if(this.stops.forEach((function(e,n){if(void 0===e.pos){for(var t=n+1;this[t];t++)if(void 0!==this[t].pos){e.pos=this[n-1].pos+(this[t].pos-this[n-1].pos)/(t-n+1);break}}else n>0&&(e.pos=Math.max(e.pos,this[n-1].pos))}),this.stops),this.repeating){var l=(n=this.stops.slice())[n.length-1].pos-n[0].pos;for(t=0;this.stops[this.stops.length-1].pos<1&&t<1e4;t++)for(var c=0;c'},get png(){return this.canvas.toDataURL()},get r(){return Math.sqrt(2)*this.size/2},paint:function(){var e,n,r,o=this.context,i=this.r,a=this.size/2,l=0,c=this.stops[l];o.translate(this.size/2,this.size/2),o.rotate(-90*t),o.rotate(this.from*t),o.translate(-this.size/2,-this.size/2);for(var u=0;u<360;){if(u/360+1e-5>=c.pos){do{e=c,l++,c=this.stops[l]}while(c&&c!=e&&c.pos===e.pos);if(!c)break;var s=e.color+""==c.color+""&&e!=c;n=e.color.map((function(e,n){return c.color[n]-e}))}r=(u/360-e.pos)/(c.pos-e.pos);var f=s?c.color:n.map((function(n,t){var o=n*r+e.color[t];return t<3?255&o:o}));if(o.fillStyle="rgba("+f.join(",")+")",o.beginPath(),o.moveTo(a,a),s)var p=360*(c.pos-e.pos);else p=.5;var d=u*t,h=(d=Math.min(360*t,d))+p*t;h=Math.min(360*t,h+.02),o.arc(a,a,i,d,h),o.closePath(),o.fill(),u+=p}}},o.ColorStop=function(e,t){if(this.gradient=e,t){var r=t.match(/^(.+?)(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?\s*$/);if(this.color=o.ColorStop.colorToRGBA(r[1]),r[2]){var i=r[3];"%"==i||"0"===r[2]&&!i?this.pos=r[2]/100:"turn"==i?this.pos=+r[2]:"deg"==i?this.pos=r[2]/360:"grad"==i?this.pos=r[2]/400:"rad"==i&&(this.pos=r[2]/n)}r[4]&&(this.next=new o.ColorStop(e,r[1]+" "+r[4]+r[5]))}},o.ColorStop.prototype={clone:function(){var e=new o.ColorStop(this.gradient);return e.color=this.color,e.pos=this.pos,e},toString:function(){return"rgba("+this.color.join(", ")+") "+100*this.pos+"%"}},o.ColorStop.colorToRGBA=function(e){if(!Array.isArray(e)&&-1==e.indexOf("from")){r.style.color=e;var n=getComputedStyle(r).color.match(/rgba?\(([\d.]+), ([\d.]+), ([\d.]+)(?:, ([\d.]+))?\)/);return n&&(n.shift(),(n=n.map((function(e){return+e})))[3]=isNaN(n[3])?1:n[3]),n||[0,0,0,0]}return e}}(),self.StyleFix&&((e=document.createElement("p")).style.backgroundImage="conic-gradient(white, black)",e.style.backgroundImage=PrefixFree.prefix+"conic-gradient(white, black)",e.style.backgroundImage||StyleFix.register((function(e,n){return e.indexOf("conic-gradient")>-1&&(e=e.replace(/(?:repeating-)?conic-gradient\(\s*((?:\([^()]+\)|[^;()}])+?)\)/g,(function(e,n){return new ConicGradient({stops:n,repeating:e.indexOf("repeating-")>-1})}))),e})))},9662:(e,n,t)=>{var r=t(7854),o=t(614),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a function")}},9483:(e,n,t)=>{var r=t(7854),o=t(4411),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a constructor")}},6077:(e,n,t)=>{var r=t(7854),o=t(614),i=r.String,a=r.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+i(e)+" as a prototype")}},1223:(e,n,t)=>{var r=t(5112),o=t(30),i=t(3070),a=r("unscopables"),l=Array.prototype;null==l[a]&&i.f(l,a,{configurable:!0,value:o(null)}),e.exports=function(e){l[a][e]=!0}},1530:(e,n,t)=>{"use strict";var r=t(8710).charAt;e.exports=function(e,n,t){return n+(t?r(e,n).length:1)}},5787:(e,n,t)=>{var r=t(7854),o=t(7976),i=r.TypeError;e.exports=function(e,n){if(o(n,e))return e;throw i("Incorrect invocation")}},9670:(e,n,t)=>{var r=t(7854),o=t(111),i=r.String,a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not an object")}},7556:(e,n,t)=>{var r=t(7293);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},8533:(e,n,t)=>{"use strict";var r=t(2092).forEach,o=t(9341)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:(e,n,t)=>{"use strict";var r=t(7854),o=t(9974),i=t(6916),a=t(7908),l=t(3411),c=t(7659),u=t(4411),s=t(6244),f=t(6135),p=t(8554),d=t(1246),h=r.Array;e.exports=function(e){var n=a(e),t=u(this),r=arguments.length,g=r>1?arguments[1]:void 0,v=void 0!==g;v&&(g=o(g,r>2?arguments[2]:void 0));var A,b,m,y,E,_,C=d(n),w=0;if(!C||this==h&&c(C))for(A=s(n),b=t?new this(A):h(A);A>w;w++)_=v?g(n[w],w):n[w],f(b,w,_);else for(E=(y=p(n,C)).next,b=t?new this:[];!(m=i(E,y)).done;w++)_=v?l(y,g,[m.value,w],!0):m.value,f(b,w,_);return b.length=w,b}},1318:(e,n,t)=>{var r=t(5656),o=t(1400),i=t(6244),a=function(e){return function(n,t,a){var l,c=r(n),u=i(c),s=o(a,u);if(e&&t!=t){for(;u>s;)if((l=c[s++])!=l)return!0}else for(;u>s;s++)if((e||s in c)&&c[s]===t)return e||s||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:(e,n,t)=>{var r=t(9974),o=t(1702),i=t(8361),a=t(7908),l=t(6244),c=t(5417),u=o([].push),s=function(e){var n=1==e,t=2==e,o=3==e,s=4==e,f=6==e,p=7==e,d=5==e||f;return function(h,g,v,A){for(var b,m,y=a(h),E=i(y),_=r(g,v),C=l(E),w=0,x=A||c,k=n?x(h,C):t||p?x(h,0):void 0;C>w;w++)if((d||w in E)&&(m=_(b=E[w],w,y),e))if(n)k[w]=m;else if(m)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:u(k,b)}else switch(e){case 4:return!1;case 7:u(k,b)}return f?-1:o||s?s:k}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},1194:(e,n,t)=>{var r=t(7293),o=t(5112),i=t(7392),a=o("species");e.exports=function(e){return i>=51||!r((function(){var n=[];return(n.constructor={})[a]=function(){return{foo:1}},1!==n[e](Boolean).foo}))}},9341:(e,n,t)=>{"use strict";var r=t(7293);e.exports=function(e,n){var t=[][e];return!!t&&r((function(){t.call(null,n||function(){throw 1},1)}))}},3671:(e,n,t)=>{var r=t(7854),o=t(9662),i=t(7908),a=t(8361),l=t(6244),c=r.TypeError,u=function(e){return function(n,t,r,u){o(t);var s=i(n),f=a(s),p=l(s),d=e?p-1:0,h=e?-1:1;if(r<2)for(;;){if(d in f){u=f[d],d+=h;break}if(d+=h,e?d<0:p<=d)throw c("Reduce of empty array with no initial value")}for(;e?d>=0:p>d;d+=h)d in f&&(u=t(u,f[d],d,s));return u}};e.exports={left:u(!1),right:u(!0)}},206:(e,n,t)=>{var r=t(1702);e.exports=r([].slice)},4362:(e,n,t)=>{var r=t(206),o=Math.floor,i=function(e,n){var t=e.length,c=o(t/2);return t<8?a(e,n):l(e,i(r(e,0,c),n),i(r(e,c),n),n)},a=function(e,n){for(var t,r,o=e.length,i=1;i0;)e[r]=e[--r];r!==i++&&(e[r]=t)}return e},l=function(e,n,t,r){for(var o=n.length,i=t.length,a=0,l=0;a{var r=t(7854),o=t(3157),i=t(4411),a=t(111),l=t(5112)("species"),c=r.Array;e.exports=function(e){var n;return o(e)&&(n=e.constructor,(i(n)&&(n===c||o(n.prototype))||a(n)&&null===(n=n[l]))&&(n=void 0)),void 0===n?c:n}},5417:(e,n,t)=>{var r=t(7475);e.exports=function(e,n){return new(r(e))(0===n?0:n)}},3411:(e,n,t)=>{var r=t(9670),o=t(9212);e.exports=function(e,n,t,i){try{return i?n(r(t)[0],t[1]):n(t)}catch(n){o(e,"throw",n)}}},7072:(e,n,t)=>{var r=t(5112)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,n){if(!n&&!o)return!1;var t=!1;try{var i={};i[r]=function(){return{next:function(){return{done:t=!0}}}},e(i)}catch(e){}return t}},4326:(e,n,t)=>{var r=t(1702),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},648:(e,n,t)=>{var r=t(7854),o=t(1694),i=t(614),a=t(4326),l=t(5112)("toStringTag"),c=r.Object,u="Arguments"==a(function(){return arguments}());e.exports=o?a:function(e){var n,t,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(t=function(e,n){try{return e[n]}catch(e){}}(n=c(e),l))?t:u?a(n):"Object"==(r=a(n))&&i(n.callee)?"Arguments":r}},5631:(e,n,t)=>{"use strict";var r=t(3070).f,o=t(30),i=t(2248),a=t(9974),l=t(5787),c=t(408),u=t(654),s=t(6340),f=t(9781),p=t(2423).fastKey,d=t(9909),h=d.set,g=d.getterFor;e.exports={getConstructor:function(e,n,t,u){var s=e((function(e,r){l(e,d),h(e,{type:n,index:o(null),first:void 0,last:void 0,size:0}),f||(e.size=0),null!=r&&c(r,e[u],{that:e,AS_ENTRIES:t})})),d=s.prototype,v=g(n),A=function(e,n,t){var r,o,i=v(e),a=b(e,n);return a?a.value=t:(i.last=a={index:o=p(n,!0),key:n,value:t,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},b=function(e,n){var t,r=v(e),o=p(n);if("F"!==o)return r.index[o];for(t=r.first;t;t=t.next)if(t.key==n)return t};return i(d,{clear:function(){for(var e=v(this),n=e.index,t=e.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=void 0),delete n[t.index],t=t.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var n=this,t=v(n),r=b(n,e);if(r){var o=r.next,i=r.previous;delete t.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),t.first==r&&(t.first=o),t.last==r&&(t.last=i),f?t.size--:n.size--}return!!r},forEach:function(e){for(var n,t=v(this),r=a(e,arguments.length>1?arguments[1]:void 0);n=n?n.next:t.first;)for(r(n.value,n.key,this);n&&n.removed;)n=n.previous},has:function(e){return!!b(this,e)}}),i(d,t?{get:function(e){var n=b(this,e);return n&&n.value},set:function(e,n){return A(this,0===e?0:e,n)}}:{add:function(e){return A(this,e=0===e?0:e,e)}}),f&&r(d,"size",{get:function(){return v(this).size}}),s},setStrong:function(e,n,t){var r=n+" Iterator",o=g(n),i=g(r);u(e,n,(function(e,n){h(this,{type:r,target:e,state:o(e),kind:n,last:void 0})}),(function(){for(var e=i(this),n=e.kind,t=e.last;t&&t.removed;)t=t.previous;return e.target&&(e.last=t=t?t.next:e.state.first)?"keys"==n?{value:t.key,done:!1}:"values"==n?{value:t.value,done:!1}:{value:[t.key,t.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),t?"entries":"values",!t,!0),s(n)}}},9320:(e,n,t)=>{"use strict";var r=t(1702),o=t(2248),i=t(2423).getWeakData,a=t(9670),l=t(111),c=t(5787),u=t(408),s=t(2092),f=t(2597),p=t(9909),d=p.set,h=p.getterFor,g=s.find,v=s.findIndex,A=r([].splice),b=0,m=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},E=function(e,n){return g(e.entries,(function(e){return e[0]===n}))};y.prototype={get:function(e){var n=E(this,e);if(n)return n[1]},has:function(e){return!!E(this,e)},set:function(e,n){var t=E(this,e);t?t[1]=n:this.entries.push([e,n])},delete:function(e){var n=v(this.entries,(function(n){return n[0]===e}));return~n&&A(this.entries,n,1),!!~n}},e.exports={getConstructor:function(e,n,t,r){var s=e((function(e,o){c(e,p),d(e,{type:n,id:b++,frozen:void 0}),null!=o&&u(o,e[r],{that:e,AS_ENTRIES:t})})),p=s.prototype,g=h(n),v=function(e,n,t){var r=g(e),o=i(a(n),!0);return!0===o?m(r).set(n,t):o[r.id]=t,e};return o(p,{delete:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).delete(e):t&&f(t,n.id)&&delete t[n.id]},has:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).has(e):t&&f(t,n.id)}}),o(p,t?{get:function(e){var n=g(this);if(l(e)){var t=i(e);return!0===t?m(n).get(e):t?t[n.id]:void 0}},set:function(e,n){return v(this,e,n)}}:{add:function(e){return v(this,e,!0)}}),s}}},7710:(e,n,t)=>{"use strict";var r=t(2109),o=t(7854),i=t(1702),a=t(4705),l=t(1320),c=t(2423),u=t(408),s=t(5787),f=t(614),p=t(111),d=t(7293),h=t(7072),g=t(8003),v=t(9587);e.exports=function(e,n,t){var A=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),m=A?"set":"add",y=o[e],E=y&&y.prototype,_=y,C={},w=function(e){var n=i(E[e]);l(E,e,"add"==e?function(e){return n(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:"get"==e?function(e){return b&&!p(e)?void 0:n(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:function(e,t){return n(this,0===e?0:e,t),this})};if(a(e,!f(y)||!(b||E.forEach&&!d((function(){(new y).entries().next()})))))_=t.getConstructor(n,e,A,m),c.enable();else if(a(e,!0)){var x=new _,k=x[m](b?{}:-0,1)!=x,S=d((function(){x.has(1)})),O=h((function(e){new y(e)})),B=!b&&d((function(){for(var e=new y,n=5;n--;)e[m](n,n);return!e.has(-0)}));O||((_=n((function(e,n){s(e,E);var t=v(new y,e,_);return null!=n&&u(n,t[m],{that:t,AS_ENTRIES:A}),t}))).prototype=E,E.constructor=_),(S||B)&&(w("delete"),w("has"),A&&w("get")),(B||k)&&w(m),b&&E.clear&&delete E.clear}return C[e]=_,r({global:!0,forced:_!=y},C),g(_,e),b||t.setStrong(_,e,A),_}},9920:(e,n,t)=>{var r=t(2597),o=t(3887),i=t(1236),a=t(3070);e.exports=function(e,n){for(var t=o(n),l=a.f,c=i.f,u=0;u{var r=t(5112)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[r]=!1,"/./"[e](n)}catch(e){}}return!1}},8544:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},4230:(e,n,t)=>{var r=t(1702),o=t(4488),i=t(1340),a=/"/g,l=r("".replace);e.exports=function(e,n,t,r){var c=i(o(e)),u="<"+n;return""!==t&&(u+=" "+t+'="'+l(i(r),a,""")+'"'),u+">"+c+""}},4994:(e,n,t)=>{"use strict";var r=t(3383).IteratorPrototype,o=t(30),i=t(9114),a=t(8003),l=t(7497),c=function(){return this};e.exports=function(e,n,t){var u=n+" Iterator";return e.prototype=o(r,{next:i(1,t)}),a(e,u,!1,!0),l[u]=c,e}},8880:(e,n,t)=>{var r=t(9781),o=t(3070),i=t(9114);e.exports=r?function(e,n,t){return o.f(e,n,i(1,t))}:function(e,n,t){return e[n]=t,e}},9114:e=>{e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},6135:(e,n,t)=>{"use strict";var r=t(4948),o=t(3070),i=t(9114);e.exports=function(e,n,t){var a=r(n);a in e?o.f(e,a,i(0,t)):e[a]=t}},8709:(e,n,t)=>{"use strict";var r=t(7854),o=t(9670),i=t(2140),a=r.TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return i(this,e)}},654:(e,n,t)=>{"use strict";var r=t(2109),o=t(6916),i=t(1913),a=t(6530),l=t(614),c=t(4994),u=t(9518),s=t(7674),f=t(8003),p=t(8880),d=t(1320),h=t(5112),g=t(7497),v=t(3383),A=a.PROPER,b=a.CONFIGURABLE,m=v.IteratorPrototype,y=v.BUGGY_SAFARI_ITERATORS,E=h("iterator"),_="keys",C="values",w="entries",x=function(){return this};e.exports=function(e,n,t,a,h,v,k){c(t,n,a);var S,O,B,I=function(e){if(e===h&&R)return R;if(!y&&e in j)return j[e];switch(e){case _:case C:case w:return function(){return new t(this,e)}}return function(){return new t(this)}},T=n+" Iterator",P=!1,j=e.prototype,z=j[E]||j["@@iterator"]||h&&j[h],R=!y&&z||I(h),M="Array"==n&&j.entries||z;if(M&&(S=u(M.call(new e)))!==Object.prototype&&S.next&&(i||u(S)===m||(s?s(S,m):l(S[E])||d(S,E,x)),f(S,T,!0,!0),i&&(g[T]=x)),A&&h==C&&z&&z.name!==C&&(!i&&b?p(j,"name",C):(P=!0,R=function(){return o(z,this)})),h)if(O={values:I(C),keys:v?R:I(_),entries:I(w)},k)for(B in O)(y||P||!(B in j))&&d(j,B,O[B]);else r({target:n,proto:!0,forced:y||P},O);return i&&!k||j[E]===R||d(j,E,R,{name:h}),g[n]=R,O}},7235:(e,n,t)=>{var r=t(857),o=t(2597),i=t(6061),a=t(3070).f;e.exports=function(e){var n=r.Symbol||(r.Symbol={});o(n,e)||a(n,e,{value:i.f(e)})}},9781:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:(e,n,t)=>{var r=t(7854),o=t(111),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},8324:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(e,n,t)=>{var r=t(317)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},8886:(e,n,t)=>{var r=t(8113).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},256:(e,n,t)=>{var r=t(8113);e.exports=/MSIE|Trident/.test(r)},5268:(e,n,t)=>{var r=t(4326),o=t(7854);e.exports="process"==r(o.process)},8113:(e,n,t)=>{var r=t(5005);e.exports=r("navigator","userAgent")||""},7392:(e,n,t)=>{var r,o,i=t(7854),a=t(8113),l=i.process,c=i.Deno,u=l&&l.versions||c&&c.version,s=u&&u.v8;s&&(o=(r=s.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},8008:(e,n,t)=>{var r=t(8113).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},748:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(e,n,t)=>{var r=t(7854),o=t(1236).f,i=t(8880),a=t(1320),l=t(3505),c=t(9920),u=t(4705);e.exports=function(e,n){var t,s,f,p,d,h=e.target,g=e.global,v=e.stat;if(t=g?r:v?r[h]||l(h,{}):(r[h]||{}).prototype)for(s in n){if(p=n[s],f=e.noTargetGet?(d=o(t,s))&&d.value:t[s],!u(g?s:h+(v?".":"#")+s,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(t,s,p,e)}}},7293:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:(e,n,t)=>{"use strict";t(4916);var r=t(1702),o=t(1320),i=t(2261),a=t(7293),l=t(5112),c=t(8880),u=l("species"),s=RegExp.prototype;e.exports=function(e,n,t,f){var p=l(e),d=!a((function(){var n={};return n[p]=function(){return 7},7!=""[e](n)})),h=d&&!a((function(){var n=!1,t=/a/;return"split"===e&&((t={}).constructor={},t.constructor[u]=function(){return t},t.flags="",t[p]=/./[p]),t.exec=function(){return n=!0,null},t[p](""),!n}));if(!d||!h||t){var g=r(/./[p]),v=n(p,""[e],(function(e,n,t,o,a){var l=r(e),c=n.exec;return c===i||c===s.exec?d&&!a?{done:!0,value:g(n,t,o)}:{done:!0,value:l(t,n,o)}:{done:!1}}));o(String.prototype,e,v[0]),o(s,p,v[1])}f&&c(s[p],"sham",!0)}},6677:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},2104:e=>{var n=Function.prototype,t=n.apply,r=n.bind,o=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?o.bind(t):function(){return o.apply(t,arguments)})},9974:(e,n,t)=>{var r=t(1702),o=t(9662),i=r(r.bind);e.exports=function(e,n){return o(e),void 0===n?e:i?i(e,n):function(){return e.apply(n,arguments)}}},7065:(e,n,t)=>{"use strict";var r=t(7854),o=t(1702),i=t(9662),a=t(111),l=t(2597),c=t(206),u=r.Function,s=o([].concat),f=o([].join),p={},d=function(e,n,t){if(!l(p,n)){for(var r=[],o=0;o{var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},6530:(e,n,t)=>{var r=t(9781),o=t(2597),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,l=o(i,"name"),c=l&&"something"===function(){}.name,u=l&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:l,PROPER:c,CONFIGURABLE:u}},1702:e=>{var n=Function.prototype,t=n.bind,r=n.call,o=t&&t.bind(r);e.exports=t?function(e){return e&&o(r,e)}:function(e){return e&&function(){return r.apply(e,arguments)}}},5005:(e,n,t)=>{var r=t(7854),o=t(614),i=function(e){return o(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?i(r[e]):r[e]&&r[e][n]}},1246:(e,n,t)=>{var r=t(648),o=t(8173),i=t(7497),a=t(5112)("iterator");e.exports=function(e){if(null!=e)return o(e,a)||o(e,"@@iterator")||i[r(e)]}},8554:(e,n,t)=>{var r=t(7854),o=t(6916),i=t(9662),a=t(9670),l=t(6330),c=t(1246),u=r.TypeError;e.exports=function(e,n){var t=arguments.length<2?c(e):n;if(i(t))return a(o(t,e));throw u(l(e)+" is not iterable")}},8173:(e,n,t)=>{var r=t(9662);e.exports=function(e,n){var t=e[n];return null==t?void 0:r(t)}},647:(e,n,t)=>{var r=t(1702),o=t(7908),i=Math.floor,a=r("".charAt),l=r("".replace),c=r("".slice),u=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,n,t,r,f,p){var d=t+e.length,h=r.length,g=s;return void 0!==f&&(f=o(f),g=u),l(p,g,(function(o,l){var u;switch(a(l,0)){case"$":return"$";case"&":return e;case"`":return c(n,0,t);case"'":return c(n,d);case"<":u=f[c(l,1,-1)];break;default:var s=+l;if(0===s)return o;if(s>h){var p=i(s/10);return 0===p?o:p<=h?void 0===r[p-1]?a(l,1):r[p-1]+a(l,1):o}u=r[s-1]}return void 0===u?"":u}))}},7854:(e,n,t)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t.g&&t.g)||function(){return this}()||Function("return this")()},2597:(e,n,t)=>{var r=t(1702),o=t(7908),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,n){return i(o(e),n)}},3501:e=>{e.exports={}},490:(e,n,t)=>{var r=t(5005);e.exports=r("document","documentElement")},4664:(e,n,t)=>{var r=t(9781),o=t(7293),i=t(317);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(e,n,t)=>{var r=t(7854),o=t(1702),i=t(7293),a=t(4326),l=r.Object,c=o("".split);e.exports=i((function(){return!l("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):l(e)}:l},9587:(e,n,t)=>{var r=t(614),o=t(111),i=t(7674);e.exports=function(e,n,t){var a,l;return i&&r(a=n.constructor)&&a!==t&&o(l=a.prototype)&&l!==t.prototype&&i(e,l),e}},2788:(e,n,t)=>{var r=t(1702),o=t(614),i=t(5465),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},2423:(e,n,t)=>{var r=t(2109),o=t(1702),i=t(3501),a=t(111),l=t(2597),c=t(3070).f,u=t(8006),s=t(1156),f=t(2050),p=t(9711),d=t(6677),h=!1,g=p("meta"),v=0,A=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},b=e.exports={enable:function(){b.enable=function(){},h=!0;var e=u.f,n=o([].splice),t={};t[g]=1,e(t).length&&(u.f=function(t){for(var r=e(t),o=0,i=r.length;o{var r,o,i,a=t(8536),l=t(7854),c=t(1702),u=t(111),s=t(8880),f=t(2597),p=t(5465),d=t(6200),h=t(3501),g="Object already initialized",v=l.TypeError,A=l.WeakMap;if(a||p.state){var b=p.state||(p.state=new A),m=c(b.get),y=c(b.has),E=c(b.set);r=function(e,n){if(y(b,e))throw new v(g);return n.facade=e,E(b,e,n),n},o=function(e){return m(b,e)||{}},i=function(e){return y(b,e)}}else{var _=d("state");h[_]=!0,r=function(e,n){if(f(e,_))throw new v(g);return n.facade=e,s(e,_,n),n},o=function(e){return f(e,_)?e[_]:{}},i=function(e){return f(e,_)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(n){var t;if(!u(n)||(t=o(n)).type!==e)throw v("Incompatible receiver, "+e+" required");return t}}}},7659:(e,n,t)=>{var r=t(5112),o=t(7497),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},3157:(e,n,t)=>{var r=t(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},614:e=>{e.exports=function(e){return"function"==typeof e}},4411:(e,n,t)=>{var r=t(1702),o=t(7293),i=t(614),a=t(648),l=t(5005),c=t(2788),u=function(){},s=[],f=l("Reflect","construct"),p=/^\s*(?:class|function)\b/,d=r(p.exec),h=!p.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,s,e),!0}catch(e){return!1}};e.exports=!f||o((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return h||!!d(p,c(e))}:g},4705:(e,n,t)=>{var r=t(7293),o=t(614),i=/#|\.prototype\./,a=function(e,n){var t=c[l(e)];return t==s||t!=u&&(o(n)?r(n):!!n)},l=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",s=a.POLYFILL="P";e.exports=a},111:(e,n,t)=>{var r=t(614);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},1913:e=>{e.exports=!1},7850:(e,n,t)=>{var r=t(111),o=t(4326),i=t(5112)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},2190:(e,n,t)=>{var r=t(7854),o=t(5005),i=t(614),a=t(7976),l=t(3307),c=r.Object;e.exports=l?function(e){return"symbol"==typeof e}:function(e){var n=o("Symbol");return i(n)&&a(n.prototype,c(e))}},408:(e,n,t)=>{var r=t(7854),o=t(9974),i=t(6916),a=t(9670),l=t(6330),c=t(7659),u=t(6244),s=t(7976),f=t(8554),p=t(1246),d=t(9212),h=r.TypeError,g=function(e,n){this.stopped=e,this.result=n},v=g.prototype;e.exports=function(e,n,t){var r,A,b,m,y,E,_,C=t&&t.that,w=!(!t||!t.AS_ENTRIES),x=!(!t||!t.IS_ITERATOR),k=!(!t||!t.INTERRUPTED),S=o(n,C),O=function(e){return r&&d(r,"normal",e),new g(!0,e)},B=function(e){return w?(a(e),k?S(e[0],e[1],O):S(e[0],e[1])):k?S(e,O):S(e)};if(x)r=e;else{if(!(A=p(e)))throw h(l(e)+" is not iterable");if(c(A)){for(b=0,m=u(e);m>b;b++)if((y=B(e[b]))&&s(v,y))return y;return new g(!1)}r=f(e,A)}for(E=r.next;!(_=i(E,r)).done;){try{y=B(_.value)}catch(e){d(r,"throw",e)}if("object"==typeof y&&y&&s(v,y))return y}return new g(!1)}},9212:(e,n,t)=>{var r=t(6916),o=t(9670),i=t(8173);e.exports=function(e,n,t){var a,l;o(e);try{if(!(a=i(e,"return"))){if("throw"===n)throw t;return t}a=r(a,e)}catch(e){l=!0,a=e}if("throw"===n)throw t;if(l)throw a;return o(a),t}},3383:(e,n,t)=>{"use strict";var r,o,i,a=t(7293),l=t(614),c=t(30),u=t(9518),s=t(1320),f=t(5112),p=t(1913),d=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=u(u(i)))!==Object.prototype&&(r=o):h=!0),null==r||a((function(){var e={};return r[d].call(e)!==e}))?r={}:p&&(r=c(r)),l(r[d])||s(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},7497:e=>{e.exports={}},6244:(e,n,t)=>{var r=t(7466);e.exports=function(e){return r(e.length)}},133:(e,n,t)=>{var r=t(7392),o=t(7293);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},8536:(e,n,t)=>{var r=t(7854),o=t(614),i=t(2788),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},3929:(e,n,t)=>{var r=t(7854),o=t(7850),i=r.TypeError;e.exports=function(e){if(o(e))throw i("The method doesn't accept regular expressions");return e}},1574:(e,n,t)=>{"use strict";var r=t(9781),o=t(1702),i=t(6916),a=t(7293),l=t(1956),c=t(5181),u=t(5296),s=t(7908),f=t(8361),p=Object.assign,d=Object.defineProperty,h=o([].concat);e.exports=!p||a((function(){if(r&&1!==p({b:1},p(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},n={},t=Symbol(),o="abcdefghijklmnopqrst";return e[t]=7,o.split("").forEach((function(e){n[e]=e})),7!=p({},e)[t]||l(p({},n)).join("")!=o}))?function(e,n){for(var t=s(e),o=arguments.length,a=1,p=c.f,d=u.f;o>a;)for(var g,v=f(arguments[a++]),A=p?h(l(v),p(v)):l(v),b=A.length,m=0;b>m;)g=A[m++],r&&!i(d,v,g)||(t[g]=v[g]);return t}:p},30:(e,n,t)=>{var r,o=t(9670),i=t(6048),a=t(748),l=t(3501),c=t(490),u=t(317),s=t(6200),f=s("IE_PROTO"),p=function(){},d=function(e){return" + + + + + + org.apache.groovy + groovy + 4.0.22 + runtime + + + + org.apache.maven + maven-model + 3.9.8 + + + org.apache.maven + maven-model-builder + 3.9.8 + + + org.codehaus.plexus + plexus-utils + 4.0.1 + + + org.apache.maven.shared + maven-shared-utils + 3.4.2 + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + + + + + diff --git a/src/main/kotlin/no/acntech/easycontainers/AbstractContainerRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/AbstractContainerRuntime.kt new file mode 100644 index 00000000..86a854b8 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/AbstractContainerRuntime.kt @@ -0,0 +1,200 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.lang.guardedExecution +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.io.InputStream +import java.io.OutputStream +import java.net.InetAddress +import java.nio.file.Files +import java.nio.file.Path +import java.time.Duration +import java.util.concurrent.* + +/** + * AbstractContainerRuntime is an abstract class that provides common functionality for implementing a ContainerRuntime. + * It contains methods for starting and stopping containers, executing commands inside containers, transferring files to and from containers, + * and retrieving information about the container runtime. + * + * @property container The GenericContainer instance representing the container to manage. + */ +abstract class AbstractContainerRuntime( + protected val container: GenericContainer, +) : ContainerRuntime { + + private inner class TerminateTask : Runnable { + + override fun run() { + log.info("Terminating container '${container.getName()}'") + + guardedExecution( + { kill() }, + onError = { log.warn("Error '${it.message}' killing container '${container.getName()}'", it) } + ) + + guardedExecution( + { delete() }, + onError = { log.warn("Error '${it.message}' deleting container '${container.getName()}'", it) } + ) + } + } + + companion object { + + @JvmStatic + val GENERAL_EXECUTOR_SERVICE: ExecutorService = Executors.newVirtualThreadPerTaskExecutor() + + @JvmStatic + val SCHEDULER: ScheduledExecutorService = Executors.newScheduledThreadPool( + 1, + Thread.ofVirtual().factory() + ) + + } + + protected val log: Logger = LoggerFactory.getLogger(javaClass) + + private var terminateFuture: Future<*>? = null + + init { + val shutdownHook = Thread { + + // Early return: if the container has already been deleted, we don't need to do anything + if (container.getState() == Container.State.DELETED) { + return@Thread + } + + log.info("ShutdownHook: stopping and removing container '${container.getName()}'") + + guardedExecution( + { stop() }, + listOf(Exception::class), + { stopError -> + log.warn("ShutdownHook: Error '${stopError.message}' stopping container '${container.getName()}'", stopError) + guardedExecution( + { kill() }, // Kill the container if stopping it fails + listOf(Exception::class), + { killError -> + log.warn("ShutdownHook: Error '${killError.message}' killing container '${container.getName()}'", killError) + } + ) + } + ) + + guardedExecution( + { delete(true) }, + listOf(Exception::class), + { log.warn("ShutdownHook: Error '${it.message}' deleting container '${container.getName()}'", it) } + ) + } + + // Only add the shutdown-hook if the container is ephemeral + if (container.isEphemeral()) { + Runtime.getRuntime().addShutdownHook(shutdownHook) + } + } + + override fun getContainer(): Container { + return container + } + + override fun start() { + container.builder.maxLifeTime?.let { + terminateFuture = SCHEDULER.schedule(TerminateTask(), it.toSeconds(), TimeUnit.SECONDS).also { + log.info("Container '${container.getName()}' will be terminated in ${it.getDelay(TimeUnit.SECONDS)} seconds") + } + } + } + + override fun stop() { + terminateFuture?.cancel(false) + container.changeState(Container.State.STOPPED) + } + + override fun delete(force: Boolean) { + container.onDelete() + } + + internal abstract fun execute( + executable: Executable, + args: Args?, + useTty: Boolean, + workingDir: UnixDir?, + input: InputStream?, + output: OutputStream = OutputStream.nullOutputStream(), + waitTimeValue: Long?, + waitTimeUnit: TimeUnit?, + ): Pair // Pair of exit code and stderr + + /** + * Puts a file from local path to a remote directory on a Unix system. + * + * @param localFile The local path of the file to be put. + * @param remoteDir The remote directory on the Unix system where the file will be put. + * @param remoteFilename The name of the file on the remote directory. If null, the same name as the local file will be used. + * @return The size of the file in bytes. + */ + internal abstract fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long + + /** + * Retrieves a file from the specified remote directory and returns the local path where the file is stored. + * + * @param remoteDir The remote directory from which to retrieve the file. + * @param remoteFilename The name of the file to retrieve. + * @param localPath The local path where the retrieved file will be stored. If null, a temporary directory will be used. + * @return The local path where the retrieved file is stored. + */ + internal abstract fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path + + /** + * Copies a local directory to the remote directory. + * + * @param localDir The local directory to be copied. + * @param remoteDir The remote directory to copy to. + * @return The size of the directory in bytes. + */ + internal abstract fun putDirectory(localDir: Path, remoteDir: UnixDir): Long + + /** + * Retrieves the directory from the remote Unix system and saves it to the local file system. + * + * @param remoteDir The remote directory path to retrieve. + * @param localDir The local path where the directory should be saved. Defaults to a temporary directory. + * @return A pair containing the local path where the directory was saved and a list of paths for each file in the directory. + */ + internal abstract fun getDirectory( + remoteDir: UnixDir, + localDir: Path = Files.createTempDirectory("container-download-tar").toAbsolutePath(), + ): Pair> + + /** + * Retrieves the duration of the container's execution. + * + * @return the duration as a Duration object, or null if the duration is not available + */ + internal abstract fun getDuration(): Duration? + + /** + * Retrieves the exit code of the container. + * + * @return the exit code of the container, or null if the container has not yet exited + */ + internal abstract fun getExitCode(): Int? + + /** + * Retrieves the host associated with the container runtime. + * + * @return the host as a Host object or null if the host is not available + */ + internal abstract fun getHost(): Host? + + /** + * Retrieves the IP address of the container. + * + * @return the IP address of the container as an InetAddress object, or null if the IP address is not available + */ + internal abstract fun getIpAddress(): InetAddress? + +// internal abstract fun waitForCompletion(timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/BaseContainerBuilder.kt b/src/main/kotlin/no/acntech/easycontainers/BaseContainerBuilder.kt new file mode 100644 index 00000000..811432eb --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/BaseContainerBuilder.kt @@ -0,0 +1,262 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.output.OutputLineCallback +import no.acntech.easycontainers.util.collections.prettyPrint +import no.acntech.easycontainers.util.text.NEW_LINE +import org.apache.commons.lang3.builder.ToStringBuilder +import org.apache.commons.lang3.builder.ToStringStyle +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.time.Duration +import java.time.temporal.ChronoUnit +import java.util.* +import java.util.concurrent.atomic.AtomicBoolean + +/** + * Abstract base class for container builders. + * + * @param SELF the type of the concrete builder that extends this class. + * @property log the logger instance. + * @property executionMode the execution mode of the container. + * @property name the name of the container. + * @property namespace the namespace of the container. + * @property labels the labels associated with the container. + * @property env the environment variables of the container. + * @property command the command to be executed in the container. + * @property args the arguments for the command. + * @property image the image URL of the container. + * @property exposedPorts the ports exposed by the container. + * @property portMappings the port mappings for the container. + * @property containerFiles the files in the container. + * @property volumes the volumes attached to the container. + * @property cpuRequest the CPU request of the container. + * @property cpuLimit the CPU limit of the container. + * @property memoryRequest the memory request of the container. + * @property memoryLimit the memory limit of the container. + * @property networkName the network name of the container. + * @property isEphemeral indicates if the container is ephemeral. + * @property outputLineCallback the callback for handling output lines. + * @property maxLifeTime the maximum lifetime of the container. + * @property customProperties the custom properties of the container. + * @property containerPlatformType the type of the container platform. + */ +abstract class BaseContainerBuilder> : ContainerBuilder { + + protected val log: Logger = LoggerFactory.getLogger(javaClass) + + private val isBuilt = AtomicBoolean(false) + + internal var executionMode = ExecutionMode.SERVICE + + internal var name: ContainerName = ContainerName.of(UUID.randomUUID().toString()) + + internal var namespace: Namespace = Namespace.DEFAULT + + internal var labels: MutableMap = mutableMapOf() + + internal val env: MutableMap = mutableMapOf() + + internal var command: Executable? = null + + internal var args: Args? = null + + internal lateinit var image: ImageURL + + internal val exposedPorts: MutableMap = mutableMapOf() + + internal val portMappings: MutableMap = mutableMapOf() + + internal val containerFiles: MutableMap = mutableMapOf() // name -> ConfigMapVolume + + internal val volumes: MutableList = mutableListOf() + + internal var cpuRequest: CPU? = null + + internal var cpuLimit: CPU? = null + + internal var memoryRequest: Memory? = null + + internal var memoryLimit: Memory? = null + + internal var networkName: NetworkName? = null + + internal var isEphemeral: Boolean = true + + internal var outputLineCallback: OutputLineCallback = OutputLineCallback { _ -> } + + internal var maxLifeTime: Duration? = null + + internal var customProperties: MutableMap = mutableMapOf() + + internal var containerPlatformType = ContainerPlatformType.DOCKER + + + override fun withContainerPlatformType(type: ContainerPlatformType): SELF { + this.containerPlatformType = type + return self() + } + + override fun withExecutionMode(executionMode: ExecutionMode): SELF { + this.executionMode = executionMode + return self() + } + + override fun withName(name: ContainerName): SELF { + this.name = name + return self() + } + + override fun withNamespace(namespace: Namespace): SELF { + this.namespace = namespace + return self() + } + + override fun withLabel(key: LabelKey, value: LabelValue): SELF { + labels[key] = value + return self() + } + + override fun withEnv(key: String, value: String): SELF { + return withEnv(EnvVarKey(key), EnvVarValue(value)) + } + + override fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF { + env[key] = value + return self() + } + + override fun withEnv(env: Map): SELF { + this.env.putAll(env) + return self() + } + + override fun withCommand(command: Executable): SELF { + this.command = command + return self() + } + + override fun withArgs(args: Args): SELF { + this.args = args + return self() + } + + override fun withImage(image: ImageURL): SELF { + this.image = image + return self() + } + + override fun withExposedPort(name: PortMappingName, port: NetworkPort): SELF { + exposedPorts[name] = port + return self() + } + + override fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF { + require(port in exposedPorts.values) { "Port '$port' cannot be mapped if not exposed" } + portMappings[port] = mappedPort + return self() + } + + override fun withNetworkName(networkName: NetworkName): SELF { + this.networkName = networkName + return self() + } + + override fun withCpuRequest(cpuRequest: CPU): SELF { + this.cpuRequest = cpuRequest + return self() + } + + override fun withCpuLimit(cpuLimit: CPU): SELF { + this.cpuLimit = cpuLimit + return self() + } + + override fun withMemoryRequest(memoryRequest: Memory): SELF { + this.memoryRequest = memoryRequest + return self() + } + + override fun withMemoryLimit(memoryLimit: Memory): SELF { + this.memoryLimit = memoryLimit + return self() + } + + override fun withIsEphemeral(ephemeral: Boolean): SELF { + this.isEphemeral = ephemeral + return self() + } + + override fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF { + this.outputLineCallback = outputLineCallback + return self() + } + + override fun withContainerFile(file: ContainerFile): SELF { + containerFiles[file.name] = file + return self() + } + + override fun withVolume(name: VolumeName, mountPath: UnixDir): SELF { + volumes.add(Volume(name, mountPath)) + return self() + } + + override fun withVolume(volume: Volume): SELF { + volumes.add(volume) + return self() + } + + override fun withMaxLifeTime(maxLifeTime: Duration): SELF { + this.maxLifeTime = maxLifeTime + return self() + } + + override fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF { + this.maxLifeTime = Duration.of(value, unit) + return self() + } + + override fun withCustomProperty(key: String, value: Any): SELF { + customProperties[key] = value + return self() + } + + + protected open fun self(): SELF { + @Suppress("UNCHECKED_CAST") + return this as SELF + } + + protected fun checkBuildAllowed() { + if (!isBuilt.compareAndSet(false, true)) { + throw ContainerException("Container has already been built") + } + } + + override fun toString(): String { + return ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("name", name) + .append("namespace", namespace) + .append("labels", labels) + .append("env", env) + .append("command", command) + .append("args", args) + .append("image", image) + .append("exposedPorts", exposedPorts) + .append("mappedPorts", portMappings) + .append("isEphemeral", isEphemeral) + .append("maxLifeTime", maxLifeTime) + .append("outputLineCallback", outputLineCallback) + .append("customProperties$NEW_LINE", customProperties.prettyPrint(sortKeys = true)) + .append("networkName", networkName) + .append("cpuRequest", cpuRequest) + .append("cpuLimit", cpuLimit) + .append("memoryRequest", memoryRequest) + .append("memoryLimit", memoryLimit) + .append("volumes", volumes) + .append("containerFiles", containerFiles) + .toString() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/ContainerBuilderCallback.kt b/src/main/kotlin/no/acntech/easycontainers/ContainerBuilderCallback.kt new file mode 100644 index 00000000..955c3d61 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/ContainerBuilderCallback.kt @@ -0,0 +1,20 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.model.ContainerBuilder + +/** + * An interface for defining a callback to configure a container builder. + * Implement the [ContainerBuilderCallback] interface to provide custom configuration logic for a container builder. + * + * @param T the type of container builder + */ +interface ContainerBuilderCallback { + + /** + * Configures a container builder. + * + * @param builder the container builder to configure + */ + fun configure(builder: ContainerBuilder<*>) + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/ContainerException.kt b/src/main/kotlin/no/acntech/easycontainers/ContainerException.kt new file mode 100644 index 00000000..6e83766f --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/ContainerException.kt @@ -0,0 +1,17 @@ +package no.acntech.easycontainers + +/** + * ContainerException is a subclass of RuntimeException that is used to represent exceptions + * that occur in the context of container operations. + */ +open class ContainerException : RuntimeException { + + constructor() : super() + + constructor(cause: Throwable) : super(cause) + + constructor(message: String) : super(message) + + constructor(message: String, cause: Throwable) : super(message, cause) + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/Environment.kt b/src/main/kotlin/no/acntech/easycontainers/Environment.kt new file mode 100644 index 00000000..1d87add9 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/Environment.kt @@ -0,0 +1,118 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.docker.DockerConstants +import no.acntech.easycontainers.util.net.NetworkUtils +import no.acntech.easycontainers.util.platform.PlatformUtils +import no.acntech.easycontainers.util.text.EMPTY_STRING +import org.slf4j.LoggerFactory + +object Environment { + + private val log = LoggerFactory.getLogger(Environment::class.java) + + const val PROP_DOCKER_DAEMON_ENDPOINT = "easycontainers.docker.host" + const val PROP_REGISTRY_ENDPOINT = "easycontainers.registry.endpoint" + const val PROP_INSECURE_REGISTRY = "easycontainers.registry.insecure" + + const val PROP_K8S_KANIKO_DATA_HOST_DIR = "easycontainers.k8s.kaniko-data.host.dir" + const val PROP_K8S_KANIKO_DATA_PVC_NAME = "easycontainers.k8s.kaniko-data.pvc.name" + + const val PROP_K8S_GENERAL_DATA_HOST_DIR = "easycontainers.k8s.general-data.host.dir" + const val PROP_K8S_GENERAL_DATA_PVC_NAME = "easycontainers.k8s.general-data.pvc.name" + + const val DEFAULT_K8S_KANIKO_DATA_HOST_DIR = "/home/thomas/kind/kaniko-data" + const val DEFAULT_K8S_KANIKO_DATA_PVC_NAME = "kaniko-data-pvc" + + const val DEFAULT_K8S_GENERAL_DATA_HOST_DIR = "/home/thomas/kind/share" + const val DEFAULT_K8S_GENERAL_DATA_PVC_NAME = "host-share-pvc" + + const val DEFAULT_REGISTRY_HOST = "localhost" + const val DEFAULT_REGISTRY_PORT = 5000 + + // Note that this includes the protocol + val defaultRegistryCompleteURL: String // e.g. http://localhost:5000 + + val defaultRegistryEndpoint: String // e.g. localhost:5000 + + val defaultDockerDaemonEndpoint: String // e.g. tcp://localhost:2375, tcps://docker.acne.com:2376, unix:///var/run/docker.sock + + val k8sKanikoDataHostDir: String = System.getProperty(PROP_K8S_KANIKO_DATA_HOST_DIR, DEFAULT_K8S_KANIKO_DATA_HOST_DIR) + + val k8sKanikoDataPvcName: String = System.getProperty(PROP_K8S_KANIKO_DATA_PVC_NAME, DEFAULT_K8S_KANIKO_DATA_PVC_NAME) + + val k8sGeneralDataHostDir: String = System.getProperty(PROP_K8S_GENERAL_DATA_HOST_DIR, DEFAULT_K8S_GENERAL_DATA_HOST_DIR) + + val k8sGeneralDataPvcName: String = System.getProperty(PROP_K8S_GENERAL_DATA_PVC_NAME, DEFAULT_K8S_GENERAL_DATA_PVC_NAME) + + init { + defaultRegistryCompleteURL = extractRegistryUrl().also { + log.info("Environment: Default registry URL: $it") + } + + // Set default registry endpoint from the url - extract the host and port + defaultRegistryEndpoint = defaultRegistryCompleteURL.substringAfter("://").also { + log.info("Environment: Default registry endpoint: $it") + } + + defaultDockerDaemonEndpoint = extractDockerDaemonEndpoint().also { + log.info("Environment: Default Docker daemon endpoint: $it") + } + } + + private fun extractDockerDaemonEndpoint(): String { + val dockerHost = System.getenv(DockerConstants.ENV_DOCKER_DAEMON_ENDPOINT) + var result = EMPTY_STRING + + if (!dockerHost.isNullOrEmpty()) { + result = if (dockerHost.startsWith("tcp") && !dockerHost.matches(".*:\\d+".toRegex())) // host:port + "$dockerHost:${DockerConstants.DEFAULT_DOCKER_TCP_INSECURE_PORT}" + else dockerHost + } + + if (result.isEmpty()) { + val endpoint = System.getProperty(PROP_DOCKER_DAEMON_ENDPOINT) + if (!endpoint.isNullOrEmpty()) { + result = endpoint + } + } + + if (result.isEmpty()) { + val host = PlatformUtils.getWslIpAddress() ?: "localhost" + result = getEndpointByOpenPort(host, DockerConstants.DEFAULT_DOCKER_TCP_INSECURE_PORT, "tcp") + ?: getEndpointByOpenPort(host, DockerConstants.DEFAULT_DOCKER_TCP_SECURE_PORT, "tcps") + ?: DockerConstants.DEFAULT_DOCKER_DAEMON_ENDPOINT + } + + return result + } + + private fun getEndpointByOpenPort(host: String, port: Int, protocol: String): String? { + if (NetworkUtils.isTcpPortOpen(host, port)) { + val endPoint = "$protocol://$host:$port" + System.setProperty(PROP_DOCKER_DAEMON_ENDPOINT, endPoint) + return endPoint + } + return null + } + + private fun extractRegistryUrl(): String { + val result: String + + val registryEndpoint = System.getProperty(PROP_REGISTRY_ENDPOINT) + + if (!registryEndpoint.isNullOrEmpty()) { + val insecureRegistry = System.getProperty(PROP_INSECURE_REGISTRY).toBoolean() + result = if (insecureRegistry) { + "http://$registryEndpoint" + } else { + "https://$registryEndpoint" + } + } else { + val registryHost = PlatformUtils.getWslIpAddress() ?: DEFAULT_REGISTRY_HOST + result = "http://$registryHost:$DEFAULT_REGISTRY_PORT" + } + + return result + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/GenericContainer.kt b/src/main/kotlin/no/acntech/easycontainers/GenericContainer.kt new file mode 100644 index 00000000..b33579b9 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/GenericContainer.kt @@ -0,0 +1,295 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.docker.DockerRuntime +import no.acntech.easycontainers.kubernetes.K8sJobRuntime +import no.acntech.easycontainers.kubernetes.K8sServiceRuntime +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.output.OutputLineCallback +import no.acntech.easycontainers.util.text.NEW_LINE +import org.apache.commons.lang3.builder.ToStringBuilder +import org.apache.commons.lang3.builder.ToStringStyle +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.io.InputStream +import java.io.OutputStream +import java.net.InetAddress +import java.nio.file.Path +import java.time.Duration +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit + + +/** + * GenericContainer represents a generic container implementation that can be customized and built using the provided builder. + * It implements the Container interface. + * + * @property builder The builder object used to construct the GenericContainer instance. + */ +open class GenericContainer( + internal val builder: GenericContainerBuilder, +) : Container { + + open class GenericContainerBuilder : BaseContainerBuilder() { + + override fun self(): GenericContainerBuilder { + return this + } + + override fun build(): Container { + checkBuildAllowed() + return GenericContainer(this) + } + + } + + companion object { + + @OptIn(ExperimentalStdlibApi::class) + private val LEGAL_STATE_TRANSITIONS: Map> = mapOf( + Container.State.UNINITIATED to setOf(Container.State.INITIALIZING), + Container.State.INITIALIZING to setOf(Container.State.RUNNING, Container.State.FAILED), + Container.State.RUNNING to setOf(Container.State.TERMINATING, Container.State.STOPPED, Container.State.FAILED), + Container.State.TERMINATING to setOf(Container.State.STOPPED, Container.State.DELETED, Container.State.FAILED), + Container.State.STOPPED to setOf(Container.State.DELETED, Container.State.FAILED), + Container.State.DELETED to emptySet(), + Container.State.FAILED to emptySet(), + Container.State.UNKNOWN to Container.State.entries.toSet() + ) + + fun builder(): ContainerBuilder<*> { + return GenericContainerBuilder() + } + } + + protected val log: Logger = LoggerFactory.getLogger(javaClass) + + private var runtime: AbstractContainerRuntime = when (builder.containerPlatformType) { + ContainerPlatformType.DOCKER -> DockerRuntime(this) + ContainerPlatformType.KUBERNETES -> { + when (builder.executionMode) { + ExecutionMode.SERVICE -> K8sServiceRuntime(this) + ExecutionMode.TASK -> K8sJobRuntime(this) + } + } + } + + private var state: Container.State = Container.State.UNINITIATED + + private val stateLatches: Map = mapOf( + Container.State.INITIALIZING to CountDownLatch(1), + Container.State.RUNNING to CountDownLatch(1), + Container.State.TERMINATING to CountDownLatch(1), + Container.State.STOPPED to CountDownLatch(1), + Container.State.DELETED to CountDownLatch(1), + Container.State.FAILED to CountDownLatch(1) + ) + + private val completionLatch: CountDownLatch = CountDownLatch(1) + + override fun getRuntime(): ContainerRuntime { + return runtime + } + + override fun getExecutionMode(): ExecutionMode { + return builder.executionMode + } + + override fun getName(): ContainerName { + return builder.name + } + + override fun getNamespace(): Namespace { + return builder.namespace + } + + override fun getLabels(): Map { + return builder.labels + } + + override fun getNetworkName(): NetworkName? { + return builder.networkName + } + + override fun getEnv(): Map { + return builder.env + } + + override fun getCommand(): Executable? { + return builder.command + } + + override fun getArgs(): Args? { + return builder.args + } + + override fun getImage(): ImageURL { + return builder.image + } + + override fun getExposedPorts(): List { + return builder.exposedPorts.values.toList() + } + + override fun getMappedPort(port: NetworkPort): NetworkPort { + return builder.portMappings[port] ?: port + } + + override fun getPortMappings(): Map { + return builder.portMappings + } + + override fun getVolumes(): List { + return builder.volumes + } + + override fun isEphemeral(): Boolean { + return builder.isEphemeral + } + + override fun getHost(): Host? { + return runtime.getHost() + } + + override fun getIpAddress(): InetAddress? { + return runtime.getIpAddress() + } + + override fun getDuration(): Duration? { + return runtime.getDuration() + } + + override fun getMaxLifeTime(): Duration? { + return builder.maxLifeTime + } + + override fun getExitCode(): Int? { + return runtime.getExitCode() + } + + override fun getOutputLineCallback(): OutputLineCallback { + return builder.outputLineCallback + } + + override fun execute( + executable: Executable, + args: Args?, + useTty: Boolean, + workingDir: UnixDir?, + input: InputStream?, + output: OutputStream, + waitTimeValue: Long?, + waitTimeUnit: TimeUnit?, + ): Pair { + return runtime.execute( + executable, + args, + useTty, + workingDir, + input, + output, + waitTimeValue, + waitTimeUnit + ) + } + + override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long { + return runtime.putFile(localFile, remoteDir, remoteFilename) + } + + override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path { + return runtime.getFile(remoteDir, remoteFilename, localPath) + } + + override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long { + return runtime.putDirectory(localDir, remoteDir) + } + + override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair> { + return runtime.getDirectory(remoteDir, localDir) + } + + @Synchronized + override fun getState(): Container.State { + return state + } + + override fun waitForState(state: Container.State, timeout: Long, unit: TimeUnit): Boolean { + val latch = stateLatches[state] ?: throw IllegalArgumentException("Cannot wait for state: $state") + log.debug("Waiting $timeout $unit for container '${getName()}' to reach state '$state'") + + return when { + timeout > 0 -> { + log.debug("Waiting $timeout $unit for container '${getName()}' to reach state '$state'") + latch.await(timeout, unit) + } + + else -> { + log.debug("Waiting indefinitely for container '${getName()}' to reach state '$state'") + latch.await().let { true } + } + } + } + + override fun waitForCompletion(timeout: Long, unit: TimeUnit): Boolean { + return if (timeout > 0) + completionLatch.await(timeout, unit) + else { + completionLatch.await() + true + } + } + + override fun toString(): String { + return ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("state", state) + .append("runtime", runtime) + .append("host", getHost()) + .append("ipAddress", getIpAddress()) + .append("duration", getDuration()) + .append("exitCode", getExitCode()) + .append("builder$NEW_LINE", builder) + .toString() + } + + @Synchronized + internal fun changeState(newState: Container.State, vararg requireOneOf: Container.State) { + if (getState() == newState) { + log.debug("Container '${getName()}' is already in state '$newState'") + return + } + + requireOneOfStates(*requireOneOf) + + val oldState = state + state = newState.also { + log.info("Container '${getName()}' state changed: [$oldState] -> [$newState]") + } + + // Notify waiting threads + stateLatches[newState]?.countDown() + + if (isInOneOfStates(Container.State.STOPPED, Container.State.DELETED, Container.State.FAILED)) { + completionLatch.countDown() + } + } + + @Synchronized + internal fun isInOneOfStates(vararg states: Container.State): Boolean { + return states.contains(state) + } + + @Synchronized + internal fun requireOneOfStates(vararg states: Container.State) { + if (states.isNotEmpty() && !states.contains(state)) { + throw ContainerException( + "Illegal state: container '${getName()}' is in state '${getState()}', " + + "but required one of '${states.joinToString()}'" + ) + } + } + + internal fun isLegalStateChange(oldState: Container.State = getState(), newState: Container.State): Boolean { + return newState in (LEGAL_STATE_TRANSITIONS[oldState] ?: emptySet()) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/ImageBuilder.kt b/src/main/kotlin/no/acntech/easycontainers/ImageBuilder.kt new file mode 100644 index 00000000..a480c642 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/ImageBuilder.kt @@ -0,0 +1,385 @@ +package no.acntech.easycontainers + +import no.acntech.easycontainers.docker.DockerImageBuilder +import no.acntech.easycontainers.kubernetes.K8sImageBuilder +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.output.OutputLineCallback +import org.apache.commons.lang3.builder.ToStringBuilder +import org.apache.commons.lang3.builder.ToStringStyle +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.nio.file.Files +import java.nio.file.LinkOption +import java.nio.file.Path +import java.time.Instant + +/** + * An abstract class for building Docker images. The class is designed to be extended by specific (concrete) implementations. + * + *

    Kubernetes quirks

    + * In order to build Docker images in a k8s cluster (using Kaniko) from a test environment running outside the cluster, you would + * normally use a shared volume between the host and the k8s cluster. + *

    + * In order to share a folder between the host and the k8s cluster the following config apply for Docker Desktop on + * WSL (Windows Subsystem for Linux): + *

      + *
    • On the host the shared directory must be under /mnt/wsl/..
    • + *
    • In the k8s cluster the shared directory must be specified to be under /run/desktop/mnt/host/wsl/..
    • + *
      + *    apiVersion: v1
      + * kind: PersistentVolume
      + * metadata:
      + *   name: kaniko-data-pv
      + *   labels:
      + *     type: local
      + * spec:
      + *   storageClassName: hostpath
      + *   capacity:
      + *     storage: 100Mi
      + *   accessModes:
      + *     - ReadWriteMany
      + *   hostPath: /run/desktop/mnt/host/wsl/kaniko-data
      + * 
      + *

      + * When creating and configuring the ImageBuilder, this path must be used as the local path. + *

      
      + *    val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES)
      + *          .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/mnt/wsl/kaniko-data")
      + *          // other properties
      + * 
      + *

      + * For KinD k8s the shared folder can be anywhere on the host file system, but the kind cluster must be configured + * using a custom config applied at cluster startup in order for containers to mount the shared folder. + *

      + * Example: + *

      + * Host (wsl or native linux) path: /home/user/k8s-share/kaniko-data + *

      + * Kind cluster config: + *

      + *    kind: Cluster
      + * apiVersion: kind.x-k8s.io/v1alpha4
      + * networking:
      + *   apiServerAddress: "0.0.0.0"
      + * nodes:
      + * - role: control-plane
      + *   extraMounts:
      + *     - hostPath: /home/[user]/kaniko-data
      + *       containerPath: /kaniko-data
      + * 
      + *

      + * When creating and configuring the ImageBuilder (for kubernetes), this path must be used as the local path. + *

      
      + *    val imageBuilder = ImageBuilder.of(ContainerPlatformType.KUBERNETES)
      + *          .withCustomProperty(ImageBuilder.PROP_LOCAL_KANIKO_DATA_PATH, "/home/[user]/kaniko-data")
      + *          // other properties
      + * 
      + */ +abstract class ImageBuilder { + + enum class State { + INITIALIZED, + IN_PROGRESS, + UNKNOWN, + COMPLETED, + FAILED + } + + companion object { + + /** + * Creates and returns of ImageBuilder based on the provided container type. + * + * @param type the type of container, defaults to ContainerType.KUBERNETES + * @return an instance of ImageBuilder + */ + fun of(type: ContainerPlatformType = ContainerPlatformType.KUBERNETES): ImageBuilder { + return when (type) { + ContainerPlatformType.DOCKER -> DockerImageBuilder() + ContainerPlatformType.KUBERNETES -> K8sImageBuilder() + } + } + + } + + protected val log: Logger = LoggerFactory.getLogger(javaClass) + + private var state: State = State.INITIALIZED + + protected var registry: RegistryURL = RegistryURL.LOCAL + + protected var repository: RepositoryName = RepositoryName.DEFAULT + + protected var isInsecureRegistry: Boolean = false + + protected var dockerContextDir: Path = Path.of(System.getProperty("user.dir")) + + protected var imageName: ImageName = ImageName.DEFAULT + + protected val tags: MutableList = mutableListOf() + + protected val labels: MutableMap = mutableMapOf() + + protected var namespace: Namespace = Namespace.DEFAULT + + protected var verbosity: Verbosity = Verbosity.INFO + + protected var customProperties: MutableMap = mutableMapOf() + + protected var outputLineCallback: OutputLineCallback = OutputLineCallback { _ -> } + + /** + * Set the Docker context directory. This directory will be used as the build context when building the Docker image. + * + * @param dir the directory to use as the build context, if this exists the Dockerfile and all files in this directory + * are used to build the image. + * @exception IllegalArgumentException if the dir argument is not a directory + */ + fun withDockerContextDir(dir: Path): ImageBuilder { + require(Files.isDirectory(dir, LinkOption.NOFOLLOW_LINKS)) { "Docker context [$dir] is not a directory" } + this.dockerContextDir = dir + return this + } + + fun withDockerContextDir(dir: String): ImageBuilder { + return withDockerContextDir(Path.of(dir)) + } + + /** + * Sets the image registry for the ImageBuilder. + * + * @param registry the registry URL to be set + * @return the current ImageBuilder instance + */ + fun withImageRegistry(registry: RegistryURL): ImageBuilder { + this.registry = registry + return this + } + + fun withImageRegistry(registry: String): ImageBuilder { + return withImageRegistry(RegistryURL.of(registry)) + } + + /** + * Sets the insecure registry flag for the image builder. + * + * @param insecureRegistry true to allow insecure registry, false otherwise + * @return the updated image builder instance + */ + fun withInsecureRegistry(insecureRegistry: Boolean): ImageBuilder { + this.isInsecureRegistry = insecureRegistry + return this + } + + /** + * Sets the (registry) repository for the ImageBuilder. + * + * @param repository The repository to set for the ImageBuilder. + * @return The updated ImageBuilder. + */ + fun withRepository(repository: RepositoryName): ImageBuilder { + this.repository = repository + return this + } + + fun withRepository(repository: String): ImageBuilder { + return withRepository(RepositoryName.of(repository)) + } + + /** + * Sets the name of the image. + * + * @param name The name to set for the image. + * @return The instance of the ImageBuilder with the name set. + */ + fun withName(name: ImageName): ImageBuilder { + this.imageName = name + return this + } + + fun withName(name: String): ImageBuilder { + return withName(ImageName.of(name)) + } + + /** + * Adds the given image tag to the builder. + * + * @param tag the image tag to add + * @return the updated ImageBuilder instance + */ + fun withTag(tag: ImageTag): ImageBuilder { + tags.add(tag) + return this + } + + fun withTag(tag: String): ImageBuilder { + return withTag(ImageTag.of(tag)) + } + + fun withTags(tags: Set): ImageBuilder { + tags.forEach { withTag(it) } + return this + } + + /** + * Adds a label to the ImageBuilder. + * + * @param key the label key + * @param value the label value + * @return the modified ImageBuilder instance with the added label + */ + fun withLabel(key: LabelKey, value: LabelValue): ImageBuilder { + labels[key] = value + return this + } + + fun withLabel(key: String, value: String): ImageBuilder { + return withLabel(LabelKey.of(key), LabelValue.of(value)) + } + + fun withLabels(labels: Map): ImageBuilder { + labels.forEach { (key, value) -> withLabel(key, value) } + return this + } + + /** + * Sets the namespace for the ImageBuilder - this is only relevant for Kubernetes. + * + * @param namespace the namespace to set for the ImageBuilder + * @return the updated ImageBuilder with the specified namespace set + */ + fun withNamespace(namespace: Namespace): ImageBuilder { + this.namespace = namespace + return this + } + + fun withNamespace(namespace: String): ImageBuilder { + return withNamespace(Namespace.of(namespace)) + } + + /** + * Sets the verbosity level for the ImageBuilder. + * + * @param verbosity the verbosity level to set + * @return the ImageBuilder instance + */ + fun withVerbosity(verbosity: Verbosity): ImageBuilder { + this.verbosity = verbosity + return this + } + + fun withVerbosity(verbosity: String): ImageBuilder { + return withVerbosity(Verbosity.valueOf(verbosity.uppercase())) + } + + /** + * Sets the provided OutputLineCallback for this ImageBuilder instance. + * + * @param outputLineCallback the LineCallback to be used + * @return the modified ImageBuilder instance + */ + fun withOutputLineCallback(outputLineCallback: OutputLineCallback): ImageBuilder { + this.outputLineCallback = outputLineCallback + return this + } + + /** + * Adds a custom property to the image builder. + * + * @param key the key of the custom property + * @param value the value of the custom property + * @return the modified ImageBuilder object + */ + fun withCustomProperty(key: String, value: Any): ImageBuilder { + customProperties[key] = value + return this + } + + /** + * Retrieves the start time of the image build process. + * + * @return The start time of the image build as an Instant object, or null if the start time is unknown. + */ + abstract fun getStartTime(): Instant? + + /** + * Retrieves the finish time of the image building process. + * + * @return The finish time of the image building process as an Instant, or null if the process has not finished yet. + */ + abstract fun getFinishTime(): Instant? + + + /** + * Builds an image. + * + * @return `true` if the image is successfully built, `false` otherwise. + * @throws ContainerException if there is any exception encountered during the image build process. + */ + @Throws(ContainerException::class) + abstract fun buildImage(): Boolean + + /** + * Returns a string representation of this ImageBuilder. + * @return a string representation of this ImageBuilder + */ + override fun toString(): String { + return ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append(this::imageName.name, imageName) + .append(this::namespace.name, namespace) + .append("startTime", getStartTime()) + .append("finishTime", getFinishTime()) + .append(this::registry.name, registry) + .append(this::repository.name, repository) + .append(this::isInsecureRegistry.name, isInsecureRegistry) + .append(this::dockerContextDir.name, dockerContextDir) + .append(this::tags.name, tags) + .append(this::verbosity.name, verbosity) + .append(this::customProperties.name, customProperties) + .toString() + } + + /** + * Retrieves the current state. + * + * This method returns the current state of the object. + * + * @return the current state + */ + @Synchronized + fun getState(): State { + return state + } + + /** + * Changes the state to the given new state. + * + * @param newState the new state to change to + */ + @Synchronized + protected fun changeState(newState: State) { + if (newState == state || state == State.COMPLETED || state == State.FAILED) { + return + } + + val oldState = state + state = newState + log.info("Changed state from [$oldState] to [$state]") + } + + /** + * Checks if the current state is one of the specified states. If the current state is not one of the specified states, + * an IllegalStateException is thrown with a descriptive error message. + * + * @param states the states to check against + * @throws IllegalStateException if the current state is not one of the specified states + */ + @Synchronized + protected fun requireState(vararg states: State) { + if (!states.contains(getState())) { + throw IllegalStateException("In state [${getState()}], but required state is one of [${states.joinToString()}]") + } + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/PermissionException.kt b/src/main/kotlin/no/acntech/easycontainers/PermissionException.kt new file mode 100644 index 00000000..8d8e5f3b --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/PermissionException.kt @@ -0,0 +1,17 @@ +package no.acntech.easycontainers + +/** + * PermissionException is a subclass of ContainerException that is used to represent exceptions that occur when + * there is a permission issue. + */ +class PermissionException : ContainerException { + + constructor() : super() + + constructor(message: String) : super(message) + + constructor(cause: Throwable) : super(cause) + + constructor(message: String, cause: Throwable) : super(message, cause) + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/custom/ElasticSearchContainer.kt b/src/main/kotlin/no/acntech/easycontainers/custom/ElasticSearchContainer.kt new file mode 100644 index 00000000..e938cbb8 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/custom/ElasticSearchContainer.kt @@ -0,0 +1,80 @@ +package no.acntech.easycontainers.custom + +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.text.COLON +import no.acntech.easycontainers.util.text.NEW_LINE + + +class ElasticSearchContainer( + builder: ElasticSearchContainerBuilder, +) : GenericContainer(builder) { + + class ElasticSearchContainerBuilder : GenericContainerBuilder() { + + companion object { + const val IMAGE = "docker.elastic.co/elasticsearch/elasticsearch" + } + + internal var version = ImageTag.LATEST.value + + init { + executionMode = ExecutionMode.SERVICE + withName(ContainerName.of("elasticsearch-test")) + withNamespace(Namespace.TEST) + withImage(ImageURL.of("$IMAGE$COLON${ImageTag.LATEST}")) + withEnv("discovery.type", "single-node") + withEnv("xpack.security.enabled", "false") + withEnv("xpack.security.http.ssl.enabled", "false") + withEnv("xpack.security.transport.ssl.enabled", "false") + withEnv("CLUSTER_NAME", "dev-cluster") + withEnv("NODE_NAME", "dev-node") + withEnv("ELASTIC_PASSWORD", "passwd") + withEnv("ES_JAVA_OPTS", "-Xms1024m -Xmx1024m") + withEnv("ES_DEV_MODE", "true") + withEnv("ES_LOG_LEVEL", "DEBUG") + withExposedPort(PortMappingName.HTTP, NetworkPort.of(9200)) + withExposedPort(PortMappingName.TRANSPORT, NetworkPort.of(9300)) + withIsEphemeral(true) + withOutputLineCallback { line -> println("ELASTIC-OUTPUT: $line") } + } + + fun withVersion(version: SemanticVersion): ElasticSearchContainerBuilder { + withImage(ImageURL.of("$IMAGE$COLON$version")) + return self() + } + + override fun self(): ElasticSearchContainerBuilder { + return this + } + + override fun build(): Container { + checkBuildAllowed() + + val httpPort = if (containerPlatformType == ContainerPlatformType.KUBERNETES) NetworkPort.of(30200) + else NetworkPort.of(9200) + + val transportPort = if (containerPlatformType == ContainerPlatformType.KUBERNETES) NetworkPort.of(30300) + else NetworkPort.of(9300) + + withPortMapping(NetworkPort.of(9200), httpPort) + withPortMapping(NetworkPort.of(9300), transportPort) + + return ElasticSearchContainer(this) + } + + } + + companion object { + + fun builder(): ElasticSearchContainerBuilder { + return ElasticSearchContainerBuilder() + } + + } + + init { + log.debug("ElasticSearchContainer created with builder:$NEW_LINE$builder") + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/custom/KanikoContainer.kt b/src/main/kotlin/no/acntech/easycontainers/custom/KanikoContainer.kt new file mode 100644 index 00000000..099bc7be --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/custom/KanikoContainer.kt @@ -0,0 +1,236 @@ +package no.acntech.easycontainers.custom + +import no.acntech.easycontainers.Environment.defaultRegistryCompleteURL +import no.acntech.easycontainers.Environment.k8sKanikoDataPvcName +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder.Companion.KANIKO_DATA_VOLUME_MOUNT_PATH +import no.acntech.easycontainers.docker.DockerConstants.PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.NEW_LINE +import org.apache.commons.io.FileUtils +import org.apache.commons.lang3.builder.ToStringBuilder +import org.apache.commons.lang3.builder.ToStringStyle +import java.io.File + + +class KanikoContainer( + builder: KanikoContainerBuilder, +) : GenericContainer(builder) { + + class KanikoContainerBuilder : GenericContainerBuilder() { + + internal var verbosity: Verbosity = Verbosity.INFO + + internal var imageName = ImageName.DEFAULT + + internal var registry: RegistryURL = RegistryURL.of(defaultRegistryCompleteURL.substringAfter("://")) + + internal var isInsecureRegistry: Boolean = !defaultRegistryCompleteURL.startsWith("https") + + internal var repository: RepositoryName = RepositoryName.DEFAULT + + internal val tags: MutableList = mutableListOf() + + internal var dockerContextSubDir: String = EMPTY_STRING + + internal var deleteDockerContext: Boolean = false + + companion object { + const val DEFAULT_KANIKO_IMAGE_URL = "gcr.io/kaniko-project/executor:latest" + const val KANIKO_DATA_VOLUME_MOUNT_PATH = "/mnt/kaniko-data" + + private const val DOCKERFILE_ARG = "--dockerfile=" + private const val CONTEXT_ARG = "--context=" + private const val VERBOSITY_ARG = "--verbosity=" + private const val DESTINATION_ARG = "--destination=" + } + + init { + executionMode = ExecutionMode.TASK + containerPlatformType = ContainerPlatformType.KUBERNETES + image = ImageURL.of(DEFAULT_KANIKO_IMAGE_URL) + withCustomProperty(PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY, "true") + } + + override fun self(): KanikoContainerBuilder { + return this + } + + override fun build(): Container { + checkBuildAllowed() + + withExecutionMode(ExecutionMode.TASK) + + if (tags.isEmpty()) { + tags.add(ImageTag.LATEST) + } + + if (volumes.isEmpty()) { + withVolume(VolumeName.of(k8sKanikoDataPvcName), UnixDir.of(KANIKO_DATA_VOLUME_MOUNT_PATH)) + } + + prepareArgs() + + log.debug("Creating KanikoContainer using builder:$NEW_LINE$this") + + return KanikoContainer(this) + } + + fun withImageName(imageName: String): KanikoContainerBuilder { + return withImageName(ImageName.of(imageName)) + } + + fun withImageName(imageName: ImageName): KanikoContainerBuilder { + this.imageName = imageName + return this + } + + fun withVerbosity(verbosity: String): KanikoContainerBuilder { + return withVerbosity(Verbosity.valueOf(verbosity)) + } + + fun withVerbosity(verbosity: Verbosity): KanikoContainerBuilder { + this.verbosity = verbosity + return this + } + + fun withRegistry(registry: RegistryURL): KanikoContainerBuilder { + this.registry = registry + return this + } + + fun withRegistry(registry: String): KanikoContainerBuilder { + return withRegistry(RegistryURL.of(registry)) + } + + fun withRepository(repository: String): KanikoContainerBuilder { + return withRepository(RepositoryName.of(repository)) + } + + fun withRepository(repository: RepositoryName): KanikoContainerBuilder { + this.repository = repository + return this + } + + fun withInsecureRegistry(insecure: Boolean): KanikoContainerBuilder { + this.isInsecureRegistry = insecure + return this + } + + fun withTag(tag: String): KanikoContainerBuilder { + return withTag(ImageTag.of(tag)) + } + + fun withTag(tag: ImageTag): KanikoContainerBuilder { + tags.add(tag) + return this + } + + fun withTags(tags: Set): KanikoContainerBuilder { + tags.forEach { tag -> withTag(tag) } + return this + } + + fun withDeleteDockerContext(delete: Boolean): KanikoContainerBuilder { + this.deleteDockerContext = delete + return this + } + + /** + * Add a volume for the Dockerfile and Docker context. For Docker this is a named volume, for Kubernetes this is a + * PersistentVolumeClaim name (in the test setup this name is + * 'kaniko-data-pvc'). If the name doest not end with '-pvc', both the base name and the '-pvc' suffix will be attempted + * used, i.e. Easycontainers will check the existence of both 'your-volume-name' and 'your-volume-name-pvc', in that order. + *

      + * Note that a ContainerException will be thrown (for kubernetes) if a PersistentVolumeClaim (as explained above) does not + * exist in the namespace. + */ + fun withDockerContextVolume(name: VolumeName): KanikoContainerBuilder { + withVolume(name, UnixDir.of(KANIKO_DATA_VOLUME_MOUNT_PATH)) + return this + } + + fun withDockerContextVolume(name: String): KanikoContainerBuilder { + return withDockerContextVolume(VolumeName.of(name)) + } + + fun withDockerContextVolume(volume: Volume): KanikoContainerBuilder { + require(volume.mountDir.unwrap().startsWith(KANIKO_DATA_VOLUME_MOUNT_PATH)) { + "The mount path for the Docker context volume must start with '$KANIKO_DATA_VOLUME_MOUNT_PATH'" + } + volumes.add(volume) + return this + } + + /** + * If set, the subDir will be appended to the mount path for the Docker context volume. + */ + fun withDockerContextSubDir(subDir: UnixDir): KanikoContainerBuilder { + this.dockerContextSubDir = subDir.unwrap() + return this + } + + fun withDockerContextSubDir(subDir: String): KanikoContainerBuilder { + return withDockerContextSubDir(UnixDir.of(subDir)) + } + + override fun toString(): String { + return ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .appendSuper(super.toString()) + .append("imageName", imageName) + .append("registry", registry) + .append("repository", repository) + .append("tags", tags) + .append("isInsecureRegistry", isInsecureRegistry) + .append("dockerContextSubDir", dockerContextSubDir) + .append("deleteDockerContext", deleteDockerContext) + .append("verbosity", verbosity) + .toString() + } + + private fun prepareArgs() { + val dockerContextDir = KANIKO_DATA_VOLUME_MOUNT_PATH + dockerContextSubDir + + val args = mutableListOf( + DOCKERFILE_ARG + "$dockerContextDir/Dockerfile", + CONTEXT_ARG + "dir://" + dockerContextDir, + VERBOSITY_ARG + verbosity + ) + + if (isInsecureRegistry) { + args.add("--insecure") + } + + tags.forEach { tag -> + args.add(DESTINATION_ARG + "${registry}/$repository/$imageName:$tag") + } + + withArgs(args.toList()) + + log.debug("KanikoContainer args: $args") + } + + } + + companion object { + + fun builder(): KanikoContainerBuilder { + return KanikoContainerBuilder() + } + + } + + override fun onDelete() { + if ((builder as KanikoContainerBuilder).deleteDockerContext) { + log.debug("Deleting Docker context") + val dockerContextDir = KANIKO_DATA_VOLUME_MOUNT_PATH + builder.dockerContextSubDir + FileUtils.deleteDirectory(File(dockerContextDir)) + } + } + + init { + log.debug("KanikoContainer created with builder:$NEW_LINE$builder") + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerClientFactory.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerClientFactory.kt new file mode 100644 index 00000000..6bb071df --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerClientFactory.kt @@ -0,0 +1,71 @@ +package no.acntech.easycontainers.docker + +import com.github.dockerjava.api.DockerClient +import com.github.dockerjava.core.DefaultDockerClientConfig +import com.github.dockerjava.core.DockerClientBuilder +import com.github.dockerjava.okhttp.OkDockerHttpClient +import com.github.dockerjava.transport.DockerHttpClient +import no.acntech.easycontainers.Environment +import org.slf4j.LoggerFactory + +/** + * The DockerClientFactory class is responsible for creating a DockerClient instance. + * It provides a method to create a default DockerClient using the Docker host configuration. + */ +object DockerClientFactory { + + private val log = LoggerFactory.getLogger(DockerClientFactory::class.java) + + /** + * This method creates a default Docker client. + * + * @return The default DockerClient instance. + */ + fun createDefaultClient(): DockerClient { + val dockerHost = getDockerHost() + + val dockerClientConfig = DefaultDockerClientConfig.createDefaultConfigBuilder() + .withDockerHost(dockerHost) + .build() + + val httpClient: DockerHttpClient = OkDockerHttpClient.Builder() + .dockerHost(dockerClientConfig.dockerHost) + .sslConfig(dockerClientConfig.sslConfig) + .connectTimeout(10_000) // in milliseconds + .readTimeout(60_000) // in milliseconds + .build() + + return DockerClientBuilder.getInstance(dockerClientConfig) + .withDockerHttpClient(httpClient) + .build().also { + log.info("Docker client created: $it") + } + } + + /** + * Retrieves the Docker host from environment variables or system properties. + * + * @return The Docker host as a String, or null if not found. + */ + private fun getDockerHost(): String { + return Environment.defaultDockerDaemonEndpoint + +// var dockerHost = System.getenv(DockerConstants.ENV_DOCKER_DAEMON_ENDPOINT) +// +// if (dockerHost.isEmpty()) { +// dockerHost = System.getProperty(Environment.PROP_DOCKER_DAEMON_ENDPOINT, EMPTY_STRING) +// } +// +// if (dockerHost.isNotEmpty()) { +// log.debug("Using Docker host from environment/system-property variable: $dockerHost") +// if (!dockerHost.matches(".*:\\d+".toRegex())) { // host:port +// dockerHost += ":${DockerConstants.DEFAULT_DOCKER_TCP_INSECURE_PORT}" +// } +// } +// +// return dockerHost.also { +// log.debug("Using Docker host: $dockerHost") +// } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerConstants.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerConstants.kt new file mode 100644 index 00000000..1adf4a54 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerConstants.kt @@ -0,0 +1,20 @@ +package no.acntech.easycontainers.docker + +object DockerConstants { + + const val PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY = "enableNativeDockerEntrypointStrategy" + + const val ENV_DOCKER_DAEMON_ENDPOINT = "DOCKER_HOST" + + const val NETWORK_MODE_BRIDGE = "bridge" + const val NETWORK_MODE_HOST = "host" + const val NETWORK_MODE_NONE = "none" + const val NETWORK_NODE_CONTAINER = "container:" + + const val DEFAULT_BRIDGE_NETWORK = "bridge" + const val DEFAULT_DOCKER_API_VERSION = "1.45" + const val DEFAULT_DOCKER_DAEMON_ENDPOINT = "unix:///var/run/docker.sock" + const val DEFAULT_DOCKER_TCP_INSECURE_PORT = 2375 + const val DEFAULT_DOCKER_TCP_SECURE_PORT = 2376 + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerContainerState.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerContainerState.kt new file mode 100644 index 00000000..22a2d03d --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerContainerState.kt @@ -0,0 +1,14 @@ +package no.acntech.easycontainers.docker + +/** + * Represents the state of a Docker container. + */ +internal enum class DockerContainerState { + CREATED, + RESTARTING, + RUNNING, + REMOVING, + PAUSED, + EXITED, + DEAD +} diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerImageBuilder.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerImageBuilder.kt new file mode 100644 index 00000000..c54e41e7 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerImageBuilder.kt @@ -0,0 +1,171 @@ +package no.acntech.easycontainers.docker + +import com.github.dockerjava.api.DockerClient +import com.github.dockerjava.api.async.ResultCallback +import com.github.dockerjava.api.command.BuildImageResultCallback +import com.github.dockerjava.api.exception.DockerClientException +import com.github.dockerjava.api.exception.DockerException +import com.github.dockerjava.api.model.BuildResponseItem +import com.github.dockerjava.api.model.PushResponseItem +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.ImageBuilder +import no.acntech.easycontainers.model.ImageTag +import no.acntech.easycontainers.util.lang.prettyPrintMe +import no.acntech.easycontainers.util.text.NEW_LINE +import java.nio.file.Path +import java.time.Duration +import java.time.Instant + +/** + * An implementation of [ImageBuilder] that builds and pushes a Docker image using an accessible Docker daemon either + * locally or remotely. + *

      + * The presence of the environment variable `DOCKER_HOST` will be used to determine the Docker host to use. If not set, + * a local daemon is assumed. + */ +internal class DockerImageBuilder( + private val dockerClient: DockerClient = DockerClientFactory.createDefaultClient(), +) : ImageBuilder() { + + private var startTime: Instant? = null + + private var finishTime: Instant? = null + + override fun getStartTime(): Instant? { + return startTime + } + + override fun getFinishTime(): Instant? { + return finishTime + } + + override fun buildImage(): Boolean { + // Preparations for image building + requireState(State.INITIALIZED) + + if (tags.isEmpty()) { + tags.add(ImageTag.LATEST) + } + + startTime = Instant.now() + + changeState(State.IN_PROGRESS) + log.info("Building Docker image using Docker client: {}", dockerClient) + log.info("Using build config:\n $this") + + val dockerfile = dockerContextDir.resolve("Dockerfile") + val tags = createImageTags() + + // Building and tagging the Docker image + val id = buildAndTagImage(dockerfile, tags) + + log.debug("Built image ID: $id") + + // Pushing the Docker image + pushImage(tags) + if (getState() != State.FAILED) { + changeState(State.COMPLETED) + } + + finishTime = Instant.now() + + if (getState() == State.COMPLETED) { + val duration = Duration.between(startTime, finishTime) + log.info( + "Image build and push completed successfully in" + + " ${duration.toMinutes()} minutes and ${duration.toSecondsPart()} seconds" + ) + } else { + log.error("Image build and push failed") + } + + return getState() == State.COMPLETED + } + + private fun createImageTags(): Set { + return tags.map { tag -> "${registry}/$repository/$imageName:$tag" }.toSet() + } + + private fun buildAndTagImage(dockerfile: Path, tags: Set): String? { + return try { + dockerClient.buildImageCmd() + .withNoCache(true) + .withDockerfile(dockerfile.toFile()) + .withBaseDirectory(dockerContextDir.toFile()) + .withLabels(labels.entries.associate { (key, value) -> + key.unwrap() to value.unwrap() + }) + .withTags(tags) + .exec(object : BuildImageResultCallback() { + + override fun onNext(item: BuildResponseItem) { + log.info("Build response item (progress): {}", item.progressDetail) + + // Stringify the BuildResponseItem with all its properties + log.info("BuildResponseItem: " + item.prettyPrintMe()) + + if (item.isErrorIndicated) { + log.error("Error building image: {}", item.errorDetail?.message) + changeState(State.FAILED) + } + + if (item.isBuildSuccessIndicated) { + log.info("Build success indicated") + } + } + + }).awaitImageId() + } catch (e: Exception) { + when (e) { + + is DockerException, is DockerClientException -> { + // This happens every time, even when the build is successful, hence we must ignore it + log.error("A docker error occurred during build: {} - IGNORING", e.message, e) + } + + else -> { + log.error("An error occurred during docker build, raising ContainerException", e) + throw ContainerException(e) + } + } + return null + } + } + + private fun pushImage(tags: Set) { + tags.forEach { tag -> + log.info("Pushing image: $tag") + dockerClient.pushImageCmd(tag) + .exec(object : ResultCallback.Adapter() { + + override fun onNext(item: PushResponseItem) { + log.info("Push response item: {}", item.toString()) + } + + override fun onComplete() { + super.onComplete() + log.info("Completed pushing image: $tag") + changeState(State.COMPLETED) + } + + override fun onError(throwable: Throwable) { + super.onError(throwable) + log.error("Error pushing image: $tag", throwable) + if (getState() != State.COMPLETED) + changeState(State.FAILED) + } + + }).awaitCompletion() + } + } + + private fun listContainers() { + val containers = dockerClient.listContainersCmd() + .withShowSize(true) + .withShowAll(false) + .exec() + + log.info("All containers:$NEW_LINE${containers.joinToString(NEW_LINE)}") + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerRegistryUtils.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerRegistryUtils.kt new file mode 100644 index 00000000..a6cc03bd --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerRegistryUtils.kt @@ -0,0 +1,120 @@ +package no.acntech.easycontainers.docker + +import khttp.delete +import khttp.get +import org.json.JSONArray +import org.slf4j.LoggerFactory + +/** + * This object provides utility methods for interacting with a Docker registry. + */ +object DockerRegistryUtils { + + private val log = LoggerFactory.getLogger(DockerRegistryUtils::class.java) + + /** + * Retrieves the digest of a Docker image from a specified registry using the provided image name and tag. + * + * @param registryUrl The URL of the Docker registry. + * @param imageName The name of the Docker image. + * @param tag The tag of the Docker image. + * @return The digest of the Docker image, or null if the operation fails or the digest is missing. + */ + fun getImageDigest(registryUrl: String, imageName: String, tag: String): String? { + val response = get( + url = "$registryUrl/v2/$imageName/manifests/$tag", + headers = mapOf("Accept" to "application/vnd.docker.distribution.manifest.v2+json") + ) + + if (!response.statusCode.isSuccess()) { + log.warn("Failed to get digest for image '$imageName:$tag' at '$registryUrl': ${response.text}") + return null + } + + val digestHeader = response.headers["Docker-Content-Digest"] + if (digestHeader.isNullOrBlank()) { + log.warn("Missing or empty 'Docker-Content-Digest' header.") + return null + } + + val digestParts = digestHeader.split(':') + if (digestParts.size != 2) { + log.warn("Invalid 'Docker-Content-Digest' header.") + return null + } + + // We only need the digest part, which is the second element in the array + return digestParts[1] + } + + /** + * Deletes an image from a registry. + * + * @param registryUrl The URL of the registry. + * @param imageName The name of the image. + * @param digest The digest of the image (optional). If provided, the image with the specified digest will be deleted. + * @param tags The list of tags associated with the image (optional). If no digest is provided, all images with the specified tags will be deleted. + */ + fun deleteImage(registryUrl: String, imageName: String, digest: String? = null, tags: List = emptyList()) { + var actualTags: List = tags + if (digest != null) { + internalDeleteImage(registryUrl, imageName, digest) + } else if (actualTags.isEmpty()) { + actualTags = getAllImageTags(registryUrl, imageName) + } + + actualTags.forEach { tag -> + getImageDigest(registryUrl, imageName, tag)?.let { tagDigest -> + internalDeleteImage(registryUrl, imageName, tagDigest) + } + } + } + + /** + * Retrieves all image tags for a given registry URL and image name. + * + * @param registryUrl The URL of the registry. + * @param imageName The name of the image. + * @return The list of image tags as strings. + */ + fun getAllImageTags(registryUrl: String, imageName: String): List { + val response = get("$registryUrl/v2/$imageName/tags/list") + if (!response.statusCode.isSuccess()) { + log.warn("Failed to list tags for image '$imageName': ${response.text}") + return emptyList() + } + + val jsonResponse = JSONArray(response.jsonObject.getJSONArray("tags")) + return jsonResponse.map { it.toString() } + } + + private fun internalDeleteImage(registryUrl: String, imageName: String, digest: String): Boolean { + if (registryUrl.isBlank() || imageName.isBlank() || digest.isBlank()) { + log.warn("Invalid parameters for deleting image. Registry URL: '$registryUrl', Image Name: '$imageName', Digest: '$digest'") + return false + } + + val deleteUrl = buildDeleteImageUrl(registryUrl, imageName, digest) + return try { + val response = delete(deleteUrl) + if (response.statusCode.isSuccess()) { + log.info("Image '$imageName' with digest '$digest' deleted successfully from '$registryUrl'.") + true + } else { + log.warn("Failed to delete image '$imageName' with digest '$digest' from '$registryUrl': ${response.text}") + false + } + } catch (e: Exception) { + log.error("Exception occurred while deleting image '$imageName' with digest '$digest' from '$registryUrl'", e) + false + } + } + + private fun buildDeleteImageUrl(registryUrl: String, imageName: String, digest: String): String { + return "$registryUrl/v2/$imageName/manifests/$digest" + } + + private fun Int.isSuccess() = this in 200..299 +} + + diff --git a/src/main/kotlin/no/acntech/easycontainers/docker/DockerRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/docker/DockerRuntime.kt new file mode 100644 index 00000000..4dfc9e02 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/docker/DockerRuntime.kt @@ -0,0 +1,909 @@ +package no.acntech.easycontainers.docker + +import com.github.dockerjava.api.DockerClient +import com.github.dockerjava.api.async.ResultCallback +import com.github.dockerjava.api.command.CreateContainerCmd +import com.github.dockerjava.api.command.InspectContainerResponse +import com.github.dockerjava.api.command.PullImageResultCallback +import com.github.dockerjava.api.command.WaitContainerResultCallback +import com.github.dockerjava.api.exception.DockerClientException +import com.github.dockerjava.api.exception.DockerException +import com.github.dockerjava.api.model.* +import com.github.dockerjava.api.model.Volume +import com.google.common.io.CountingInputStream +import no.acntech.easycontainers.AbstractContainerRuntime +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.docker.DockerConstants.NETWORK_MODE_BRIDGE +import no.acntech.easycontainers.docker.DockerConstants.NETWORK_MODE_HOST +import no.acntech.easycontainers.docker.DockerConstants.NETWORK_MODE_NONE +import no.acntech.easycontainers.docker.DockerConstants.NETWORK_NODE_CONTAINER +import no.acntech.easycontainers.docker.DockerConstants.PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.model.Container +import no.acntech.easycontainers.util.io.FileUtils +import no.acntech.easycontainers.util.lang.asStringMap +import no.acntech.easycontainers.util.lang.guardedExecution +import no.acntech.easycontainers.util.platform.PlatformUtils +import no.acntech.easycontainers.util.text.* +import org.awaitility.Awaitility.await +import org.awaitility.core.ConditionTimeoutException +import java.io.* +import java.net.InetAddress +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.time.Duration +import java.time.Instant +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference +import kotlin.io.path.exists +import kotlin.io.path.isDirectory +import kotlin.io.path.isRegularFile + +/** + * DockerRuntime class provides functionality for managing Docker containers. + * It allows starting, stopping, and deleting containers, executing commands inside containers, + * transferring files to and from containers, and retrieving container information. + * + * @property dockerClient The Docker client instance used for communicating with the Docker daemon. + * @property containerId The ID of the Docker container. + * @property exitCode The exit code of the last executed command in the Docker container. + * @property ipAddress The IP address of the Docker container. + * @property host The host where the Docker container is running. + * @property networkName The name of the network the Docker container is connected to. + * @property startedAt The timestamp when the Docker container was started. + * @property finishedAt The timestamp when the Docker container finished its execution. + */ +internal class DockerRuntime( + container: GenericContainer, + private val dockerClient: DockerClient = DockerClientFactory.createDefaultClient(), +) : AbstractContainerRuntime(container) { + + private inner class EventSubscriber : Runnable { + override fun run() { + + val callback = object : ResultCallback.Adapter() { + + override fun onNext(item: Frame) { + val line = item.payload.decodeToString() + log.trace("Container '${getDisplayName()}' output: $line") + container.getOutputLineCallback().onLine(line) + } + + override fun onError(throwable: Throwable) { + log.warn("Container '${getDisplayName()}' output error", throwable) + container.changeState(Container.State.FAILED) + } + + override fun onComplete() { + try { + log.info("Container '${getDisplayName()}' output complete") + + guardedExecution( + block = { + val containerInfo = dockerClient.inspectContainerCmd(containerId.get()).exec() + setFinishedTime(containerInfo) + setExitCode(containerInfo) + log.info("Container '${getDisplayName()}' finished at $finishedAt with exit code: $exitCode") + }, onError = { + log.warn("Error '${it.message}' inspecting container '${getDisplayName()}': ${it.message}", it) + container.changeState(Container.State.FAILED) + } + ) + + } finally { + container.changeState(Container.State.STOPPED) + + if (container.isEphemeral()) { + guardedExecution({ cleanUpResources() }) + container.changeState(Container.State.DELETED) + } + } + } + + } + + dockerClient.logContainerCmd(containerId.get()) + .withStdOut(true) + .withStdErr(true) + .withFollowStream(true) + .withTailAll() + .exec(callback) + .awaitCompletion() + } + } + + private val containerId: AtomicReference = AtomicReference() + + private var _exitCode: AtomicReference = AtomicReference() + private var exitCode: Int? + get() = _exitCode.get() + set(value) { + if (value != null) { + _exitCode.compareAndSet(null, value) + } + } + + private var _finishedAt: AtomicReference = AtomicReference() + private var finishedAt: Instant? + get() = _finishedAt.get() + set(value) { + if (value != null) { + _finishedAt.compareAndSet(null, value) + } + } + + private var ipAddress: InetAddress? = null + + private var host: Host? = null + + private var networkName: NetworkName? = null + + private var startedAt: Instant? = null + + init { + log.debug("DockerRuntime using container builder:$NEW_LINE${container.builder}") + } + + override fun getType(): ContainerPlatformType { + return ContainerPlatformType.DOCKER + } + + /** + * Retrieves the container ID of the Docker container if it has been started, otherwise the container name. + */ + override fun getName(): ContainerName { + return containerId.get()?.run { ContainerName.of(this) } ?: container.getName() + } + + override fun start() { + container.changeState(Container.State.INITIALIZING, Container.State.UNINITIATED) + pullImage() + createAndStartContainer() + GENERAL_EXECUTOR_SERVICE.submit(EventSubscriber()) + super.start() + container.changeState(Container.State.RUNNING, Container.State.INITIALIZING) + } + + override fun stop() { + if (container.getState() == Container.State.STOPPED || + container.getState() == Container.State.TERMINATING || + container.getState() == Container.State.DELETED + ) { + log.debug("Container is already stopped: ${getDisplayName()}") + return + } + + container.changeState(Container.State.TERMINATING, Container.State.RUNNING) + + val callback = object : WaitContainerResultCallback() { + + override fun onComplete() { + super.onComplete() + log.debug("Callback: Container '${getDisplayName()}' has been stopped.") + } + } + + guardedExecution( + { + dockerClient.stopContainerCmd(containerId.get()).exec() + dockerClient.waitContainerCmd(containerId.get()).exec(callback).awaitCompletion().also { + log.info("Container successfully stopped: ${getDisplayName()}") + } + finishUp() + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message} stopping (Docker) container: ${getDisplayName()}" + log.warn(msg) + throw ContainerException(msg, it) + }, + finallyBlock = { + super.stop() + container.changeState(Container.State.STOPPED) + } + ) + } + + override fun kill() { + container.changeState(Container.State.TERMINATING, Container.State.RUNNING) + + val callback = object : WaitContainerResultCallback() { + + override fun onComplete() { + super.onComplete() + log.debug("Callback: Container '${getDisplayName()}' has been killed.") + } + + } + + guardedExecution( + { + dockerClient.killContainerCmd(containerId.get()).exec() + dockerClient.waitContainerCmd(containerId.get()).exec(callback).awaitCompletion().also { + log.info("Container successfully killed: ${getDisplayName()}") + } + finishUp() + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message} killing (Docker) container: ${getDisplayName()}" + log.warn(msg) + container.changeState(Container.State.FAILED) + throw ContainerException(msg, it) + } + ) + + container.changeState(Container.State.STOPPED) + } + + override fun delete(force: Boolean) { + if (container.getState() == Container.State.DELETED) { + log.debug("Container is already deleted: ${getDisplayName()}") + return + } + + super.delete(force) + + if (container.getState() == Container.State.RUNNING) { + kill() + } + + if (!force) { + container.requireOneOfStates(Container.State.STOPPED, Container.State.FAILED) + } + + if (container.isEphemeral()) { + log.debug("Container is ephemeral, hence already removed: ${getDisplayName()}") + cleanUpResources() + container.changeState(Container.State.DELETED) + + } else { + log.info("Removing Docker container: ${getDisplayName()}") + + guardedExecution( + { + dockerClient.removeContainerCmd(containerId.get()) +// .withRemoveVolumes(true) + .withForce(true) + .exec() + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' deleting container: ${getDisplayName()}" + log.warn(msg) + throw ContainerException(msg, it) + }, + finallyBlock = { cleanUpResources() } + ) + + container.changeState(Container.State.DELETED) + } + } + + override fun execute( + executable: Executable, + args: Args?, + useTty: Boolean, + workingDir: UnixDir?, + input: InputStream?, + output: OutputStream, + waitTimeValue: Long?, + waitTimeUnit: TimeUnit?, + ): Pair { + return internalExecute( + listOf(executable.value) + (args?.toStringList() ?: emptyList()), + workingDir?.value, + useTty, + input, + output, + waitTimeValue, + waitTimeUnit, + ) + } + + override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long { + require(localFile.exists()) { "Local file '$localFile' does not exist" } + require(localFile.isRegularFile()) { "Local path '$localFile' is not a file" } + + container.requireOneOfStates(Container.State.RUNNING) + + // Check if remoteDir exists, if not create it + createContainerDirIfNotExists(remoteDir) + + val tarFile = FileUtils.tarFile(localFile, remoteFilename ?: localFile.fileName.toString()) + val inputStream = FileInputStream(tarFile) + + guardedExecution( + { + dockerClient.copyArchiveToContainerCmd(containerId.get()) + .withRemotePath(remoteDir.value) + .withTarInputStream(inputStream) + .exec() + + log.info("File '${localFile.fileName}' uploaded to container '${getDisplayName()}' in directory '${remoteDir.value}'") + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' putting file: ${localFile.fileName} to container: ${getDisplayName()}" + log.warn(msg) + throw ContainerException(msg, it) + }, + finallyBlock = { + guardedExecution({ inputStream.close() }) + guardedExecution({ tarFile.delete() }) + } + ) + return localFile.toFile().length() + } + + override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path { + val tempTarFile = File.createTempFile("temp", ".tar") + + val remoteFilePath = "$remoteDir/$remoteFilename" + + guardedExecution( + { + dockerClient + .copyArchiveFromContainerCmd(containerId.get(), remoteFilePath) + .exec() + .use { responseStream -> + FileOutputStream(tempTarFile).use { outputStream -> + responseStream.transferTo(outputStream) + } + } + + val targetPath = determineLocalPath(localPath, remoteFilename) + + // Untar the tempTarFile to the targetPath + FileUtils.untarFile(tempTarFile, targetPath) + + return targetPath.also { + log.info("File '$remoteDir/$remoteFilename' successfully downloaded to $it") + } + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' getting file '$remoteDir/$remoteFilename' from container' ${getDisplayName()}'" + log.warn(msg) + throw ContainerException(msg, it) + }, + finallyBlock = { guardedExecution({ tempTarFile.delete() }) } + ) + + return Paths.get(EMPTY_STRING) // This is never reached, but the compiler doesn't know that + } + + override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long { + require(localDir.exists() && localDir.isDirectory()) { "Local directory '$localDir' does not exist" } + container.requireOneOfStates(Container.State.RUNNING) + + createContainerDirIfNotExists(remoteDir) + + val tarInput = CountingInputStream(FileUtils.tar(localDir, includeParentDir = true)) + + guardedExecution( + { + dockerClient.copyArchiveToContainerCmd(containerId.get()) + .withRemotePath(remoteDir.value) + .withTarInputStream(tarInput) + .exec() + log.info("Directory'$localDir' uploaded to container '${getDisplayName()} in directory '${remoteDir.value}'") + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' putting directory: $localDir to container: ${getDisplayName()}" + log.warn(msg) + throw ContainerException(msg, it) + }) + + return tarInput.count + } + + override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair> { + require(localDir.isDirectory()) { "Local directory '$localDir' does not exist" } + + guardedExecution( + { + val tarInput: InputStream = dockerClient + .copyArchiveFromContainerCmd(containerId.get(), remoteDir.value) + .exec() + + return FileUtils.untar(tarInput, localDir).also { + log.info("Directory '$remoteDir' downloaded to '$localDir' with files: ${it.second}") + } + }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' getting directory '$remoteDir' from container' ${getDisplayName()}'" + log.warn(msg) + throw ContainerException(msg, it) + } + ) + + return Paths.get(EMPTY_STRING) to emptyList() // This is never reached, but the compiler doesn't know that + } + + override fun getDuration(): Duration? { + return this.startedAt?.let { start -> + if (this.finishedAt == null) { + setFinishedTime(inspectContainer()) + } + val end = this.finishedAt ?: Instant.now() + Duration.between(start, end) + } + } + + override fun getExitCode(): Int? { + if (_exitCode.get() == null && containerId.get() != null && !container.isEphemeral()) { + val containerInfo = dockerClient.inspectContainerCmd(containerId.get()).exec() + setExitCode(containerInfo) + } + return exitCode + } + + override fun getHost(): Host? { + return host + } + + override fun getIpAddress(): InetAddress? { + return ipAddress + } + + private fun pullImage() { + guardedExecution({ + dockerClient.pullImageCmd(container.getImage().toFQDN()) + .exec(object : PullImageResultCallback() { + + override fun onNext(item: PullResponseItem?) { + log.info("Pulling image: ${item?.status}") + super.onNext(item) + } + + }).awaitCompletion() + + log.info("Image pulled successfully: ${container.getImage()}") + + }, listOf(DockerException::class, DockerClientException::class), { + val msg = "Error '${it.message}' pulling image: ${container.getImage()}" + log.warn(msg) + throw ContainerException(msg, it) + }) + } + + private fun createAndStartContainer() { + guardedExecution( + { + val image = container.getImage().toFQDN() + val hostConfig = prepareHostConfig() + + configureNetwork(hostConfig) + + val containerCmd = createContainerCommand(image, hostConfig).also { + log.debug("containerCmd created:$NEW_LINE${it.asStringMap()}") + } + + containerCmd.exec().id.also { + log.debug("Container created: ${getDisplayName()}") + containerId.set(it) + } + + startContainer() + + val containerInfo = inspectContainer() + + // Set container properties + setContainerIpAddress(containerInfo) + setStartTime(containerInfo) + setContainerHostName(containerInfo) + + }, + listOf(DockerException::class, DockerClientException::class, ConditionTimeoutException::class), + { + val msg = "Error '${it}' creating/starting Docker container: ${getDisplayName()}" + log.warn(msg) + container.changeState(Container.State.FAILED) + throw ContainerException(msg, it) + } + ) + } + + private fun startContainer() { + log.info("Starting Docker container: ${getDisplayName()}") + dockerClient.startContainerCmd(containerId.get()).exec() + + log.debug("Waiting for the Docker container to reach the RUNNING state: ${getDisplayName()}") + await() + .atMost(60, TimeUnit.SECONDS) + .pollInterval(1, TimeUnit.SECONDS) + .until { + val inspection = inspectContainer() + val dockerStateVal = inspection.state.status.also { + log.debug("Docker container state.status: $it") + } + + if (dockerStateVal == null) { + false + } else { + val dockerState = DockerContainerState.valueOf(dockerStateVal.uppercase()) + + when (dockerState) { + DockerContainerState.RUNNING -> true + DockerContainerState.CREATED, DockerContainerState.RESTARTING, DockerContainerState.PAUSED -> false + DockerContainerState.EXITED -> throw ContainerException("Container '${getDisplayName()}' has exited") + DockerContainerState.DEAD -> throw ContainerException("Container '${getDisplayName()}' is dead") + DockerContainerState.REMOVING -> throw ContainerException("Container '${getDisplayName()}' is being removed") + } + } + } + } + + private fun inspectContainer(): InspectContainerResponse = + dockerClient.inspectContainerCmd(containerId.get()).exec().also { + log.debug("Container inspected: ${getDisplayName()}: $it") + } + + private fun prepareHostConfig(): HostConfig { + return HostConfig.newHostConfig().apply { + withAutoRemove(container.isEphemeral()).also { + log.info("Using auto-remove: ${container.isEphemeral()}") + } + } + } + + private fun finishUp() { + if (!container.isEphemeral()) { + val info = inspectContainer() + setFinishedTime(info) + setExitCode(info) + } else { + finishedAt = Instant.now() + } + } + + private fun determineLocalPath(localPath: Path?, remoteFilename: String): Path = when { + localPath == null -> Files.createTempDirectory("docker-file-transfer-").resolve(remoteFilename) + Files.isDirectory(localPath) -> localPath.resolve(remoteFilename) + else -> localPath + } + + private fun getActualHostDir(path: Path): String { + return PlatformUtils.convertToDockerPath(path) + } + + private fun getExistingVolumeNames(): Set { + val volumesResponse = dockerClient.listVolumesCmd().exec() + return volumesResponse.volumes.map { it.name }.toSet() + } + + private fun getDockerPortBindings(): List { + return container.getPortMappings().map { (containerPort, hostPort) -> + val dockerExposedPort = ExposedPort.tcp(containerPort.value) // Exported port from the container + val dockerHostPort = Ports.Binding.bindPort(hostPort.value) // The binding to the host + PortBinding(dockerHostPort, dockerExposedPort) + } + } + + private fun setContainerIpAddress(containerInfo: InspectContainerResponse) { + val ipAddressVal = containerInfo.networkSettings.networks[DockerConstants.DEFAULT_BRIDGE_NETWORK]?.ipAddress + ipAddressVal?.let { ipAddress = InetAddress.getByName(it) } + } + + private fun setContainerHostName(containerInfo: InspectContainerResponse) { + containerInfo.config.hostName?.let { + host = Host.of(it) + } + } + + private fun setStartTime(containerInfo: InspectContainerResponse) { + containerInfo.state.startedAt?.let { + startedAt = Instant.parse(it) + } + } + + private fun setFinishedTime(containerInfo: InspectContainerResponse) { + containerInfo.state.finishedAt?.let { time -> + finishedAt = Instant.parse(time) + } + } + + private fun setExitCode(containerInfo: InspectContainerResponse) { + exitCode = containerInfo.state.exitCodeLong?.toInt() + } + + private fun createContainerCommand(image: String, hostConfig: HostConfig): CreateContainerCmd { + return dockerClient.createContainerCmd(image).apply { + withName(container.getName().unwrap()) + withEnv(container.getEnv().toMap().entries.map { "${it.key.unwrap()}=${it.value.unwrap()}" }) + withLabels(container.getLabels().map { (key, value) -> key.unwrap() to value.unwrap() }.toMap()) + withExposedPorts(container.getExposedPorts().map { ExposedPort.tcp(it.value) }) + configurePortBindings(hostConfig) + configureVolumes(this, hostConfig) + configureCommandAndArgs(this) + withHostConfig(hostConfig) + + // We want to mimic the behaviour of k8s here, so we override the entrypoint if the command or args are set, + // unless explicitly told not to with the enableNativeDockerEntrypointStrategy property + if (container.getCommand() != null || (container.getArgs() != null && container.getArgs()!!.args.isNotEmpty())) { + val property = container.builder.customProperties[PROP_ENABLE_NATIVE_DOCKER_ENTRYPOINT_STRATEGY] + val enableNativeStrategy = property is Boolean && property || + property is String && property.equals("true", ignoreCase = true) + if (!enableNativeStrategy) { + withEntrypoint("/bin/sh", "-c") + } + } + } + } + + private fun createDockerVolumes(hostConfig: HostConfig): List { + val volumes = container.getVolumes() + val volumeMap = volumes.associateWith { + Volume(it.mountDir.value) + } + val dockerVolumeNames = getExistingVolumeNames() + + val volumeBinds = volumes + .filter { !it.memoryBacked } + .map { volume -> createBind(volume, volumeMap[volume], dockerVolumeNames) } + + val fileBinds = container.builder.containerFiles.map { (name, file) -> + createContainerFileBind(file) + } + + val tmpfsMounts = volumes + .filter { it.memoryBacked } + .map { volume -> createTmpfsMount(volume) } + + configureHostConfigVolumes(hostConfig, volumeBinds + fileBinds, tmpfsMounts) + + return volumeMap.values.toList() + } + + private fun createContainerFileBind(containerFile: ContainerFile): Bind { + val hostFile = containerFile.hostFile ?: Files.createTempFile(containerFile.name.value, null) + + // If content is not null, write content to this file + containerFile.content?.let { content -> + hostFile.toFile().writeText(content) + } + + val actualBindPath = PlatformUtils.convertToDockerPath(hostFile) + + // Get the complete path including the filename as the mount point + val mountPath = "${containerFile.mountPath}$FORWARD_SLASH${containerFile.name}" + + // Finally, create a Docker bind + val bind = Bind(actualBindPath, Volume(mountPath)) + + return bind.also { + log.info( + "Using host file '${actualBindPath}' for container file '${containerFile.name}'" + + " with mount-path '$mountPath'" + ) + } + } + + private fun createBind( + volume: no.acntech.easycontainers.model.Volume, + dockerVolume: Volume?, + dockerVolumeNames: Set, + ): Bind { + val volumeName = volume.name.value + + return if (dockerVolumeNames.contains(volumeName)) { + log.info("Using existing named Docker volume '$volumeName' with mount-path '${volume.mountDir}'") + Bind(volumeName, dockerVolume) + + } else { + log.info("Using hostDir '${volume.hostDir}' for volume '$volumeName'") + + volume.hostDir?.let { hostDir -> + val actualHostDir = getActualHostDir(hostDir) + Bind(actualHostDir, dockerVolume) + } ?: throw ContainerException("Volume '$volumeName' must have a host-dir") + } + } + + private fun createTmpfsMount(volume: no.acntech.easycontainers.model.Volume): Mount { + val volumeName = volume.name.value + val mountPath = volume.mountDir.value + val memory = volume.memory + log.info("Using memory-backed volume '$volumeName' with mount-path '$mountPath' and memory '$memory'") + return Mount() + .withType(MountType.TMPFS) + .withTarget(mountPath) + .apply { memory?.let { withTmpfsOptions(TmpfsOptions().withSizeBytes(memory.bytes.longValueExact())) } } + } + + private fun createContainerDirIfNotExists(remoteDir: UnixDir) = internalExecute(listOf("mkdir", "-p", remoteDir.value)) + + private fun configureNetwork(hostConfig: HostConfig) { + container.getNetworkName()?.let { networkName -> + val networkModeType = networkName.value.also { + log.info("Using network-mode: $it") + } + when (networkModeType) { + NETWORK_MODE_BRIDGE, NETWORK_MODE_HOST, NETWORK_MODE_NONE -> { + hostConfig.withNetworkMode(networkModeType) + } + + else -> { + configureCustomNetworkMode(networkModeType, hostConfig) + } + } + } + } + + private fun configureCustomNetworkMode(networkMode: String, hostConfig: HostConfig) { + when { + networkMode.startsWith(NETWORK_NODE_CONTAINER) -> { + val containerId = getContainerIdByName(networkMode.substringAfter(NETWORK_NODE_CONTAINER)) + hostConfig.withNetworkMode("container:$containerId") + } + + else -> { + val networkId = determineNetworkId(networkMode) + hostConfig.withNetworkMode(networkId) + } + } + } + + private fun getContainerIdByName(containerName: String): String { + val container = listContainersByName(containerName).firstOrNull() + return container?.id ?: throw ContainerException("Container '$containerName' not found") + } + + private fun listContainersByName(name: String) = dockerClient.listContainersCmd().withNameFilter(listOf(name)).exec() + + private fun determineNetworkId(networkMode: String): String { + val networkList = dockerClient.listNetworksCmd().withNameFilter(networkMode).exec() + return if (networkList.isEmpty()) { + this.networkName = networkName // Must be removed if the container is ephimeral + createNetworkWithMode(networkMode) + } else { + networkList[0].id + } + } + + private fun createNetworkWithMode(networkMode: String) = + dockerClient.createNetworkCmd().withName(networkMode).withDriver("bridge").exec().id.also { + log.info("Created network '$networkMode' with ID '$it'") + } + + private fun configurePortBindings(hostConfig: HostConfig) { + if (container.getPortMappings().isNotEmpty()) { + val portBindings = getDockerPortBindings() + hostConfig.withPortBindings(portBindings) + } else { + log.debug("No ports to bind for container: ${getDisplayName()}") + } + } + + private fun configureVolumes(cmd: CreateContainerCmd, hostConfig: HostConfig) { + if (container.getVolumes().isNotEmpty() || container.builder.containerFiles.isNotEmpty()) { + val volumes = createDockerVolumes(hostConfig) + cmd.withVolumes(*volumes.toTypedArray()) + } else { + log.debug("No volumes to bind") + } + } + + private fun configureHostConfigVolumes(hostConfig: HostConfig, binds: List, tmpfsMounts: List): HostConfig { + return hostConfig + + // Volume binds + .withBinds(*binds.toTypedArray()) + + // Tmpfs mounts + .apply { + if (tmpfsMounts.isNotEmpty()) { + log.info("Setting tmpfs mounts: $tmpfsMounts") + withMounts(tmpfsMounts) + } + } + } + + private fun configureCommandAndArgs(cmd: CreateContainerCmd) { + val commandParts = mutableListOf().apply { + container.getCommand()?.let { addAll(it.value.splitOnWhites()) } + container.getArgs()?.let { addAll(it.toStringList()) } + } + cmd.withCmd(commandParts) + log.info("Using container command: $commandParts") + } + + private fun cleanUpResources() { + networkName?.let { networkName -> + log.info("Removing network '${networkName.value}'") + guardedExecution( + { dockerClient.removeNetworkCmd(networkName.value).exec() }, + listOf(DockerException::class, DockerClientException::class), + { + val msg = "Error '${it.message}' removing network from: ${getDisplayName()}" + log.warn(msg) + throw ContainerException(msg, it) + } + ) + } + } + + private fun internalExecute( + command: List, + workingDir: String? = null, + useTty: Boolean = false, + input: InputStream? = null, + output: OutputStream = OutputStream.nullOutputStream(), + waitTimeValue: Long? = null, + waitTimeUnit: TimeUnit? = null, + ): Pair { + container.requireOneOfStates(Container.State.RUNNING) + + log.trace("Executing command: ${command.joinToString(SPACE)}") + + val latch = CountDownLatch(1) + + val callback = object : ResultCallback { + + override fun close() { + log.trace("Exec command callback: close") + } + + override fun onStart(closeable: Closeable?) { + log.trace("Exec command callback: onStart") + } + + override fun onNext(frame: Frame?) { + frame?.payload?.let { + log.trace("Exec command callback: onNext (with frame): ${it.decodeToString()}") + output.write(it) + } + } + + override fun onError(error: Throwable?) { + log.error("Exec command callback: onError: ${error?.message}", error) + latch.countDown() + } + + override fun onComplete() { + log.trace("Exec command callback: onComplete") + latch.countDown() + } + } + + val execCreateCmdResponse = dockerClient.execCreateCmd(containerId.get()) + .withAttachStdout(true) + .withAttachStderr(false) + .withCmd(*command.toTypedArray()) + .withTty(useTty) + .apply { + workingDir?.let { withWorkingDir(workingDir) } + input?.let { withAttachStdin(true) } + } + .exec() + + val execId = execCreateCmdResponse.id + + dockerClient.execStartCmd(execId) + .withTty(useTty) + .apply { input?.let { withStdIn(input) } } + .exec(callback) + + waitTimeValue?.let { + waitTimeUnit?.let { TimeUnit.MILLISECONDS }?.let { it1 -> latch.await(waitTimeValue, it1) } + } ?: run { + latch.await() // Wait indefinitely + } + + val execInspectCmdResponse = dockerClient + .inspectExecCmd(execId) + .exec() + val exitCode = execInspectCmdResponse.exitCodeLong?.toInt() + + return Pair(exitCode, null) + } + + private fun getDisplayName(): String = "${container.getName()} (${containerId.get()})" + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/AccessChecker.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/AccessChecker.kt new file mode 100644 index 00000000..26ec1946 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/AccessChecker.kt @@ -0,0 +1,152 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.api.model.authorization.v1.ResourceAttributesBuilder +import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReview +import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReviewSpec +import io.fabric8.kubernetes.client.KubernetesClient +import no.acntech.easycontainers.PermissionException +import no.acntech.easycontainers.kubernetes.K8sConstants.DEFAULT_NAMESPACE +import no.acntech.easycontainers.util.text.EMPTY_STRING +import org.slf4j.LoggerFactory + +/** + * AccessChecker is a class that provides methods to check access permissions for various operations + * in a Kubernetes cluster. + * + * @property client - The Kubernetes client used for accessing the cluster. + */ +class AccessChecker( + private val client: KubernetesClient, +) { + + companion object { + private val log = LoggerFactory.getLogger(AccessChecker::class.java) + + // Verbs + const val GET = "get" + const val LIST = "list" + const val CREATE = "create" + const val DELETE = "delete" + const val UPDATE = "update" + const val WATCH = "watch" + + // Resources + const val NAMESPACE = "namespaces" + const val JOBS = "jobs" + const val DEPLOYMENTS = "deployments" + const val SERVICES = "services" + const val PODS = "pods" + const val CONFIG_MAPS = "configmaps" + const val POD_LOGS = "pods/log" + + // Groups + const val DEFAULT_GROUP = EMPTY_STRING + const val BATCH_GROUP = "batch" + const val APPS_GROUP = "apps" + } + + fun canListNamespaces(): Boolean = checkPermission(false, DEFAULT_GROUP, NAMESPACE, LIST) + + fun requireListNamespaces() = canListNamespaces() + + fun canCreateNamespaces(): Boolean = + checkPermission(resource = NAMESPACE, verbs = arrayOf(CREATE)) + + fun requireCreateNamespaces() = checkPermission(true, resource = NAMESPACE, verbs = arrayOf(CREATE)) + + fun canCreateDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, APPS_GROUP, DEPLOYMENTS, CREATE) + + fun requireCreateDeployments(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, APPS_GROUP, DEPLOYMENTS, CREATE) + + fun canMonitorDeployments(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, DEPLOYMENTS, APPS_GROUP, LIST) && + checkPermission(false, namespace, APPS_GROUP, DEPLOYMENTS, WATCH) + + fun requireMonitorDeployments(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, DEPLOYMENTS, APPS_GROUP, LIST) && + checkPermission(true, namespace, APPS_GROUP, DEPLOYMENTS, WATCH) + + fun canCreateServices(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, SERVICES, DEFAULT_GROUP, CREATE) + + fun requireCreateServices(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, SERVICES, DEFAULT_GROUP, CREATE) + + fun canCreateJobs(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, BATCH_GROUP, JOBS, CREATE) + + fun requireCreateJobs(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, BATCH_GROUP, JOBS, CREATE) + + fun canMonitorJobs(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, JOBS, BATCH_GROUP, LIST) && + checkPermission(false, namespace, BATCH_GROUP, JOBS, WATCH) + + fun requireMonitorJobs(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, JOBS, BATCH_GROUP, LIST) && + checkPermission(true, namespace, BATCH_GROUP, JOBS, WATCH) + + fun canListPods(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, DEFAULT_GROUP, PODS, LIST) + + fun requireListPods(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, DEFAULT_GROUP, PODS, LIST) + + fun canMonitorPods(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, DEFAULT_GROUP, PODS, LIST, WATCH) && + checkPermission(false, namespace, DEFAULT_GROUP, POD_LOGS, GET, WATCH) + + fun requireMonitorPods(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, DEFAULT_GROUP, PODS, LIST, WATCH) && + checkPermission(true, namespace, DEFAULT_GROUP, POD_LOGS, GET, WATCH) + + fun canCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE): Boolean = + checkPermission(false, namespace, DEFAULT_GROUP, CONFIG_MAPS, CREATE) + + fun requireCreateConfigMaps(namespace: String = DEFAULT_NAMESPACE) = + checkPermission(true, namespace, DEFAULT_GROUP, CONFIG_MAPS, CREATE) + + private fun checkPermission( + exceptionIfNotPermitted: Boolean = false, + namespace: String = DEFAULT_NAMESPACE, + group: String = DEFAULT_GROUP, + resource: String, + vararg verbs: String, + ): Boolean { + var allowed = true + + for (verb in verbs) { + val accessReview = SelfSubjectAccessReview().apply { + spec = SelfSubjectAccessReviewSpec().apply { + resourceAttributes = ResourceAttributesBuilder() + .withGroup(group) + .withResource(resource) + .withVerb(verb).apply { + if (namespace.isNotBlank()) { + this.withNamespace(namespace) + } + }.build() + } + } + + val isAllowed = client.authorization().v1().selfSubjectAccessReview().create(accessReview).status.allowed + + if (!isAllowed) { + log.warn("Access denied for verb [$verb] on resource [$resource] in namespace [$namespace] for API group [$group]") + allowed = false + } + } + + if (!allowed && exceptionIfNotPermitted) { + throw PermissionException( + "Access denied for one or more verbs [$verbs] on " + + "resource [$resource] in namespace [$namespace] for API group [$group]" + ) + } + + return allowed + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.kt new file mode 100644 index 00000000..6af0156f --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ContainerLogStreamer.kt @@ -0,0 +1,46 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.KubernetesClientBuilder +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.output.LineReader +import no.acntech.easycontainers.output.OutputLineCallback +import java.io.IOException +import java.util.concurrent.CancellationException + +/** + * Stream logs from a container in a Kubernetes pod. Implements [Runnable] and can be used in a [Thread]. + */ +class ContainerLogStreamer( + val podName: String, + val namespace: String = K8sConstants.DEFAULT_NAMESPACE, + client: KubernetesClient = KubernetesClientBuilder().build(), + outputLineCallback: OutputLineCallback = OutputLineCallback(::println), +) : Runnable { + + private val lineReader: LineReader + + init { + val logOutput = client.pods().inNamespace(namespace).withName(podName).watchLog().output + lineReader = LineReader(logOutput, outputLineCallback) + } + + override fun run() { + try { + lineReader.read() + } catch (e: IOException) { + when (e.cause) { + is InterruptedException, is CancellationException -> { + // The thread was interrupted or cancelled, so we can ignore this exception + } + + else -> throw ContainerException("Failed to read log stream for pod '$podName' in namespace '$namespace'", e) + } + } + } + + fun stop() { + lineReader.stop() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/ErrorSupport.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ErrorSupport.kt new file mode 100644 index 00000000..fa5860bf --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ErrorSupport.kt @@ -0,0 +1,28 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.client.KubernetesClientException +import io.fabric8.kubernetes.client.ResourceNotFoundException +import io.fabric8.kubernetes.client.WatcherException +import no.acntech.easycontainers.ContainerException +import org.slf4j.Logger + +object ErrorSupport { + + @Throws(ContainerException::class) + fun handleK8sException(e: Exception, log: Logger) { + when (e) { + is KubernetesClientException, is ResourceNotFoundException, is WatcherException -> { + val message = "Kubernetes error: ${e.message}" + log.error(message, e) + throw ContainerException(message, e) + } + + is ContainerException -> throw e + + else -> { + log.error("Unexpected exception '${e.javaClass.simpleName}:'${e.message}', re-throwing", e) + throw e // Rethrow the exception if it's not one of the handled types + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/ExecHandler.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ExecHandler.kt new file mode 100644 index 00000000..c3107f6d --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/ExecHandler.kt @@ -0,0 +1,401 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.api.model.Container +import io.fabric8.kubernetes.api.model.Pod +import io.fabric8.kubernetes.api.model.Status +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.dsl.ExecListener +import io.fabric8.kubernetes.client.dsl.ExecWatch +import no.acntech.easycontainers.AbstractContainerRuntime +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.kubernetes.ErrorSupport.handleK8sException +import no.acntech.easycontainers.util.io.closeQuietly +import no.acntech.easycontainers.util.io.toUtf8String +import no.acntech.easycontainers.util.text.NEW_LINE +import no.acntech.easycontainers.util.text.SPACE +import no.acntech.easycontainers.util.text.truncate +import no.acntech.easycontainers.util.time.WaitTimeCalculator +import org.apache.commons.io.output.TeeOutputStream +import org.awaitility.Awaitility +import org.awaitility.core.ConditionTimeoutException +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.io.ByteArrayOutputStream +import java.io.InputStream +import java.io.OutputStream +import java.util.concurrent.CompletableFuture +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeoutException +import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicReference + +/** + * Handles executing commands within a Kubernetes pod's container. + * + * @property client the Kubernetes client + * @property pod the pod to execute the command in + * @property k8sContainer the container to execute the command in + */ +internal class ExecHandler( + private val client: KubernetesClient, + private val pod: Pod, + private val k8sContainer: Container, +) { + + companion object { + private val log: Logger = LoggerFactory.getLogger(ExecHandler::class.java) + } + + /** + * Executes a command in the container. + * + * @param command the command to execute + * @param useTty whether to use a TTY for the command execution + * @param stdIn the input stream to use for the command + * @param stdOut the output stream to write the command output to + * @param waitTimeValue the time value to wait for the command to complete + * @param waitTimeUnit the time unit to wait for the command to complete + * @return a pair containing the exit code and the error output of the command + */ + fun execute( + command: List, + useTty: Boolean = false, + stdIn: InputStream?, + stdOut: OutputStream, + waitTimeValue: Long? = null, + waitTimeUnit: TimeUnit? = null, + ): Pair { + log.debug("Executing command '${command.joinToString(SPACE)}' in pod '${pod.metadata.name}' / container '${k8sContainer.name}'") + + val waitTimeCalculator = if (waitTimeValue != null && waitTimeUnit != null) { + WaitTimeCalculator(waitTimeValue, waitTimeUnit) + } else { + null + } + + val stdErr = ByteArrayOutputStream() + val cmdExitCode = AtomicReference() + val error = AtomicReference() + val alive = AtomicBoolean(false) + val started = CountDownLatch(1) + val finished = CountDownLatch(1) + var execWatch: ExecWatch? = null + + try { + execWatch = executeCommand( + pod, + k8sContainer, + command, + useTty, + stdIn, + true, + stdOut, + true, + stdErr, + true, + cmdExitCode, + error, + alive, + started, + finished + ) + + val remainingTime = waitTimeCalculator?.getRemainingTime() + waitForLatch(started, remainingTime, waitTimeUnit) + + val processFutures = createExecutionFutures(execWatch, stdIn, stdOut, stdErr) + + try { + waitForCompletion( + processFutures, + stdIn != null, + finished, + waitTimeCalculator, + waitTimeUnit + ) + } catch (e: TimeoutException) { + log.warn("Timed out waiting for command execution to complete", e) + } + + } catch (e: Exception) { + handleK8sException(e, log) + } finally { + execWatch?.closeQuietly() + } + + error.get()?.let { ex -> + throw ContainerException("Error executing command: ${ex.message}", ex) + } + + val exitCode = cmdExitCode.get().also { + log.debug("Cmd execution exit-code: $it") + } + + val stdErrString = stdErr.toUtf8String() + + return Pair(exitCode, stdErrString.ifBlank { null }) + } + + private fun createExecutionFutures( + execWatch: ExecWatch, + stdIn: InputStream?, + stdOut: OutputStream, + stdErr: ByteArrayOutputStream, + ): Triple, CompletableFuture, CompletableFuture> { + val processInputFuture = CompletableFuture.runAsync({ + processPodExecInput(execWatch, stdIn) + }, AbstractContainerRuntime.GENERAL_EXECUTOR_SERVICE) + + val processOutputFuture = CompletableFuture.runAsync({ + processPodExecOutput(execWatch.output, stdOut) + }, AbstractContainerRuntime.GENERAL_EXECUTOR_SERVICE) + + val processErrorFuture = CompletableFuture.runAsync({ + processPodExecOutput(execWatch.error, stdErr) + }, AbstractContainerRuntime.GENERAL_EXECUTOR_SERVICE) + + return Triple(processInputFuture, processOutputFuture, processErrorFuture) + } + + private fun waitForCompletion( + futures: Triple, CompletableFuture, CompletableFuture>, + timedOutputWait: Boolean = false, + finishedLatch: CountDownLatch, + waitTimeCalculator: WaitTimeCalculator?, + waitTimeUnit: TimeUnit?, + ) { +// if (!timedOutputWait) { + CompletableFuture.allOf(futures.first, futures.second, futures.third).let { allFutures -> + waitTimeCalculator?.getRemainingTime()?.let { waitTimeRemaining -> + log.debug("Waiting $waitTimeRemaining $waitTimeUnit for streams to complete") + allFutures.get(waitTimeRemaining, waitTimeUnit!!) + } ?: allFutures.join() + } + + val remainingTime = waitTimeCalculator?.getRemainingTime() + waitForLatch(finishedLatch, remainingTime, waitTimeUnit) + +// } else { +// // DEFICIENCY ALERT!!! +// +// // We cannot wait for the output and error futures to complete, as they will never complete before the execWatch is +// // explicitly closed. We never get an onExit event, so we cannot wait for the finishedLatch to count down either. +// +// // Bummer. +// +// // Wait for the input future to complete +// waitTimeCalculator?.getRemainingTime()?.let { waitTimeRemaining -> +// futures.first.get(waitTimeRemaining, waitTimeUnit!!) +// } ?: futures.first.join() +// +// // Cheeky sleep to allow the input to be processed and output to be written - not good. +// TimeUnit.SECONDS.sleep(3) +// } + } + + private fun processPodExecInput(execWatch: ExecWatch, input: InputStream?) { + input?.use { cmdStdIn -> + + log.debug("Stdin data available for command execution: ${cmdStdIn.available()} bytes") + + execWatch.input?.use { cmdStdinAsOutputStream -> + + // ByteArrayOutputStream to capture the input for logging + val logStream = ByteArrayOutputStream() + + // TeeOutputStream to write to both podStdin and logStream + val teeStream = TeeOutputStream(cmdStdinAsOutputStream, logStream) + + // Transfer data from clientStdIn to teeStream, which writes to both cmdStdinAsOutputStream and logStream + cmdStdIn.transferTo(teeStream) + teeStream.flush() + + // Convert the captured input to a string and log it + logStream.toUtf8String().also { debugString -> + log.debug("Captured stdin data for command execution: ${debugString.truncate(1024)}") + } + + } ?: log.warn("No pod stdin stream available for command execution") + } + } + + private fun processPodExecOutput(input: InputStream?, sink: OutputStream) { + log.trace("Processing pod exec output...") + + sink.use { + input?.use { containerOutputAsInputStream -> + + log.debug("Reading container output - available bytes: ${containerOutputAsInputStream.available()}") + + // ByteArrayOutputStream to capture the input for logging + val logStream = ByteArrayOutputStream() + + // TeeOutputStream to write to both sink and logStream + val teeStream = TeeOutputStream(sink, logStream) + + // Transfer data from podOut to teeStream, which writes to both sink and logStream + containerOutputAsInputStream.transferTo(teeStream) + + // Convert the captured output to a string and log it + logStream.toUtf8String().also { debugString -> + log.debug("Captured output data for command execution:$NEW_LINE${debugString.truncate(1024)}") + } + + } ?: log.warn("The container output is not available for command execution") + + log.trace("Processing pod exec output finished") + } + } + + private fun waitForLatch(latch: CountDownLatch, waitTimeValue: Long?, waitTimeUnit: TimeUnit?) { + if (waitTimeValue == null || waitTimeUnit == null) { + log.trace("Waiting indefinitely for latch to count down") + latch.await() + } else { + log.trace("Waiting $waitTimeValue $waitTimeUnit for latch to count down") + val notified = latch.await(waitTimeValue, waitTimeUnit) + if (!notified) { + throw ContainerException("Timeout waiting $waitTimeValue $waitTimeUnit for latch to count down") + } else { + log.trace("Latch counted down!") + } + } + } + + private fun executeCommand( + pod: Pod, + container: Container, + command: List, + useTty: Boolean, + input: InputStream?, + redirectInput: Boolean, + stdOut: OutputStream, + redirectStdOut: Boolean, + stdErr: OutputStream, + redirectStdErr: Boolean, + cmdExitCode: AtomicReference, + error: AtomicReference, + alive: AtomicBoolean, + started: CountDownLatch, + finished: CountDownLatch, + ): ExecWatch { + val listener = object : ExecListener { + + override fun onOpen() { + log.trace("ExecListener: onOpen") + alive.set(true) + started.countDown() + } + + override fun onFailure(throwable: Throwable?, response: ExecListener.Response?) { + log.error("ExecListener: onFailure - msg '${throwable?.message}' - code '${response?.code()}", throwable) + error.set(throwable) + finished() + } + + override fun onClose(code: Int, reason: String?) { + log.debug("ExecListener: onClose: code=$code, reason=$reason") + finished() + } + + override fun onExit(code: Int, status: Status?) { + log.debug("ExecListener: onExit: code=$code, status=${status?.status}") + cmdExitCode.set(code) + finished() + } + + private fun finished() { + alive.set(false) + started.countDown() + finished.countDown() + } + } + + return client + .pods() + .inNamespace(pod.metadata.namespace) + .withName(pod.metadata.name) + .inContainer(container.name) + + // Stdin, + .let { + if (input != null) { + if (redirectInput) { + log.debug("Redirecting stdin") + it.redirectingInput() + } else { + log.debug("Reading stdin ${input.available()} bytes available to command exec") + it.readingInput(input) + } + } else it + } + + // Stdout + .let { + if (redirectStdOut) { + log.debug("Redirecting stdout") + it.redirectingOutput() + } else { + it.writingOutput(stdOut) + } + } + + // Stderr + .let { + if (redirectStdErr) { + log.debug("Redirecting stderr") + it.redirectingError() + } else { + it.writingError(stdErr) + } + } + + // TTY + .let { + if (useTty) { + log.debug("Using TTY for command execution") + it.withTTY() + } else it + } + + // Add listener + .usingListener(listener) + + // Command + .exec(*command.toTypedArray()) + } + + private fun execPollWait( + waitTimeValue: Long?, + waitTimeUnit: TimeUnit?, + alive: AtomicBoolean, + stdErr: ByteArrayOutputStream, + stdOut: ByteArrayOutputStream, + ) { + log.trace("Poll-waiting for command execution to finish...") + try { + Awaitility.await() + .atMost(waitTimeValue ?: 30, waitTimeUnit ?: TimeUnit.SECONDS) + .pollInterval(500, TimeUnit.MILLISECONDS) + .until { + log.trace("Polling... alive=${alive.get()}") + !alive.get() + } + } catch (e: ConditionTimeoutException) { + val errorOut = stdErr.toString() + if (errorOut.isNotEmpty()) { + log.error("Error executing command: $errorOut") + throw ContainerException("Error executing command: ${errorOut.truncate(32)}") + } + + val standardOut = stdOut.toString() + if (standardOut.isNotEmpty()) { + log.info("Command execution timed out, but std output was captured: ${standardOut.truncate(32)}") + } else { + log.warn("Command execution timed out and no std output was captured") + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/FileTransferHandler.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/FileTransferHandler.kt new file mode 100644 index 00000000..c7e5ea08 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/FileTransferHandler.kt @@ -0,0 +1,154 @@ +package no.acntech.easycontainers.kubernetes + +import com.google.common.io.CountingInputStream +import io.fabric8.kubernetes.api.model.Container +import io.fabric8.kubernetes.api.model.Pod +import io.fabric8.kubernetes.client.KubernetesClient +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.util.io.FileUtils +import no.acntech.easycontainers.util.io.pipe +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.io.* +import java.nio.file.Files +import java.nio.file.Path +import java.util.concurrent.TimeUnit + +internal class FileTransferHandler( + private val client: KubernetesClient, + private val pod: Pod, + private val container: Container, +) { + + companion object { + private val log: Logger = LoggerFactory.getLogger(ExecHandler::class.java) + + private const val CAT_COMMAND = "cat" + } + + fun getFile(remoteDir: String, remoteFilename: String, localFile: Path?): Path { + val remotePath = "${remoteDir}/$remoteFilename" + val targetPath = localFile ?: Files.createTempFile("k8s-file-transfer-", ".tmp") + + val command = listOf(CAT_COMMAND, remotePath) + val output = BufferedOutputStream(FileOutputStream(targetPath.toFile())) + + val execHandler = ExecHandler(client, pod, container) + + val (exitCode, stdErr) = execHandler.execute( + command, + false, + null, + output, + 60L, + TimeUnit.SECONDS + ) + + if ((exitCode != null && exitCode != 0) || stdErr != null) { + val msg = "Transferring file '$localFile' to '$remotePath' failed with code $exitCode and error msg: $stdErr" + log.error(msg) + throw ContainerException(msg) + } + + return targetPath + } + + fun putFile(localFile: Path, remoteDir: String, remoteFilename: String?): Long { + // Getting the absolute path of the remote file inside the pod + val remotePath = "${remoteDir}/${remoteFilename ?: localFile.fileName.toString()}" + + log.debug("Transferring local file '$localFile' to remote path '$remotePath'") + + val command = listOf("sh", "-c", "$CAT_COMMAND > $remotePath") + // Prepare the execution of the command with the file's content piped into stdin + val input = BufferedInputStream(FileInputStream(localFile.toFile())) + val execHandler = ExecHandler(client, pod, container) + + val (exitCode, stdErr) = execHandler.execute( + command, + false, + input, + OutputStream.nullOutputStream(), + 60L, + TimeUnit.SECONDS + ) + + if ((exitCode != null && exitCode != 0) || stdErr != null) { + val msg = "Transferring file '$localFile' to '$remotePath' failed with code $exitCode and error msg: $stdErr" + log.error(msg) + throw ContainerException(msg) + } + + return localFile.toFile().length() + } + + fun getDirectory(remoteDir: String, localDir: Path): Pair> { + + // Create the local directory if it doesn't exist + if (!Files.exists(localDir)) { + Files.createDirectories(localDir).also { + log.debug("Untar prep - creating directory: $localDir") + } + } + + // Split the remote path into parent directory and target directory + val parentDir = remoteDir.substringBeforeLast(FORWARD_SLASH, EMPTY_STRING) + val targetDir = remoteDir.substringAfterLast(FORWARD_SLASH) + + // Prepare the execution of the tar command to create a tar file of the directory inside the container + // Change to the parent directory and specify the target directory as the source files + val command = listOf("sh", "-c", "tar -cf - -C $parentDir $targetDir") + val execHandler = ExecHandler(client, pod, container) + + // Execute the command and capture the output, which is the tar file + val pipedInput = pipe { output -> + val (exitCode, stdErr) = execHandler.execute( + command, + false, + null, + output, + 15L, + TimeUnit.SECONDS + ) + + if ((exitCode != null && exitCode != 0) || stdErr != null) { + val msg = "Transferring remote directory '$remoteDir' to local path '$localDir' " + + "failed with code $exitCode and error msg: $stdErr" + log.error(msg) + throw ContainerException(msg) + } + } + + return FileUtils.untar(pipedInput, localDir) + } + + fun putDirectory(localDir: Path, remoteDir: String): Long { + log.debug("Transferring local directory '$localDir' to remote path '$remoteDir'") + + val tarInput = FileUtils.tar(localDir, true) + val countingInput = CountingInputStream(tarInput) + val command = listOf("sh", "-c", "tar -xf - -C $remoteDir") + val execHandler = ExecHandler(client, pod, container) + + val (exitCode, stdErr) = execHandler.execute( + command, + false, + countingInput, + OutputStream.nullOutputStream(), + 20L, + TimeUnit.SECONDS + ) + + if ((exitCode != null && exitCode != 0) || stdErr != null) { + val msg = "Transferring directory '$localDir' to '$remoteDir' failed with code $exitCode and error msg: $stdErr" + log.error(msg) + throw ContainerException(msg) + } + + return countingInput.count + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sClientFactory.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sClientFactory.kt new file mode 100644 index 00000000..2afc5e89 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sClientFactory.kt @@ -0,0 +1,15 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.KubernetesClientBuilder + +/** + * A factory class for creating instances of Kubernetes clients. + */ +object K8sClientFactory { + + fun createDefaultClient(): KubernetesClient { + return KubernetesClientBuilder().build() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sConstants.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sConstants.kt new file mode 100644 index 00000000..66d838ef --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sConstants.kt @@ -0,0 +1,22 @@ +package no.acntech.easycontainers.kubernetes + +object K8sConstants { + + + const val APP_LABEL = "app" + const val CLUSTER_IP_DIRECTIVE = "ClusterIP" + const val NODE_PORT_DIRECTIVE = "NodePort" + const val NODE_PORT_RANGE_START = 30000 + const val NODE_PORT_RANGE_END = 32767 + + const val ENV_KUBERNETES_SERVICE_HOST = "KUBERNETES_SERVICE_HOST" + const val ENV_KUBERNETES_SERVICE_PORT = "KUBERNETES_SERVICE_PORT" + const val ENV_HOSTNAME = "HOSTNAME" + + const val SERVICE_ACCOUNT_PATH = "/var/run/secrets/kubernetes.io/serviceaccount" + + const val DEFAULT_NAMESPACE = "default" + + const val MEDIUM_MEMORY_BACKED = "Memory" + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sImageBuilder.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sImageBuilder.kt new file mode 100644 index 00000000..c26acab4 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sImageBuilder.kt @@ -0,0 +1,231 @@ +package no.acntech.easycontainers.kubernetes + +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.Environment.k8sKanikoDataHostDir +import no.acntech.easycontainers.ImageBuilder +import no.acntech.easycontainers.custom.KanikoContainer +import no.acntech.easycontainers.custom.KanikoContainer.KanikoContainerBuilder.Companion.KANIKO_DATA_VOLUME_MOUNT_PATH +import no.acntech.easycontainers.model.Container +import no.acntech.easycontainers.model.ContainerPlatformType +import no.acntech.easycontainers.util.platform.PlatformUtils +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import org.apache.commons.io.FileUtils +import java.io.File +import java.io.IOException +import java.nio.file.Files +import java.nio.file.Paths +import java.time.Instant +import java.util.* +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference +import kotlin.io.path.absolutePathString +import kotlin.io.path.exists + + +/** + * K8s builder for building a Docker image using a Kaniko job - see https://github.com/GoogleContainerTools/kaniko + */ +internal class K8sImageBuilder : ImageBuilder() { + + private val uuid: String = UUID.randomUUID().toString() + + private val startTime: AtomicReference = AtomicReference(null) + + private val finishTime: AtomicReference = AtomicReference(null) + + private var subDir: String? = null + + /** + * Build the image using a Kaniko jobb. This method will block the calling thread until the job is completed. + */ + override fun buildImage(): Boolean { + checkPreconditionsAndInitialize() + + createActualDockerContextDir().also { dir -> + log.info("Using '$dir' as the actual Docker context dir") + } + + val builder = KanikoContainer.builder() + builder.withImageName(imageName) + builder.withNamespace(namespace) + builder.withContainerPlatformType(ContainerPlatformType.KUBERNETES) + builder.withNamespace(namespace) + builder.withRegistry(registry) + builder.withRepository(repository) + builder.withInsecureRegistry(isInsecureRegistry) + builder.tags.forEach(::withTag) + builder.withVerbosity(verbosity) + builder.withOutputLineCallback { line -> log.debug("Kaniko-container-output: $line") } + subDir?.let { builder.withDockerContextSubDir(it) } + + val container = builder.build() + + container.getRuntime().start() + + changeState(State.IN_PROGRESS) + + container.waitForCompletion(30, TimeUnit.SECONDS) + + return when (container.getState()) { + Container.State.STOPPED, Container.State.DELETED -> { + changeState(State.COMPLETED) + true + } + + else -> { + changeState(State.FAILED) + false + } + } + } + + override fun getStartTime(): Instant? { + return startTime.get() + } + + override fun getFinishTime(): Instant? { + return finishTime.get() + } + + private fun checkPreconditionsAndInitialize() { + require(getState() == State.INITIALIZED) { "Image build already started: ${getState()}" } + + changeState(State.IN_PROGRESS) + } + + private fun createActualDockerContextDir(): String { + return if (K8sUtils.isRunningOutsideCluster()) { + handleRunningOutsideCluster() + } else { + processInsideCluster() + } + } + + private fun handleRunningOutsideCluster(): String { + log.debug("Running OUTSIDE a k8s cluster") + return if (dockerContextDir.exists()) { // The directory exists on the local filesystem + processOutsideCluster() + } else { + // The directory doesn't exist on the local filesystem, assume it's a sub-directory on the (shared) + // Kaniko data volume and that the Dockerfile and the context is already present + dockerContextDirBelowMountPath().also { + log.info("Using '$it' as the Docker context dir (not present on local filesystem)") + } + } + } + + private fun processOutsideCluster(): String { + val actualLocalKanikoPath = processLocalKanikoPath(k8sKanikoDataHostDir) + return processDockerContextDir(actualLocalKanikoPath) + } + + private fun processLocalKanikoPath(localKanikoPath: String): String { + return when { + PlatformUtils.isWindows() && PlatformUtils.getDefaultWslDistro() != null -> processWindowsLocalKanikoPath(localKanikoPath) + PlatformUtils.isLinux() || PlatformUtils.isMac() -> processUnixLocalKanikoPath(localKanikoPath) + else -> localKanikoPath + } + } + + private fun processWindowsLocalKanikoPath(localKanikoPath: String): String { + return when { + // Unix-dir, i.e. inside WSL + localKanikoPath.startsWith(FORWARD_SLASH) -> PlatformUtils.createDirectoryInWsl(localKanikoPath) + // Otherwise it needs to be in the \\wsl$ share + !localKanikoPath.startsWith("\\\\wsl\$") -> throw ContainerException("Invalid local Kaniko path: $localKanikoPath") + else -> localKanikoPath + } + } + + private fun processUnixLocalKanikoPath(localKanikoPath: String): String { + return File(localKanikoPath).apply { + if (!exists() && !mkdirs()) { + log.warn("Unable to create or non-existing local Kaniko-data directory: $this") + } + }.absolutePath + } + + private fun processDockerContextDir(localKanikoPath: String?): String { + return when { + dockerContextDir.startsWith( + localKanikoPath ?: return dockerContextDirBelowMountPath() + ) -> processDockerContextDirBelowKanikoDataDir(localKanikoPath) + + else -> processDockerContextDirNotBelowKanikoDataDir(localKanikoPath) + } + } + + private fun processDockerContextDirBelowKanikoDataDir(localKanikoPath: String): String { + log.trace("Docker context dir '$dockerContextDir' is already under the Kaniko data path") + requireDockerfile() + return (KANIKO_DATA_VOLUME_MOUNT_PATH + dockerContextDir.absolutePathString() + .substring(localKanikoPath.length)).also { + log.info("Using '$it' as the Docker context dir (present on local WSL filesystem)") + } + } + + private fun processDockerContextDirNotBelowKanikoDataDir(localKanikoPath: String): String { + log.trace("Docker context dir '$dockerContextDir' is not under the local Kaniko data volume, preparing to copy it") + copyDockerContextDirToUniqueSubDir(localKanikoPath) + subDir = "$FORWARD_SLASH$uuid" + return "$KANIKO_DATA_VOLUME_MOUNT_PATH/${uuid}".also { + log.info("Using '$it' as the Docker context dir") + } + } + + private fun processInsideCluster(): String { + log.debug("Running INSIDE a k8s cluster") + if (Files.exists(dockerContextDir)) { + throw IllegalStateException("Docker context dir '$dockerContextDir' is not a directory on the local filesystem") + } + + return if (dockerContextDir.toString().startsWith(KANIKO_DATA_VOLUME_MOUNT_PATH)) { + log.trace("Docker context dir '$dockerContextDir' is already below the mounted Kaniko data volume") + requireDockerfile() + dockerContextDir.toString().also { resultContextDir -> + log.info("Using '$resultContextDir' as the Docker context dir") + } + } else { // Otherwise copy it to a unique directory under the Kaniko data volume + log.trace("Docker context dir '$dockerContextDir' is not below the mounted Kaniko data volume, preparing to copy it") + subDir = "$FORWARD_SLASH$uuid" + copyDockerContextDirToUniqueSubDir(KANIKO_DATA_VOLUME_MOUNT_PATH) + } + } + + private fun requireDockerfile() { + if (!Files.exists(dockerContextDir.resolve("Dockerfile"))) { + throw ContainerException("File 'Dockerfile' expected in '$dockerContextDir'") + } + } + + private fun dockerContextDirBelowMountPath(): String = + Paths.get(KANIKO_DATA_VOLUME_MOUNT_PATH, dockerContextDir.toString().trim('/')) + .toString().also { resultContextDir -> + log.info("Using '$resultContextDir' as the Docker context dir (not present on local filesystem)") + } + + private fun copyDockerContextDirToUniqueSubDir(baseDir: String): String { + val uniqueContextDir = Paths.get(baseDir, uuid) + + try { + Files.createDirectories(uniqueContextDir).also { + log.debug("Created directory '$uniqueContextDir'") + } + } catch (e: IOException) { + throw ContainerException("Unable to create directory '$uniqueContextDir'") + } + + log.info("Copying Docker context dir '$dockerContextDir' to '$uniqueContextDir'") + + try { + FileUtils.copyDirectory(dockerContextDir.toFile(), uniqueContextDir.toFile()).also { + log.debug("Dockerfile and context successfully copied to '$uniqueContextDir'") + } + } catch (e: IOException) { + throw ContainerException("Error copying Docker context dir '$dockerContextDir' to '$uniqueContextDir': ${e.message}", e) + } + + return uniqueContextDir.toString() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sJobRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sJobRuntime.kt new file mode 100644 index 00000000..fa25c319 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sJobRuntime.kt @@ -0,0 +1,230 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.api.model.Container +import io.fabric8.kubernetes.api.model.PodSpec +import io.fabric8.kubernetes.api.model.batch.v1.Job +import io.fabric8.kubernetes.api.model.batch.v1.JobCondition +import io.fabric8.kubernetes.api.model.batch.v1.JobSpec +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.Watcher +import io.fabric8.kubernetes.client.WatcherException +import io.fabric8.kubernetes.client.utils.Serialization +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.model.Host +import no.acntech.easycontainers.util.lang.prettyPrintMe +import no.acntech.easycontainers.util.text.NEW_LINE +import org.apache.commons.lang3.time.DurationFormatUtils +import java.time.Instant +import java.util.concurrent.atomic.AtomicReference + +/** + * Represents a Kubernetes Job runtime for a given container. + * + * @property container The container to run as a Kubernetes Job. + * @property client The Kubernetes client used to interact with the Kubernetes API. Default is a default client instance. + */ +class K8sJobRuntime( + container: GenericContainer, + client: KubernetesClient = K8sClientFactory.createDefaultClient(), +) : K8sRuntime(container, client) { + + private val _job: AtomicReference = AtomicReference(createJob()) + private var job: Job + get() = _job.get() + set(value) { + _job.set(value) + } + + private val jobName + get() = job.metadata.name + + override fun start() { + super.start() + + createWatcher() + + host = Host.of("$podName.$namespace.pod.cluster.local").also { + log.debug("Pod hostname: $it") + } + } + + /** + * Stop the job by deleting the Kubernetes Job resource. + */ + override fun stop() { + container.changeState( + no.acntech.easycontainers.model.Container.State.TERMINATING, + no.acntech.easycontainers.model.Container.State.RUNNING + ) + + val existingJob = client.batch().v1() + .jobs() + .inNamespace(namespace) + .withName(jobName) + .get() + + if (existingJob != null) { + deleteResources() + } else { + log.info("Job ${job.metadata.name} does not exist, no need to delete.") + } + + super.stop() + } + + override fun deploy() { + log.debug("Deploying job '${getResourceName()} in namespace '$namespace'") + + job = client.batch().v1() + .jobs() + .inNamespace(namespace) + .resource(job) + .create().also { + log.info("Job '${it.metadata.name}' deployed in namespace '$namespace':$NEW_LINE${it.prettyPrintMe()}") + } + } + + override fun getResourceName(): String { + return container.getName().value + "-job" + } + + override fun configure(k8sContainer: Container) { + // No-op + } + + override fun configure(podSpec: PodSpec) { + podSpec.restartPolicy = "Never" + } + + override fun deleteResources() { + try { + client.batch().v1() + .jobs() + .inNamespace(namespace) + .withName(job.metadata.name) + .delete() + } catch (e: Exception) { + log.warn("Failed to delete job '${job.metadata.name}': ${e.message}", e) + ErrorSupport.handleK8sException(e, log) + } + } + + private fun createJob(): Job { + val podTemplateSpec = createPodTemplateSpec() + + val jobSpec = JobSpec().apply { + template = podTemplateSpec + backoffLimit = 0 + completions = 1 + } + + return Job().apply { + apiVersion = "batch/v1" + kind = "Job" + metadata = getResourceMetaData() + spec = jobSpec + }.also { + log.debug("Created job:${it.prettyPrintMe()}") + log.debug("Job YAML:$NEW_LINE${Serialization.asYaml(it)}") + } + } + + private fun createWatcher() { + + // Lambda for changing the Container state + val jobWatcher = object : Watcher { + + override fun eventReceived(action: Watcher.Action, job: Job) { + log.debug("Received event '${action.name}' on job with status '${job.status}'") + + this@K8sJobRuntime.job = job + + job.status?.let { status -> + status.startTime?.let { + startedAt = Instant.parse(it) + } + + status.conditions?.forEach { condition -> + handleJobCondition(condition) + } + } + } + + override fun onClose(cause: WatcherException?) { + cause?.let { nonNullCause -> + log.error("Job '$jobName' watcher closed due to error: ${nonNullCause.message}", nonNullCause) + container.changeState(no.acntech.easycontainers.model.Container.State.FAILED) + } ?: run { + log.info("Job '$jobName' watcher closed") + container.changeState(no.acntech.easycontainers.model.Container.State.STOPPED) + } + } + + } + + try { + client.batch().v1() + .jobs() + .inNamespace(namespace) + .withName(jobName) + .watch(jobWatcher) + + } catch (e: Exception) { + log.error("Error watching job: ${e.message}", e) + container.changeState(no.acntech.easycontainers.model.Container.State.FAILED) + throw ContainerException("Error watching job: ${e.message}", e) + } + } + + private fun handleJobCondition(condition: JobCondition) { + when (condition.type) { + "Complete" -> handleJobCompletion(condition) + "Failed" -> handleJobFailure(condition) + } + } + + private fun handleJobCompletion(condition: JobCondition) { + if ("True" == condition.status) { + + val completionDateTimeVal = job.status.completionTime + completionDateTimeVal?.let { + finishedAt = Instant.parse(completionDateTimeVal) + + DurationFormatUtils.formatDurationWords( + finishedAt!!.toEpochMilli() - startedAt!!.toEpochMilli(), + true, + true + ).let { duration -> + log.info("Job '$jobName' took approximately: $duration") + } + } + + job.status.failed?.let { failed -> + if (failed > 0) { + log.error("Job '$jobName' failed with $failed failed pods") + container.changeState(no.acntech.easycontainers.model.Container.State.FAILED) + } else { + log.info("Job '$jobName' completed successfully") + container.changeState(no.acntech.easycontainers.model.Container.State.STOPPED) + } + } ?: run { + log.info("Job '$jobName' completed successfully") + container.changeState(no.acntech.easycontainers.model.Container.State.STOPPED) + } + + completionLatch.countDown() + log.trace("Latch decremented, job '$jobName' completed") + } + } + + private fun handleJobFailure(condition: JobCondition) { + if ("True" == condition.status) { + log.error("Job '$jobName' failed with reason: ${condition.reason}") + container.changeState(no.acntech.easycontainers.model.Container.State.FAILED) + completionLatch.countDown() + log.trace("Latch decremented, job '$jobName' failed") + } + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sRuntime.kt new file mode 100644 index 00000000..0df491b8 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sRuntime.kt @@ -0,0 +1,946 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.api.model.* +import io.fabric8.kubernetes.api.model.Container +import io.fabric8.kubernetes.api.model.Volume +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.Watcher +import io.fabric8.kubernetes.client.WatcherException +import io.fabric8.kubernetes.client.dsl.Resource +import io.fabric8.kubernetes.client.utils.Serialization +import no.acntech.easycontainers.AbstractContainerRuntime +import no.acntech.easycontainers.ContainerException +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.kubernetes.K8sConstants.APP_LABEL +import no.acntech.easycontainers.kubernetes.K8sConstants.MEDIUM_MEMORY_BACKED +import no.acntech.easycontainers.kubernetes.K8sUtils.normalizeConfigMapName +import no.acntech.easycontainers.kubernetes.K8sUtils.normalizeLabelValue +import no.acntech.easycontainers.kubernetes.K8sUtils.normalizeVolumeName +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.lang.guardedExecution +import no.acntech.easycontainers.util.lang.prettyPrintMe +import no.acntech.easycontainers.util.text.* +import org.awaitility.Awaitility +import org.awaitility.core.ConditionTimeoutException +import java.io.FileNotFoundException +import java.io.InputStream +import java.io.OutputStream +import java.net.InetAddress +import java.nio.file.Files +import java.nio.file.Path +import java.time.Duration +import java.time.Instant +import java.util.* +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference +import kotlin.collections.component1 +import kotlin.collections.component2 +import kotlin.collections.set +import kotlin.io.path.exists +import kotlin.io.path.isDirectory + +/** + * Represents an abstract Kubernetes runtime for a container, capturing common functionality and properties for both + * Kubernetes Jobs and Deployments. + * + * @property client The Kubernetes client used to interact with the Kubernetes cluster. + * @property accessChecker The access checker used to check access permissions. + * @property pods The list of pods associated with the container. + * @property configMaps The list of config maps associated with the container. + * @property selectorLabels The selector labels used to filter pods. + * @property ourDeploymentName The name of our deployment. + * @property containerLogStreamer The container log streamer used to stream container logs. + * @property host The host associated with the container. + * @property ipAddress The IP address of the container. + * @property startedAt The time when the container started. + * @property finishedAt The time when the container finished. + * @property exitCode The exit code of the container. + * @property podPhaseLatches The latches used to wait for pod phases. + */ +abstract class K8sRuntime( + container: GenericContainer, + protected val client: KubernetesClient = K8sClientFactory.createDefaultClient(), +) : AbstractContainerRuntime(container) { + + private inner class PodWatcher : Watcher { + + override fun eventReceived(action: Watcher.Action?, pod: Pod?) { + log.trace("PodWatcher '$this' eventReceived on pod '${pod?.metadata?.name}': $action") + + val podPhase = pod?.status?.phase?.uppercase()?.let { + PodPhase.valueOf(it) + } + + // Notify the latch associated with the pod phase + podPhase?.let { + podPhaseLatches[it]?.countDown() + } + + refreshPod() + } + + override fun onClose(cause: WatcherException?) { + log.info("PodWatcher closed: ${cause?.message}", cause) + refreshPod() + } + + } + + companion object { + const val CONTAINER_NAME_SUFFIX = "-container" + const val POD_NAME_SUFFIX = "-pod" + const val DEPLOYMENT_NAME_SUFFIX = "-deployment" + const val SERVICE_NAME_SUFFIX = "-service" + const val PV_NAME_SUFFIX = "-pv" + const val PVC_NAME_SUFFIX = "-pvc" + const val CONFIG_MAP_NAME_SUFFIX = "-config-map" + const val VOLUME_NAME_SUFFIX = "-volume" + + private fun mapPodPhaseToContainerState(podPhase: PodPhase?): no.acntech.easycontainers.model.Container.State { + return when (podPhase) { + PodPhase.PENDING -> no.acntech.easycontainers.model.Container.State.INITIALIZING + PodPhase.RUNNING -> no.acntech.easycontainers.model.Container.State.RUNNING + PodPhase.FAILED -> no.acntech.easycontainers.model.Container.State.FAILED + PodPhase.SUCCEEDED -> no.acntech.easycontainers.model.Container.State.STOPPED + PodPhase.UNKNOWN -> no.acntech.easycontainers.model.Container.State.UNKNOWN + else -> no.acntech.easycontainers.model.Container.State.UNKNOWN // Ensures newState has a default value even if podPhase is null + } + } + } + + protected val accessChecker = AccessChecker(client) + + protected val completionLatch: CountDownLatch = CountDownLatch(1) + + protected val containerName + get() = k8sContainer.name ?: throw IllegalStateException("No container present") + + protected val configMaps: MutableList = mutableListOf() + + protected val selectorLabels: Map = mapOf(APP_LABEL to container.getName().value) + + protected val ourDeploymentName: String? = extractOurDeploymentName() + + protected var host: Host? = null + + private val _k8sContainer = AtomicReference() + protected var k8sContainer: Container + get() = _k8sContainer.get() + set(value) { + _k8sContainer.set(value) + } + + private val _pod = AtomicReference() + protected var pod: Pod + get() = _pod.get() + set(value) { + _pod.set(value) + } + + private val _ipAddress = AtomicReference() + protected var ipAddress: InetAddress? + get() = _ipAddress.get() + set(value) { + _ipAddress.set(value) + } + + private val _startedAt = AtomicReference() + protected var startedAt: Instant? + get() = _startedAt.get() + set(value) { + _startedAt.compareAndSet(null, value) + } + + private val _finishedAt = AtomicReference() + protected var finishedAt: Instant? + get() = _finishedAt.get() + set(value) { + _finishedAt.compareAndSet(null, value) + } + + private val _exitCode = AtomicReference() + protected var exitCode: Int? + get() = _exitCode.get() + set(value) { + _exitCode.set(value) + } + + protected val podPhaseLatches: Map = mapOf( + PodPhase.PENDING to CountDownLatch(1), + PodPhase.RUNNING to CountDownLatch(1), + PodPhase.FAILED to CountDownLatch(1), + PodPhase.SUCCEEDED to CountDownLatch(1), + ) + + protected val podId = UUID.randomUUID().toString() + + protected val podLabels: Map = mapOf( + "app.kubernetes.io/instance" to podId, + ) + + protected val namespace: String + get() = container.getNamespace().value + + protected val podName: String + get() = pod.metadata?.name ?: throw IllegalStateException("No pod present") + + + private var containerLogStreamer: ContainerLogStreamer? = null + + private val _execHandler = AtomicReference() + private var execHandler: ExecHandler + get() = _execHandler.get() + set(value) { + _execHandler.compareAndSet(null, value) + } + + private val _fileTransferHandler = AtomicReference() + private var fileTransferHandler: FileTransferHandler + get() = _fileTransferHandler.get() + set(value) { + _fileTransferHandler.compareAndSet(null, value) + } + + /** + * Returns the name of the (first) Kubernetes container associated with the (first) pod. + */ + override fun getName(): ContainerName { + return k8sContainer.name?.let { ContainerName(it) } ?: throw IllegalStateException("No container present") + } + + override fun start() { + container.changeState( + no.acntech.easycontainers.model.Container.State.INITIALIZING, + no.acntech.easycontainers.model.Container.State.UNINITIATED + ) + + log.info("Starting container: ${container.getName()}") + log.debug("Using container config$NEW_LINE${container.builder}") + + try { + deploy() + waitForPod() + } catch (e: Exception) { + container.changeState(no.acntech.easycontainers.model.Container.State.FAILED) + ErrorSupport.handleK8sException(e, log) + } + } + + override fun stop() { + log.trace("Stopping container '${container.getName()}'") + + stopStreamingContainerLog() + super.stop() + } + + override fun delete(force: Boolean) { + log.trace("Deleting container '${container.getName()}' with force: $force") + + if (force) { + guardedExecution( + { deleteResources() }, + listOf(Exception::class), + { log.warn("Error stopping container '${container.getName()}': ${it.message}", it) } + ) + } else { + container.changeState( + no.acntech.easycontainers.model.Container.State.TERMINATING, + no.acntech.easycontainers.model.Container.State.RUNNING, + no.acntech.easycontainers.model.Container.State.STOPPED, + no.acntech.easycontainers.model.Container.State.FAILED + ) + deleteResources() + } + + finishedAt = Instant.now() + + stopStreamingContainerLog() + + val configMapsExists = client.configMaps() + .inNamespace(namespace) + .list() + .items + .any { item -> configMaps.any { backItem -> backItem.metadata.name == item.metadata.name } } + + if (configMapsExists) { + configMaps.forEach { configMap -> + guardedExecution( + { client.configMaps().inNamespace(namespace).withName(configMap.metadata.name).delete() }, + listOf(Exception::class), + { log.warn("Error deleting config map '${configMap.metadata.name}': ${it.message}", it) } + ) + } + } + container.onDelete() + + container.changeState(no.acntech.easycontainers.model.Container.State.DELETED) + } + + override fun execute( + executable: Executable, + args: Args?, + useTty: Boolean, + workingDir: UnixDir?, + input: InputStream?, + output: OutputStream, + waitTimeValue: Long?, + waitTimeUnit: TimeUnit?, + ): Pair { + refreshPod() + + return execHandler.execute( + listOf(executable.unwrap()) + args?.toStringList().orEmpty(), + useTty, + input, + output, + waitTimeValue, + waitTimeUnit + ) + } + + override fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String?): Long { + if (!Files.exists(localFile)) { + throw FileNotFoundException("The local file '$localFile' does not exist") + } + refreshPod() + return fileTransferHandler.putFile(localFile, remoteDir.unwrap(), remoteFilename) + } + + override fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path?): Path { + refreshPod() + return fileTransferHandler.getFile(remoteDir.unwrap(), remoteFilename, localPath) + } + + override fun putDirectory(localDir: Path, remoteDir: UnixDir): Long { + require(localDir.exists() && localDir.isDirectory()) { "Local directory '$localDir' does not exist" } + refreshPod() + return fileTransferHandler.putDirectory(localDir, remoteDir.unwrap()) + } + + override fun getDirectory(remoteDir: UnixDir, localDir: Path): Pair> { + require(localDir.exists() && Files.isDirectory(localDir)) { "The provided path '$localDir' is not a directory." } + refreshPod() + return fileTransferHandler.getDirectory(remoteDir.unwrap(), localDir) + } + + override fun getDuration(): Duration? { + val start = _startedAt.get() + if (start != null) { + val end = _finishedAt.get() ?: Instant.now() + return Duration.between(start, end) + } + return null + } + + override fun getExitCode(): Int? { + return exitCode + } + + override fun getHost(): Host? { + return host + } + + override fun getIpAddress(): InetAddress? { + return ipAddress + } + + override fun getType(): ContainerPlatformType { + return ContainerPlatformType.KUBERNETES + } + + // Extra methods + +// fun getPodName(): String { +// return podName +// } + + protected fun createNamespaceIfAllowedAndNotExists() { + if (!(accessChecker.canListNamespaces() and accessChecker.canCreateNamespaces())) { + log.warn("Not allowed to list or create namespaces") + return + } + + val namespaceExists = client.namespaces().list().items.any { it.metadata.name == namespace } + if (!namespaceExists) { + val namespaceResource = NamespaceBuilder() + .withNewMetadata() + .withName(namespace) + .endMetadata().build() + + client.namespaces() + .resource(namespaceResource) + .create().also { + log.info("Created k8s namespace: $it") + } + } + } + + protected abstract fun deploy() + + protected abstract fun configure(k8sContainer: Container) + + protected abstract fun configure(podSpec: PodSpec) + + protected abstract fun getResourceName(): String + + protected abstract fun deleteResources() + + protected fun getResourceMetaData(): ObjectMeta { + return ObjectMeta().apply { + namespace = this@K8sRuntime.namespace + name = getResourceName() +// generateName = getResourceName().truncate(10) + "-" + val stringLabels: Map = container.getLabels().flatMap { (key, value) -> + listOf(key.value to value.value) + }.toMap() + + labels = stringLabels + createDefaultLabels() + } + } + + protected fun createPodTemplateSpec(): PodTemplateSpec { + val k8sContainer = createK8sContainer() + val (volumes, volumeMounts) = createVolumes() + + k8sContainer.volumeMounts = volumeMounts + configure(k8sContainer) + + val podSpec = PodSpec().apply { + containers = listOf(k8sContainer) + this.volumes = volumes + } + + configure(podSpec) + + val podTemplateMetadata = ObjectMeta().apply { + name = container.getName().value + POD_NAME_SUFFIX + this.labels = selectorLabels + createDefaultLabels() + podLabels + } + + val podTemplateSpec = PodTemplateSpec().apply { + metadata = podTemplateMetadata + spec = podSpec + } + + return podTemplateSpec + } + + protected fun createDefaultLabels(): Map { + val defaultLabels: MutableMap = mutableMapOf() + + val parentAppName = normalizeLabelValue( + System.getProperty("spring.application.name") + ?: "${System.getProperty("java.vm.name")}-${ProcessHandle.current().pid()}" + ) + + defaultLabels["app.kubernetes.io/managed-by"] = "Easycontainers" + defaultLabels["app.kubernetes.io/timestamp"] = K8sUtils.instantToLabelValue(Instant.now()) + defaultLabels["app.kubernetes.io/part-of"] = parentAppName + defaultLabels["app.kubernetes.io/ephemeral"] = container.isEphemeral().toString() + + container.getMaxLifeTime()?.let { + defaultLabels["app.kubernetes.io/lifetime"] = it.toString() + } + + if (K8sUtils.isRunningInsideCluster()) { + defaultLabels["app.kubernetes.io/inside-cluster"] = "true" + defaultLabels["app.kubernetes.io/parent-deployment"] = ourDeploymentName!! + } else { + defaultLabels["app.kubernetes.io/inside-cluster"] = "false" + } + + return defaultLabels.toMap() + } + + private fun waitForPod(maxWaitTimeSeconds: Long = 60L) { + var pods: List = emptyList() + + // Wait for it... + try { + Awaitility.await() + .atMost(maxWaitTimeSeconds, TimeUnit.SECONDS) + .pollInterval(500, TimeUnit.MILLISECONDS) + .until { + pods = client + .pods() + .inNamespace(namespace) + .withLabels(podLabels) + .list() + .items + + pods.isNotEmpty() + } + } catch (e: ConditionTimeoutException) { + val msg = "Timed out waiting for pod for ${container.getName()}" + log.error(msg) + throw ContainerException(msg) + } + + // INVARIANT: There is at least one matching pod in the list + + if (pods.size > 1) { + val msg = "More than one pod found when waiting for pod: ${container.getName()}" + log.warn(msg) + pods.forEach { + log.info("Pod: ${it.prettyPrintMe()}") + } + throw ContainerException(msg) + } + + // Set the pod once and for all + pod = pods.first() + + // Set the container if present + refreshContainer() + + ipAddress = InetAddress.getByName(pod.status.podIP) + + // Subscribe to pod events + watchPod() + + // Stream logs to whatever output is configured + startStreamingContainerLog() + } + + private fun createK8sContainer(): Container { + val requests = mutableMapOf() + val limits = mutableMapOf() + + container.builder.cpuRequest?.let { + requests["cpu"] = Quantity(it.toString()) + } + + container.builder.memoryRequest?.let { + requests["memory"] = Quantity(it.toString()) + } + + container.builder.cpuLimit?.let { + limits["cpu"] = Quantity(it.toString()) + } + + container.builder.memoryLimit?.let { + limits["memory"] = Quantity(it.toString()) + } + + val resourceRequirements = ResourceRequirements() + resourceRequirements.requests = requests + resourceRequirements.limits = limits + + return Container().apply { + name = "${container.getName().value}$CONTAINER_NAME_SUFFIX" + image = container.getImage().toFQDN() + env = container.getEnv().map { EnvVar(it.key.value, it.value.value, null) } + ports = container.getExposedPorts().map { + ContainerPort(it.value, null, null, null, "TCP") + } + container.getCommand()?.let { + command = it.value.split(SPACE) + } + container.getArgs()?.let { + args = it.toStringList() + } + resources = resourceRequirements + + } + } + + private fun createVolumes(): Pair, List> { + val volumes = mutableListOf() + val volumeMounts = mutableListOf() + + // Handle container files + handleContainerFiles(volumes, volumeMounts) + + // Handle existing persistent volumes and claims + handlePersistentVolumes(volumes, volumeMounts) + + // Handle memory-backed volumes + handleMemoryBackedVolumes(volumes, volumeMounts) + handleMemoryBackedVolumes(volumes, volumeMounts) + + return Pair(volumes, volumeMounts) + } + + private fun watchPod() { + val pods = client.pods() + .inNamespace(namespace) + .withLabels(podLabels) + .list().items + + if (pods.size > 1) { + throw ContainerException("Multiple matching pods found ${pods.size} for pod labels: $podLabels") + } + + client.pods() + .inNamespace(namespace) + .withLabels(podLabels) + .watch(PodWatcher()) + + // Add a debug/logging watcher for the pod + client.pods() + .inNamespace(namespace) + .withLabels(podLabels) + .watch(LoggingWatcher()) + } + + private fun startStreamingContainerLog() { + containerLogStreamer = ContainerLogStreamer( + podName = podName, + namespace = namespace, + client = client, + outputLineCallback = container.getOutputLineCallback() + ) + + // Start the log streamer in a separate (virtual) thread + GENERAL_EXECUTOR_SERVICE.execute(containerLogStreamer!!) + } + + private fun stopStreamingContainerLog() { + containerLogStreamer?.stop() + } + + private fun handleContainerFiles( + volumes: MutableList, + volumeMounts: MutableList, + ) { + container.builder.containerFiles.forEach { (name, configFile) -> + handleContainerFile(configFile, volumes, volumeMounts) + } + } + + private fun handleContainerFile( + file: ContainerFile, + volumes: MutableList, + volumeMounts: MutableList, + ) { + log.trace("Creating name -> config map mapping: ${file.name} -> $file") + + val baseName = "container-file-${file.name.value}" + val configMapName = normalizeConfigMapName( + "$baseName-${UUID.randomUUID().toString().truncate(5)}$CONFIG_MAP_NAME_SUFFIX}" + ) + val volumeName = normalizeVolumeName("$baseName$VOLUME_NAME_SUFFIX") + val fileName = file.name.value + + val configMap = createConfigMap(configMapName, fileName, file) + applyConfigMap(configMap) + + val volume = createConfigMapVolume(volumeName, configMapName) + volumes.add(volume) + + // Since we're using the same file name as the key, we don't need to specify the subPath + val volumeMount = createVolumeMount(volumeName, file.mountPath.value) + volumeMounts.add(volumeMount) + } + + private fun createConfigMap(name: String, fileName: String, configFile: ContainerFile): ConfigMap { + val configMap = ConfigMapBuilder() + .withNewMetadata() + .withName(name) + .withNamespace(namespace) + .addToLabels(createDefaultLabels()) + .endMetadata() + .addToData(fileName, configFile.content) // fileName as the key + .build() + + return configMap + } + + private fun applyConfigMap(configMap: ConfigMap) { + val configMapResource: Resource = + client.configMaps() + .inNamespace(namespace) + .resource(configMap) + + configMapResource.get()?.let { + configMapResource + .withTimeout(30, TimeUnit.SECONDS) + .delete() + .also { + log.info("Deleted existing k8s config map:$NEW_LINE${it.prettyPrintMe()}") + } + } + + configMapResource.create().also { + configMaps.add(it) + log.info("Created k8s config map:$NEW_LINE${it.prettyPrintMe()}") + log.debug("ConfigMap YAML: ${Serialization.asYaml(configMap)}") + } + } + + private fun createConfigMapVolume(volumeName: String, configMapName: String): Volume { + val volume = VolumeBuilder() + .withName(volumeName) + .withNewConfigMap() + .withName(configMapName) + .endConfigMap() + .build() + + return volume + } + + private fun createVolumeMount(name: String, mountPath: String, fileName: String? = null): VolumeMount { + return VolumeMountBuilder() + .withName(name) + .withMountPath(mountPath) + .apply { + fileName?.let(this::withSubPath) + }.build() + } + + private fun handlePersistentVolumes( + volumes: MutableList, + volumeMounts: MutableList, + ) { + container.builder.volumes + .filter { !it.memoryBacked } + .forEach { volume -> + + // Derive the PVC name from the volume name + val pvcName = extractPersistentVolumeClaimName(volume.name.value) + ?: throw ContainerException("Failed to extract persistent volume claim name for volume: ${volume.name}") + + // Create the Volume using the existing PVC + val k8sVolume = VolumeBuilder() + .withName(volume.name.value) + .withNewPersistentVolumeClaim() + .withClaimName(pvcName) + .endPersistentVolumeClaim() + .build() + volumes.add(k8sVolume) + + // Create the VolumeMount + val volumeMount = VolumeMountBuilder() + .withName(volume.name.value) + .withMountPath(volume.mountDir.value) + .build() + volumeMounts.add(volumeMount) + + log.info("Created persistent volume: ${volume.name}") + } + } + + private fun handleMemoryBackedVolumes(volumes: MutableList, volumeMounts: MutableList) { + container.builder.volumes + .filter { it.memoryBacked } + .forEach { volume -> + val emptyDir = EmptyDirVolumeSource() + emptyDir.medium = MEDIUM_MEMORY_BACKED + volume.memory?.let { + emptyDir.sizeLimit = Quantity(it.toFormattedString()) + } + + val k8sVolume = VolumeBuilder() + .withName(volume.name.value) + .withEmptyDir(emptyDir) + .build() + volumes.add(k8sVolume) + + val volumeMount = VolumeMountBuilder() + .withName(volume.name.value) + .withMountPath(volume.mountDir.value) + .build() + volumeMounts.add(volumeMount) + + log.info("Created memory-backed volume: ${volume.name}") + } + } + + private fun extractPersistentVolumeClaimName(base: String): String? { + var claimName = base + + // Check if a PVC with the base name exists. + var pvc = client.persistentVolumeClaims().inNamespace(namespace).withName(claimName).get() + + // If the PVC base name does not exist, create a new claimName with the PVC_NAME_SUFFIX. + // Then, re-check if a PVC with the new name exists. + if (pvc == null && !base.endsWith(PVC_NAME_SUFFIX)) { + claimName += PVC_NAME_SUFFIX + pvc = client.persistentVolumeClaims().inNamespace(namespace).withName(claimName).get() + } + + // If a PVC with either the base name or the suffixed name was found, return the claimName. + // If no PVC was found for both, return null. + return (if (pvc != null) claimName else null).also { + log.debug("Extracted PVC name: $it") + } + } + + private fun extractOurDeploymentName(): String? { + if (K8sUtils.isRunningOutsideCluster()) { + return null + } + + val podName = System.getenv(K8sConstants.ENV_HOSTNAME) // Pod name from the HOSTNAME environment variable + + // Get the current pod based on the pod name and namespace + val pod = client + .pods() + .inNamespace(namespace) + .withName(podName) + .get() + + // Get labels of the current pod + val podLabels = pod.metadata.labels + + // Query all deployments in the namespace + val deployments = client.apps().deployments() + .inNamespace(namespace) + .list().items + + // Find the deployment whose selector matches the pod's labels + val deployment = deployments.firstOrNull { deployment -> + deployment.spec.selector.matchLabels.entries.all { + podLabels[it.key] == it.value + } + } + + return deployment?.metadata?.name ?: "unknown" + } + + private fun refreshPod() { + val refreshedPod = client + .pods() + .inNamespace(namespace) + .withName(podName) + .get() + + if (refreshedPod == null) { + log.warn("Pod '$podName' not found in the cluster, refreshing failed.") +// throw ContainerException("Pod '${pod.get().metadata.name}' not found in the cluster") + return + } + + pod = refreshedPod + + refreshContainer() + updatePodState() + } + + private fun refreshContainer() { + val containers = pod.spec.containers + + if (containers.isEmpty()) { + log.warn("No containers found in pod: $podName") + return + } + + if (containers.size > 1) { + val msg = "More than one container (${containers.size}) found in pod '$podName'" + log.warn(msg) + containers.forEach { + log.warn("Container: ${it.prettyPrintMe()}") + } + throw ContainerException(msg) + } + + k8sContainer = containers.first() + execHandler = ExecHandler(client, pod, k8sContainer) + fileTransferHandler = FileTransferHandler(client, pod, k8sContainer) + } + + private fun updatePodState() { + // Determine the pod phase and update newState accordingly + val podPhase = pod.status?.phase?.uppercase()?.let { phase -> + PodPhase.valueOf(phase).also { + log.debug("Current pod phase: $it") + } + } + + var newState = mapPodPhaseToContainerState(podPhase) + val containerStatuses = pod.status?.containerStatuses + + handleContainerStatuses(containerStatuses, newState)?.also { updatedState -> + newState = updatedState + } + + // Apply the new state to the container object (assuming 'container' is accessible and represents the current container) + if (container.isLegalStateChange(newState = newState)) { + container.changeState(newState) + } else { + log.warn("Illegal state change attempt in container '${container.getName()}': ${container.getState()} -> $newState") + } + } + + private fun handleContainerStatuses( + containerStatuses: List?, + newState: no.acntech.easycontainers.model.Container.State, + ): no.acntech.easycontainers.model.Container.State? { + if (containerStatuses.isNullOrEmpty()) { + log.warn("No container statuses found in pod '$podName'") + return null + } + + if (containerStatuses.size > 1) { + val msg = "More than one container status (${containerStatuses.size}) found in pod '$podName'" + log.warn(msg) + containerStatuses.forEach { + log.warn("Container status: ${it.prettyPrintMe()}") + } + throw ContainerException(msg) + } + + // Check the container status + val containerStatus = containerStatuses.first() + + // Update start time if the container is running + containerStatus.state.running?.startedAt?.let { + startedAt = Instant.parse(it) + } + + // Handle container termination information + return handlePossibleTerminatedContainerState(containerStatus, newState) + } + + private fun handlePossibleTerminatedContainerState( + containerStatus: ContainerStatus, + newState: no.acntech.easycontainers.model.Container.State, + ): no.acntech.easycontainers.model.Container.State { + var resultState = newState + + listOfNotNull(containerStatus.state.terminated, containerStatus.lastState.terminated) + .firstOrNull() + ?.let { terminatedState -> + resultState = handleTerminatedContainer(containerStatus, terminatedState) + } + + return resultState + } + + private fun handleTerminatedContainer( + containerStatus: ContainerStatus, + terminatedState: ContainerStateTerminated, + ): no.acntech.easycontainers.model.Container.State { + log.info( + "Container ${containerStatus.name} terminated with signal '${terminatedState.signal}', " + + "reason: ${terminatedState.reason}, message: '${terminatedState.message}'" + ) + + // Update finish time and exit code upon termination + terminatedState.finishedAt?.let { + finishedAt = Instant.parse(it) + } + + terminatedState.exitCode?.let { code -> + exitCode = code.also { + log.info("Container '${getName()}' exited with code: $code") + } + } + + // Check if the container was terminated due to an error + return if (terminatedState.reason.lowercase().contains("error")) { + log.warn( + "Container '${containerStatus.name}' terminated due to '" + + " ${terminatedState.reason}': ${terminatedState.message}" + ) + no.acntech.easycontainers.model.Container.State.FAILED + + } else { + // When a container is terminated, we consider the pod to be STOPPED + no.acntech.easycontainers.model.Container.State.STOPPED + } + } + + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.kt new file mode 100644 index 00000000..84e1850c --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sServiceRuntime.kt @@ -0,0 +1,312 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.api.model.* +import io.fabric8.kubernetes.api.model.apps.Deployment +import io.fabric8.kubernetes.api.model.apps.DeploymentSpec +import io.fabric8.kubernetes.client.KubernetesClient +import io.fabric8.kubernetes.client.utils.Serialization +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.model.Host +import no.acntech.easycontainers.util.lang.prettyPrintMe +import no.acntech.easycontainers.util.text.NEW_LINE +import org.awaitility.Awaitility +import java.time.Instant +import java.util.concurrent.TimeUnit + +/** + * Represents a Kubernetes service runtime that deploys and manages a container and associated resources. + * + * @property container The container to be deployed. + * @property client The Kubernetes client used to interact with the cluster. + */ +class K8sServiceRuntime( + container: GenericContainer, + client: KubernetesClient = K8sClientFactory.createDefaultClient(), +) : K8sRuntime(container, client) { + + private var deployment = createDeployment() + + private var service: Service? = + if (container.getExposedPorts().isNotEmpty()) { + createService(isNodePort = K8sUtils.isRunningOutsideCluster()) + } else { + null + } + + init { + service?.let { nonNullService -> + val serviceName = nonNullService.metadata.name + val namespace = nonNullService.metadata.namespace + host = Host.of("$serviceName.$namespace.svc.cluster.local").also { + log.info("Container (service) host: $it") + } + } + } + + override fun stop() { + log.debug("Stopping container: ${container.getName()}") + + container.requireOneOfStates( + no.acntech.easycontainers.model.Container.State.RUNNING, + no.acntech.easycontainers.model.Container.State.FAILED + ) + + val exists = client.apps() + .deployments() + .inNamespace(container.getNamespace().value) + .withName(getResourceName()) + .get() != null + + if (exists) { + log.debug("Scaling Deployment for pod/container to 0: ${container.getName()}") + + client.apps() + .deployments() + .inNamespace(container.getNamespace().value) + .withName(getResourceName()) + .scale(0) + + // Await the pod to be removed + Awaitility.await() + .atMost(120, TimeUnit.SECONDS) + .pollInterval(1, TimeUnit.SECONDS) + .until { + client.pods() + .inNamespace(container.getNamespace().value) + .withName(podName) + .get() == null + } + + finishedAt = Instant.now() + + } else { + log.warn("Deployment to stop (scale to 0) not found: ${getResourceName()}") + } + + super.stop() + } + + override fun kill() { + log.debug("Killing container: ${container.getName()}") + + container.requireOneOfStates( + no.acntech.easycontainers.model.Container.State.RUNNING, + no.acntech.easycontainers.model.Container.State.FAILED + ) + deleteDeploymentIfExists(true) + finishedAt = Instant.now() + container.changeState(no.acntech.easycontainers.model.Container.State.STOPPED) + } + + override fun deploy() { + log.debug("Creating Deployment '${getResourceName()}' in namespace '$namespace'") + + createNamespaceIfAllowedAndNotExists() + deleteService() + deleteDeploymentIfExists() + + deployment = client.apps() + .deployments() + .inNamespace(container.getNamespace().value) + .resource(deployment) + .create().also { + log.info("Created k8s deployment: ${it.prettyPrintMe()}") + } + + service?.let { + service = client.services() + .inNamespace(namespace) + .resource(service) + .create().also { + log.info("Deployed k8s service: ${it.prettyPrintMe()}") + } + } + } + + override fun getResourceName(): String { + return container.getName().value + DEPLOYMENT_NAME_SUFFIX + } + + override fun deleteResources() { + deleteDeploymentIfExists(true) // Forceful deletion ensures that the deployment is deleted even if it's not stopped + deleteService() + } + + override fun configure(k8sContainer: Container) { + val containerPort = container.getExposedPorts().firstOrNull()?.value + containerPort?.let { port -> + log.info("Exposed port '$port' found for container '${container.getName()}' - creating probes for liveness and readiness") + } + + val (livenessProbe, readinessProbe) = createProbes(containerPort) + k8sContainer.livenessProbe = livenessProbe + k8sContainer.readinessProbe = readinessProbe + } + + override fun configure(podSpec: PodSpec) { + podSpec.restartPolicy = "Always" + } + + private fun createDeployment(): Deployment { + val podTemplateSpec = createPodTemplateSpec() + + val deploymentSpec = DeploymentSpec().apply { + replicas = 1 + selector = LabelSelector(null, selectorLabels) + template = podTemplateSpec + } + + return Deployment().apply { + apiVersion = "apps/v1" + kind = "Deployment" + metadata = getResourceMetaData() + spec = deploymentSpec + }.also { + log.debug("Created Deployment: ${it.prettyPrintMe()}") + log.debug("Deployment YAML:$NEW_LINE${Serialization.asYaml(it)}") + } + } + + private fun createService(isNodePort: Boolean = false): Service { + // Manually creating the service metadata + val serviceMetadata = ObjectMeta() + serviceMetadata.name = container.getName().value + SERVICE_NAME_SUFFIX + serviceMetadata.namespace = namespace + serviceMetadata.labels = createDefaultLabels() + + // Manually creating the service ports + val servicePorts = container.builder.exposedPorts.map { (name, internalPort) -> + ServicePortBuilder() + .withName(name.value) + .withPort(internalPort.value) + .withNewTargetPort(internalPort.value) + .apply { + if (isNodePort && container.hasPortMapping(internalPort)) { + val nodePort = container.getMappedPort(internalPort).value + if (nodePort !in K8sConstants.NODE_PORT_RANGE_START..K8sConstants.NODE_PORT_RANGE_END) { + log.warn( + "The mapped NodePort $nodePort for internal port $internalPort " + + "is outside the recommended range: " + + "${K8sConstants.NODE_PORT_RANGE_START}-${K8sConstants.NODE_PORT_RANGE_END}" + ) + } + withNodePort(nodePort) + } + }.build() + } + + // Manually creating the service spec + val serviceSpec = ServiceSpec().apply { + this.selector = selectorLabels + this.ports = servicePorts + this.type = if (isNodePort) K8sConstants.NODE_PORT_DIRECTIVE else K8sConstants.CLUSTER_IP_DIRECTIVE + } + + // Creating the service object + return Service().apply { + apiVersion = "v1" + kind = "Service" + metadata = serviceMetadata + spec = serviceSpec + }.also { + log.debug("Created service: ${it.prettyPrintMe()}") + log.info("Service YAML:$NEW_LINE${Serialization.asYaml(it)}") + } + } + + private fun createProbes(port: Int?): Pair { + val livenessProbe = Probe().apply { + if (port != null) { + tcpSocket = TCPSocketAction(null, IntOrString(port)) + } else { + exec = ExecAction(listOf("echo", "alive")) + } + initialDelaySeconds = 10 + periodSeconds = 5 + }.also { + log.info("Liveness probe created: $it") + } + + val readinessProbe = Probe().apply { + if (port != null) { + tcpSocket = TCPSocketAction(null, IntOrString(port)) + } else { + exec = ExecAction(listOf("echo", "ready")) + } + initialDelaySeconds = 5 + periodSeconds = 5 + }.also { + log.info("Readiness probe created$NEW_LINE${it.prettyPrintMe()}") + } + + return Pair(livenessProbe, readinessProbe) + } + + private fun deleteDeploymentIfExists(force: Boolean = false) { + findDeployment(namespace, getResourceName())?.let { + log.info("Deleting deployment: ${getResourceName()}") + deleteDeployment(force) + // Tear down all pods if force deletion + if (force) { + deletePods() + } + + // Wait for the deployment to be removed + Awaitility.await() + .atMost(60, TimeUnit.SECONDS) + .pollInterval(500, TimeUnit.MILLISECONDS) + .until { findDeployment(namespace, getResourceName()) == null } + + log.info("Deployment deleted: ${getResourceName()}") + } ?: log.warn("Cannot delete non-existing deployment: ${getResourceName()}") + } + + private fun findDeployment(namespaceName: String, deploymentName: String): Deployment? = + client.apps().deployments().inNamespace(namespaceName).withName(deploymentName).get() + + private fun deleteDeployment(force: Boolean) { + client.apps().deployments() + .inNamespace(namespace) + .withName(getResourceName()) + .apply { + if (force) { + this@K8sServiceRuntime.log.info("Force delete : $${getResourceName()}") + withPropagationPolicy(DeletionPropagation.FOREGROUND) + withGracePeriod(0L) + } + } + .delete() + } + + private fun deletePods() { + for (pod in client.pods().inNamespace(namespace).withLabels(podLabels).list().items) { + client.pods().inNamespace(namespace).withName(podName).delete() + } + } + + private fun deleteService() { + val serviceName = container.getName().value + SERVICE_NAME_SUFFIX + + if (isServiceExisting(serviceName)) { + log.info("Deleting service: $serviceName") + getServiceClient(serviceName) + .delete() + // Wait for the service to be removed + Awaitility.await() + .atMost(30, TimeUnit.SECONDS) + .pollInterval(500, TimeUnit.MILLISECONDS) + .until { !isServiceExisting(serviceName) } + log.info("Service successfully deleted: $serviceName") + + } else log.warn("Service does not exist - nothing to delete: $serviceName") + } + + private fun isServiceExisting(serviceName: String) = getServiceClient(serviceName).get() != null + + private fun getServiceClient(serviceName: String) = client + .services() + .inNamespace(namespace) + .withName(serviceName) + + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sUtils.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sUtils.kt new file mode 100644 index 00000000..4b802388 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/K8sUtils.kt @@ -0,0 +1,173 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.client.KubernetesClientBuilder +import io.fabric8.kubernetes.client.KubernetesClientException +import no.acntech.easycontainers.kubernetes.K8sConstants.ENV_KUBERNETES_SERVICE_HOST +import no.acntech.easycontainers.kubernetes.K8sConstants.ENV_KUBERNETES_SERVICE_PORT +import no.acntech.easycontainers.kubernetes.K8sConstants.SERVICE_ACCOUNT_PATH +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import no.acntech.easycontainers.util.text.HYPHEN +import java.nio.file.Files +import java.nio.file.Paths +import java.time.Instant +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter + +/** + * Object representing utility functions for interacting with Kubernetes cluster. + */ +object K8sUtils { + + private val TOKEN_FILE = Paths.get("$SERVICE_ACCOUNT_PATH/token") + + private val CA_CERT_FILE = Paths.get("$SERVICE_ACCOUNT_PATH/ca.crt") + + private val LABEL_KEY_DNS_SUBDOMAIN_REGEX = "^[a-zA-Z0-9]([a-zA-Z0-9\\-.]{0,251}[a-zA-Z0-9])?$".toRegex() + + private val LABEL_REGEX = "^[a-zA-Z0-9]([a-zA-Z0-9\\-_\\.]{0,61}[a-zA-Z0-9])?$".toRegex() + + private val INVALID_LABEL_CHARS_REGEX = "[^a-zA-Z0-9\\-_\\.]".toRegex() + + private val MULTIPLE_HYPHENS_REGEX = "-+".toRegex() + + private val INVALID_VOLUME_CHARS_REGEX = "[^a-z0-9-]".toRegex() + + private val INSTANT_LABEL_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'").withZone(ZoneOffset.UTC) + + // Define maximum lengths + private const val MAX_PREFIX_LENGTH = 253 + private const val MAX_LABEL_LENGTH = 63 + private const val MAX_VOLUME_NAME_LENGTH = 63 + + /** + * Checks whether the current application is running inside a cluster. + * + * @return True if the application is running inside a cluster, False otherwise. + */ + fun isRunningInsideCluster(): Boolean { + return System.getenv(ENV_KUBERNETES_SERVICE_HOST) != null && + System.getenv(ENV_KUBERNETES_SERVICE_PORT) != null && + Files.exists(TOKEN_FILE) && + Files.exists(CA_CERT_FILE) + } + + /** + * Checks if the application is running outside of a cluster. + * + * @return `true` if the application is running outside of a cluster, `false` otherwise. + */ + fun isRunningOutsideCluster(): Boolean { + return !isRunningInsideCluster() + } + + /** + * Checks if the current user has access to the Cluster API. + * + * @return true if the user has access to the Cluster API, false otherwise. + */ + fun canAccessClusterAPI(): Boolean { + return try { + KubernetesClientBuilder().build().use { client -> + client.pods().list() + true + } + } catch (e: KubernetesClientException) { + false + } + } + + /** + * Checks if the given label key is legal. + */ + fun isLegalLabelKey(key: String): Boolean { + val parts = key.split(FORWARD_SLASH) + return when { + parts.size > 2 -> false + parts.size == 2 -> LABEL_KEY_DNS_SUBDOMAIN_REGEX.matches(parts[0]) && LABEL_REGEX.matches(parts[1]) + else -> LABEL_REGEX.matches(key) + } + } + + /** + * Checks if the given value is a legal label value. + * + * @param value the value to be checked + * @return true if the value is a legal label value, false otherwise + */ + fun isLegalLabelValue(value: String): Boolean { + return LABEL_REGEX.matches(value) + } + + fun normalizeConfigMapName(name: String): String { + return normalizeLabelKey(name) + } + + /** + * Normalizes the given label key by separating the prefix and name if a forward slash is present, + * normalizing the prefix and name by replacing invalid label characters with hyphens, removing + * multiple consecutive hyphens, trimming the prefix and name to their respective maximum lengths, + * and converting the prefix and name to lowercase. The normalized label key is then constructed + * by concatenating the normalized prefix and name, separated by a forward slash if the prefix is not empty. + * + * @param labelKey The label key to be normalized. + * @return The normalized label key. + */ + fun normalizeLabelKey(labelKey: String): String { + // Separate prefix and name if a slash is present + val parts = labelKey.split(FORWARD_SLASH) + val (prefix, name) = when { + parts.size > 1 -> Pair(parts[0], parts[1]) + else -> Pair(EMPTY_STRING, labelKey) + } + + // Normalize prefix and name + val normalizedPrefix = prefix.replace(INVALID_LABEL_CHARS_REGEX, "-") + .replace(MULTIPLE_HYPHENS_REGEX, "-") + .take(MAX_PREFIX_LENGTH) + .trim('-') + .lowercase() + + val normalizedName = name.replace(INVALID_LABEL_CHARS_REGEX, "-") + .replace(MULTIPLE_HYPHENS_REGEX, "-") + .take(MAX_LABEL_LENGTH) + .trim('-') + .lowercase() + + // Construct the normalized label key + return if (normalizedPrefix.isNotEmpty()) "$normalizedPrefix/$normalizedName" else normalizedName + } + + /** + * Normalizes the given label value by replacing invalid characters, removing multiple hyphens, + * trimming leading and trailing hyphens and underscores, and limiting the length to [MAX_LABEL_LENGTH]. + * + * @param value The label value to normalize. + * @return The normalized label value. + */ + fun normalizeLabelValue(value: String): String { + return value.replace(INVALID_LABEL_CHARS_REGEX, HYPHEN) + .replace(MULTIPLE_HYPHENS_REGEX, HYPHEN) + .take(MAX_LABEL_LENGTH) + .trim { it == '-' || it == '_' } + } + + fun normalizeVolumeName(value: String): String { + return value.lowercase() + .replace(INVALID_VOLUME_CHARS_REGEX, "-") + .replace(MULTIPLE_HYPHENS_REGEX, "-") + .take(MAX_VOLUME_NAME_LENGTH) + .trim('-') + } + + /** + * Converts an Instant to a legal label value. + * + * @param instant The Instant to convert to a label value. + * @return The label value representation of the Instant. + */ + fun instantToLabelValue(instant: Instant): String { + return INSTANT_LABEL_FORMATTER.format(instant) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/LoggingWatcher.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/LoggingWatcher.kt new file mode 100644 index 00000000..48344882 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/LoggingWatcher.kt @@ -0,0 +1,33 @@ +package no.acntech.easycontainers.kubernetes + +import io.fabric8.kubernetes.client.Watcher +import io.fabric8.kubernetes.client.WatcherException +import no.acntech.easycontainers.util.lang.prettyPrintMe +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +/** + * An implementation of the Watcher interface that logs events and exceptions. + * + * @param T the type of the watched resource + * @property log the logger instance for logging events and exceptions + */ +internal class LoggingWatcher( + val log: Logger = LoggerFactory.getLogger(LoggingWatcher::class.java), +) : Watcher { + + override fun eventReceived(action: Watcher.Action?, resource: Any?) { + val actionName = action?.name ?: "UNKNOWN" + val resourceInfo = resource?.prettyPrintMe() ?: "null" + log.debug("LoggingWatcher: received event [$actionName] on resource: $resourceInfo") + } + + override fun onClose(cause: WatcherException?) { + if (cause != null) { + log.debug("LoggingWatcher: closed due to an exception: ${cause.message}", cause) + } else { + log.debug("LoggingWatcher: closed without any exception") + } + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/kubernetes/PodPhase.kt b/src/main/kotlin/no/acntech/easycontainers/kubernetes/PodPhase.kt new file mode 100644 index 00000000..c80ff353 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/kubernetes/PodPhase.kt @@ -0,0 +1,13 @@ +package no.acntech.easycontainers.kubernetes + +/** + * Represents the different phases of a pod in a Kubernetes cluster. + */ +enum class PodPhase { + PENDING, + RUNNING, + SUCCEEDED, + FAILED, + UNKNOWN, + ; +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Arg.kt b/src/main/kotlin/no/acntech/easycontainers/model/Arg.kt new file mode 100644 index 00000000..9debe759 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Arg.kt @@ -0,0 +1,39 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a kubernetes/docker command argument. + */ +@JvmInline +value class Arg(val value: String) : SimpleValueObject { + + companion object { + + private val REGEXP: Regex = "^[a-zA-Z0-9_\\-.]+\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 255, +// lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): Arg { + return Arg(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Args.kt b/src/main/kotlin/no/acntech/easycontainers/model/Args.kt new file mode 100644 index 00000000..76cfa574 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Args.kt @@ -0,0 +1,43 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.util.text.splitOnWhites + +/** + * Value object representing a list of kubernetes/docker command arguments. + */ +data class Args(val args: List) { + + companion object { + + /** + * Creates an Args object from a whitespace separated string. Note that this wont work for arguments containing + * spaces/whites. + * + * @param value The whitespace separated string to create the Args object from. + * @return The Args object. + */ + fun ofWhiteSpaceSeparated(value: String): Args { + return of(value.splitOnWhites()) + } + + fun of(values: List): Args { + return of(*values.toTypedArray()) + } + + fun of(vararg values: String): Args { + val argList = values.map { Arg.of(it) } + return Args(argList) + } + + } + + fun toStringList(): List { + return args.map { it.unwrap() } + } + + override fun toString(): String { + return args.joinToString(" ") + } + +} + diff --git a/src/main/kotlin/no/acntech/easycontainers/model/CPU.kt b/src/main/kotlin/no/acntech/easycontainers/model/CPU.kt new file mode 100644 index 00000000..de5ac4fe --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/CPU.kt @@ -0,0 +1,47 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.lang.RangeValidator + +/** + * Value object representing a kubernetes/docker cpu request or limit. + */ +@JvmInline +value class CPU(val value: Double) : SimpleValueObject { + + companion object { + + const val MILLI_CPU_SUFFIX = "m" + + private val VALIDATOR = RangeValidator( + inclusiveMin = 0.001, + exclusiveMax = 64.0 + ) + + + fun of(value: String): CPU { + val numericValue = if (value.endsWith(MILLI_CPU_SUFFIX)) { + value.removeSuffix(MILLI_CPU_SUFFIX).toDoubleOrNull()?.div(1000) + } else { + value.toDoubleOrNull() + } + + requireNotNull(numericValue) { "Invalid CPU request/limit format: $value" } + + return CPU(numericValue) + } + + fun of(value: Double): CPU = CPU(value) + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): Double { + return value + } + + override fun toString(): String = if (value < 1) "${(value * 1000).toInt()}$MILLI_CPU_SUFFIX" else value.toString() + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Container.kt b/src/main/kotlin/no/acntech/easycontainers/model/Container.kt new file mode 100644 index 00000000..a96abe38 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Container.kt @@ -0,0 +1,364 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.output.OutputLineCallback +import java.io.InputStream +import java.io.OutputStream +import java.net.InetAddress +import java.nio.file.Files +import java.nio.file.Path +import java.time.Duration +import java.util.concurrent.TimeUnit + +interface Container { + + /** + * Represents the state of a container. + */ + enum class State { + + /** + * The container is in an uninitiated state. + */ + UNINITIATED, + + /** + * The container is being initialized. + */ + INITIALIZING, + + /** + * The container is running. + */ + RUNNING, + + /** + * The container has failed. + */ + FAILED, + + /** + * The container is being terminated. + */ + TERMINATING, + + /** + * The container is in an unknown state. + */ + UNKNOWN, + + /** + * The container has been gracefully or forcefully stopped. + */ + STOPPED, + + /** + * The container has been removed from the underlying container platform. + */ + DELETED + } + + + /** + * Retrieves the (underlying) runtime of the container. + */ + fun getRuntime(): ContainerRuntime + + /** + * Retrieves the execution mode of the container. + * + * @return the execution mode of the container as an ExecutionMode enum value + */ + fun getExecutionMode(): ExecutionMode + + /** + * Returns the name of the container. + * + * @return the name of the container as a ContainerName object + */ + fun getName(): ContainerName + + /** + * Returns the namespace of the container. + */ + fun getNamespace(): Namespace + + /** + * Retrieves the labels associated with the container. + * + * @return a map of LabelKey to LabelValue representing the labels + */ + fun getLabels(): Map + + fun getNetworkName(): NetworkName? + + /** + * Retrieves the environment variables associated with the container. + * + * @return a map containing the environment variable keys and values + */ + fun getEnv(): Map + + // Command + + /** + * Retrieves the executable command for the container. + *

      + * Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's + * image for both Docker and kubernetes. + * + * @return the executable command as an Executable object, or null if no command is specified + */ + fun getCommand(): Executable? + + /** + * Retrieves the command arguments for the container. + *

      + * Note that setting a command (and/or args) will effectively neutralize the ENTRYPOINT directive in the container's + * + * @return the command arguments as an instance of Args, or null if there are no arguments. + */ + fun getArgs(): Args? + + // Image + + /** + * Retrieves the image for the container. + * + * @return the URL of the image + */ + fun getImage(): ImageURL + + fun getVolumes(): List + + // Ports + + /** + * Returns the list of network ports exposed by the container. + * + * @return the list of exposed network ports as a List of NetworkPort objects + */ + fun getExposedPorts(): List + + /** + * Returns the mapped port for the specified network port. + * + * @param port the network port for which to retrieve the mapped port + * @return the mapped port as a NetworkPort object + */ + fun getMappedPort(port: NetworkPort): NetworkPort + + /** + * Retrieves the port mappings for the container. + * + * @return a map of NetworkPort to NetworkPort representing the port mappings. + */ + fun getPortMappings(): Map + + /** + * Checks if the given network port has a mapping defined in the container's port mappings. + * + * @param port The network port to check + * @return true if the port has a mapping, false otherwise + */ + fun hasPortMapping(port: NetworkPort): Boolean { + return getPortMappings().containsKey(port) + } + + /** + * Checks whether the container is ephemeral. + * + * @return true if the container is ephemeral, false otherwise + */ + + fun isEphemeral(): Boolean + + /** + * Retrieves the host of the container. + * + * @return the host of the container as a [Host] object, or null if the host is not set + */ + + fun getHost(): Host? + + /** + * Retrieves the IP address of the container. + */ + fun getIpAddress(): InetAddress? + + /** + * Retrieves the duration of the container execution (RUNNING state). If running, returns the time since the container + * was started, if stopped, returns the time the container was running. + */ + fun getDuration(): Duration? + + fun getMaxLifeTime(): Duration? + + /** + * Retrieves the exit code of the container. + * + * @return the exit code of the container, or null if the container is still running or has never been started. + */ + fun getExitCode(): Int? + + /** + * Retrieves the log output callback of the container. + */ + fun getOutputLineCallback(): OutputLineCallback + + /** + * Executes a command in the container. + *

      + * Note that for Docker, std out and std err are combined in the std out result - hence the std error string is always empty. + * + * @param executable the command to execute + * @param args the arguments to pass to the command + * @param workingDir the working directory for the command + * @param input the input stream to pass to the command + * + * @param waitTimeValue the time to wait for the command to complete + * @param waitTimeUnit the time unit for the wait time + * @return a pair of the exit code and the std error output + */ + fun execute( + executable: Executable, + args: Args? = null, + useTty: Boolean = false, + workingDir: UnixDir? = null, + input: InputStream? = null, + output: OutputStream = OutputStream.nullOutputStream(), + waitTimeValue: Long? = null, + waitTimeUnit: TimeUnit? = null, + ): Pair + + fun execute( + command: List, + useTty: Boolean = false, + workingDir: String? = null, + input: InputStream? = null, + output: OutputStream = OutputStream.nullOutputStream(), + waitTimeValue: Long? = null, + waitTimeUnit: TimeUnit? = null, + ): Pair { + return execute( + Executable.of(command.first()), + Args.of(command.drop(1)), + useTty, + workingDir?.let { UnixDir.of(it) }, + input, + output, + waitTimeValue, + waitTimeUnit + ) + } + + /** + * Uploads a file to the container. + * + * @param localFile the path of the file to upload - + * @param remoteDir the path where the file will be uploaded in the container - if it doesn't exist, it will be attempted created + * @param remoteFilename the name of the file in the container - if null, the file will be uploaded with the same name as the + * local file + * @return the size of the file in bytes + */ + fun putFile(localFile: Path, remoteDir: UnixDir, remoteFilename: String? = null): Long + + fun putFile(localFile: String, remoteDir: String, remoteFilename: String? = null): Long { + return putFile(Path.of(localFile), UnixDir.of(remoteDir), remoteFilename) + } + + /** + * Downloads a file from the container. + * + * @param remoteDir the path of the file to download + * @param remoteFilename the name of the file in the container + * @param localPath the path where the file will be downloaded to - if null, the file will be downloaded to the current + * directory, with the same name as the remote file, if not null, the file will be downloaded with the + * specified name unless the path is a directory, in which case the file will be downloaded to the directory + * with the same name as the remote file + * @return the path of the downloaded file + */ + fun getFile(remoteDir: UnixDir, remoteFilename: String, localPath: Path? = null): Path + + fun getFile(remoteDir: String, remoteFilename: String, localPath: String? = null): Path { + return getFile(UnixDir.of(remoteDir), remoteFilename, localPath?.let { Path.of(it) }) + } + + /** + * Uploads a directory to the container. Note that the uploaded files and directoroes include the + * the directory itself and all its contents. + * + * @param localDir the path of the directory to upload + * @param remoteDir the path where the directory will be uploaded in the container + * @return the size of the directory in bytes + */ + fun putDirectory(localDir: Path, remoteDir: UnixDir): Long + + + /** + * Uploads a directory to the container. Note that the uploaded files and directories include the + * the directory itself and all its contents. + * + * @param localDir the path of the directory to upload + * @param remoteDir the path where the directory will be uploaded in the container + * @return the size of the transferred directory in bytes + */ + fun putDirectory(localDir: String, remoteDir: String): Long { + return putDirectory(Path.of(localDir), UnixDir.of(remoteDir)) + } + + /** + * Downloads a directory from the container. Note that the downloaded files and directories include + * the directory itself and all its contents. + * + * @param remoteDir the path of the directory to download + * @param localDir the path where the directory will be downloaded to, defaults to a temporary directory + * @return a pair of the path of the downloaded directory and a list of the paths of the downloaded files + */ + fun getDirectory( + remoteDir: UnixDir, + localDir: Path = Files.createTempDirectory("container-download-tar").toAbsolutePath(), + ): Pair> + + /** + * Downloads a directory from the container. Note that the downloaded files and directories include + * the directory itself and all its contents. + * + * @param remoteDir the path of the directory to download + * @param localDir the path where the directory will be downloaded to, defaults to a temporary directory + * @return a pair of the path of the downloaded directory and a list of the paths of the downloaded files + */ + fun getDirectory(remoteDir: String, localDir: String): Pair> { + return getDirectory(UnixDir.of(remoteDir), Path.of(localDir)) + } + + /** + * Retrieves the state of the container. + * + * @return the state of the container as a ContainerState enum value + */ + fun getState(): State + + /** + * Wait for the container to reach the specified state. + * + * @param state the expected state of the container + * @param timeout the maximum time to wait for the container to reach the state, default is 0 which means indefinite wait + * @param unit the time unit of the timeout, default is seconds + */ + fun waitForState(state: State, timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean + + /** + * Wait for the container to stop. The default implementation waits indefinitely for the ContainerState.STOPPED state. + * + * @param timeout the maximum time to wait for the container to stop, default is 0 which means indefinite wait + * @param unit the time unit of the timeout, default is seconds + */ + fun waitForCompletion(timeout: Long = 0, unit: TimeUnit = TimeUnit.SECONDS): Boolean { + return waitForState(State.STOPPED, timeout, unit) + } + + fun onDelete() { + // no-op + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerBuilder.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerBuilder.kt new file mode 100644 index 00000000..f7c273cf --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerBuilder.kt @@ -0,0 +1,486 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.output.OutputLineCallback +import no.acntech.easycontainers.util.text.COLON +import no.acntech.easycontainers.util.text.SPACE +import java.math.BigInteger +import java.time.Duration +import java.time.temporal.ChronoUnit +import java.util.concurrent.TimeUnit + +/** + * A builder interface for creating container configurations. + * + * @param SELF The type of the builder itself. + */ +interface ContainerBuilder> { + + fun withContainerPlatformType(type: ContainerPlatformType): SELF + + /** + * Sets the execution mode for the container. + * + * @param executionMode The execution mode to be set. + * @return The updated ContainerBuilder instance. + */ + fun withExecutionMode(executionMode: ExecutionMode): SELF + + /** + * Returns a new instance of the container object with the specified name. + * + * @param name the name of the container + * @return a new instance of the container object with the specified name + */ + fun withName(name: ContainerName): SELF + + /** + * Sets the name of the container. + * + * @param name The name of the container. + * @return The updated ContainerBuilder instance. + */ + fun withName(name: String): SELF { + return withName(ContainerName.of(name)) + } + + /** + * Sets the namespace for the ContainerBuilder. + * + * @param namespace The namespace to set. + * @return The updated ContainerBuilder instance. + */ + fun withNamespace(namespace: Namespace): SELF + + /** + * Sets the namespace for the container. + * + * @param namespace The namespace to set for the container. + * @return The updated ContainerBuilder instance. + */ + fun withNamespace(namespace: String): SELF { + return withNamespace(Namespace.of(namespace)) + } + + /** + * Adds a label to the container with the given key and value. + * + * @param key the key of the label + * @param value the value of the label + * @return The updated ContainerBuilder instance. + */ + fun withLabel(key: LabelKey, value: LabelValue): SELF + + /** + * Adds a label with the provided key-value pair to the container. + * + * @param key the label key + * @param value the label value + * @return The updated ContainerBuilder instance. + */ + fun withLabel(key: String, value: String): SELF { + return withLabel(LabelKey.of(key), LabelValue.of(value)) + } + + /** + * Adds an environment variable with the specified key and value. + * + * @param key The key of the environment variable. + * @param value The value of the environment variable. + * @return The updated ContainerBuilder instance. + */ + fun withEnv(key: String, value: String): SELF { + return withEnv(EnvVarKey.of(key), EnvVarValue.of(value)) + } + + /** + * Sets an environment variable with the given key and value. + * + * @param key The key of the environment variable. + * @param value The value of the environment variable. + * @return The updated ContainerBuilder instance. + */ + fun withEnv(key: EnvVarKey, value: EnvVarValue): SELF + + /** + * Sets the environment variables for the container. + * + * @param env a map containing the environment variable keys and values + * @return The updated ContainerBuilder instance. + */ + fun withEnv(env: Map): SELF + + /** + * Sets the environment variables of the container using a map of string key-value pairs. + * + * @param env the environment variables as a map of string key-value pairs + * @return The updated ContainerBuilder instance. + */ + fun withEnvAsStringMap(env: Map): SELF { + return withEnv(env.mapKeys { EnvVarKey.of(it.key) }.mapValues { EnvVarValue.of(it.value) }) + } + + /** + * Sets the command for the container. + * + * @param command the executable command to be set + * @return The updated ContainerBuilder instance. + */ + fun withCommand(command: Executable): SELF + + /** + * Sets the command for the container. + * + * @param command the command to be set for the container + * @return The updated ContainerBuilder instance. + * + * @see Executable + */ + fun withCommand(command: String): SELF { + return withCommand(Executable.of(command)) + } + + /** + * Sets the command arguments for the container. + * + * @param args The command arguments to be set for the container. + * @return The updated ContainerBuilder instance. + */ + fun withArgs(args: Args): SELF + + /** + * Sets the arguments for the container. + * + * @param args the arguments as an instance of Args. + * @return The updated ContainerBuilder instance. + */ + fun withArgs(args: List): SELF { + return withArgs(Args.of(args)) + } + + /** + * Set the image to use for the container. + * + * @param image The image to use for the container. + * @return The updated ContainerBuilder instance. + */ + fun withImage(image: ImageURL): SELF + + /** + * Sets the image for the container using the given image URL. + * + * @param image the image URL to set for the container + * @return The updated ContainerBuilder instance. + */ + fun withImage(image: String): SELF { + return withImage(ImageURL.of(image)) + } + + /** + * Adds an exposed port to the container configuration. + * + * @param name The name of the port mapping. + * @param port The network port to expose. + * @return The updated ContainerBuilder instance. + */ + fun withExposedPort(name: PortMappingName, port: NetworkPort): SELF + + /** + * Sets the exposed port for the container by specifying the name and port number. + * + * @param name the name of the port mapping + * @param port the port number to expose + * @return The updated ContainerBuilder instance. + */ + fun withExposedPort(name: String, port: Int): SELF { + return withExposedPort(PortMappingName.of(name), NetworkPort.of(port)) + } + + /** + * Maps a container exposed network port to another network port. + * + * @param port The network port to be mapped. + * @param mappedPort The mapped network port. + * @return The updated ContainerBuilder instance. + * @throws IllegalArgumentException if the `port` is not exposed. + */ + fun withPortMapping(port: NetworkPort, mappedPort: NetworkPort): SELF + + /** + * Sets the port mapping for the container. + * + * @param port The port of the container. + * @param mappedPort The mapped port for the container. + * @return The updated ContainerBuilder instance. + */ + fun withPortMapping(port: Int, mappedPort: Int): SELF { + return withPortMapping(NetworkPort.of(port), NetworkPort.of(mappedPort)) + } + + /** + * Sets the network name for the container. + * + * @param networkName the network name to set + * @return The updated ContainerBuilder instance. + */ + fun withNetworkName(networkName: NetworkName): SELF + + /** + * Sets the network name for the container. + * + * @param networkName the name of the network to be set + * @return The updated ContainerBuilder instance. + */ + fun withNetworkName(networkName: String): SELF { + return withNetworkName(NetworkName.of(networkName)) + } + + /** + * Sets the CPU request for the container. + * + * @param cpuRequest The CPU request for the container. + * @return The updated ContainerBuilder instance. + */ + fun withCpuRequest(cpuRequest: CPU): SELF + + /** + * Sets the CPU request for the container. + * + * @param cpuRequest the CPU request for the container + * @return The updated ContainerBuilder instance. + */ + fun withCpuRequest(cpuRequest: Double): SELF { + return withCpuRequest(CPU.of(cpuRequest)) + } + + /** + * Sets the CPU request for the container. + * + * @param cpuRequest the CPU request for the container + * @return The updated ContainerBuilder instance. + */ + fun withCpuRequest(cpuRequest: String): SELF { + return withCpuRequest(CPU.of(cpuRequest)) + } + + /** + * Sets the CPU limit for the container. + * + * @param cpuLimit The CPU limit to be set for the container. + * @return The updated ContainerBuilder instance. + */ + fun withCpuLimit(cpuLimit: CPU): SELF + + /** + * Sets the CPU limit for the container. + * + * @param cpuLimit The CPU limit as a [CPU] object. + * @return The updated ContainerBuilder instance. + */ + fun withCpuLimit(cpuLimit: Double): SELF { + return withCpuLimit(CPU.of(cpuLimit)) + } + + /** + * Sets the CPU limit for the container. + * @param cpuLimit The CPU limit to set for the container. + * @return The updated ContainerBuilder instance. + */ + fun withCpuLimit(cpuLimit: String): SELF { + return withCpuLimit(CPU.of(cpuLimit)) + } + + /** + * + */ + fun withMemoryRequest(memoryRequest: Memory): SELF + + /** + * Performs the task with the given memory request. + * + * @param memoryRequest The memory request to be used. + * @return The updated ContainerBuilder instance. + */ + fun withMemoryRequest(memoryRequest: String): SELF { + return withMemoryRequest(Memory.of(memoryRequest)) + } + + /** + * Sets the memory request for the container. + * + * @param memoryRequest the memory request to be set + * @return The updated ContainerBuilder instance. + */ + fun withMemoryRequest(memoryRequest: BigInteger): SELF { + return withMemoryRequest(Memory.of(memoryRequest)) + } + + /** + * Sets the memory limit for the container. + * + * @param memoryLimit The memory limit to set for the container. + * @return The updated ContainerBuilder instance. + */ + fun withMemoryLimit(memoryLimit: Memory): SELF + + /** + * Sets the memory limit for the current operation. + * + * @param memoryLimit the memory limit to be set. The memory limit should be specified as a string, + * representing the amount of memory in a human-readable format. For example, + * "1G" represents 1 gigabyte, "2M" represents 2 megabytes. + * @return The updated ContainerBuilder instance. + */ + fun withMemoryLimit(memoryLimit: String): SELF { + return withMemoryLimit(Memory.of(memoryLimit)) + } + + /** + * Sets the memory limit for the container in bytes. + * + * @param memoryLimit The memory limit for the container as a BigInteger. + * @return The updated ContainerBuilder instance. + */ + fun withMemoryLimit(memoryLimit: BigInteger): SELF { + return withMemoryLimit(Memory.of(memoryLimit)) + } + + /** + * Sets the memory limit for the container in bytes given as a long, hence limited to the maximum value of a long. + * + * @param memoryLimit The memory limit for the container as a long. + * @return The updated ContainerBuilder instance. + */ + fun withMemoryLimit(memoryLimit: Long): SELF { + return withMemoryLimit(BigInteger.valueOf(memoryLimit)) + } + + /** + * Sets the ephemeral flag for the container. + * If the ephemeral flag is set to true, the container will be deleted after it has stopped. + * @param ephemeral The ephemeral flag to be set. + */ + fun withIsEphemeral(ephemeral: Boolean): SELF + + /** + * Sets the line callback for logging purposes. + * + * @param outputLineCallback The line callback to be used for logging. + * @return The updated ContainerBuilder instance. + */ + fun withOutputLineCallback(outputLineCallback: OutputLineCallback): SELF + + fun withContainerFile(file: ContainerFile): SELF + + /** + * Adds a container file to the builder. + * + * @param name The name of the file in the container + * @param path The path in the container where the file will be mounted. + * @param data The content of the file as a key-value map + * @param keyValSeparator The separator between the key and value in the content of the file (default is ": ") + * @return The updated ContainerBuilder instance. + */ + fun withContainerFile( + name: ContainerFileName, + path: UnixDir, + data: Map, + keyValSeparator: String = "$COLON$SPACE", + ): SELF { + val content = data.entries.joinToString("\n") { (key, value) -> "$key$keyValSeparator$value" } + return withContainerFile(name, path, content) + } + + fun withContainerFile( + name: String, + path: String, + data: Map, + keyValSeparator: String = "$COLON$SPACE", + ): SELF { + return withContainerFile(ContainerFileName.of(name), UnixDir.of(path), data, keyValSeparator) + } + + fun withContainerFile(name: String, mountPath: String, content: String): SELF { + return withContainerFile(ContainerFileName.of(name), UnixDir.of(mountPath), content) + } + + /** + * Adds a file to the container with the specified name, path, and content. + * + * @param name The name of the file in the container + * @param path The path in the container where the file will be mounted. + * @param content The content of the file + * @return The updated ContainerBuilder instance. + */ + fun withContainerFile(name: ContainerFileName, path: UnixDir, content: String): SELF { + return withContainerFile(ContainerFile(name, path, content)) + } + + fun withVolume(name: String, mountPath: String): SELF { + return withVolume(VolumeName.of(name), UnixDir.of(mountPath)) + } + + /** + * Sets the volume name and mount path for the current instance of the object. + * + * @param name The name of the volume to be set. + * @param mountPath The mount path to be set as the mount point for the volume. + * @return An instance of the object with the volume name and mount path set. + */ + fun withVolume(name: VolumeName, mountPath: UnixDir): SELF { + return withVolume(Volume(name, mountPath)) + } + + /** + * Sets the volume for the container. + * + * @param volume The volume to be added or mapped into the container. + * @return The updated ContainerBuilder instance. + */ + fun withVolume(volume: Volume): SELF + + /** + * Sets the maximum lifetime for the container. + * + * @param maxLifeTime The maximum lifetime of the container. + * @return The updated ContainerBuilder instance. + */ + fun withMaxLifeTime(maxLifeTime: Duration): SELF + + /** + * Sets the maximum lifetime for the container. + * + * @param value The value of the maximum lifetime. + * @param unit The unit of time for the maximum lifetime. + * @return The updated ContainerBuilder instance. + */ + fun withMaxLifeTime(value: Long, unit: ChronoUnit): SELF { + return withMaxLifeTime(Duration.of(value, unit)) + } + + /** + * Sets the maximum life time for the object. + * + * @param value the value of the maximum lifetime + * @param unit the time unit of the maximum lifetime + * @return this object with the maximum lifetime set + */ + fun withMaxLifeTime(value: Long, unit: TimeUnit): SELF { + return withMaxLifeTime(value, unit.toChronoUnit()) + } + + /** + * Adds a custom property to the container. + * + * @param key the key of the custom property + * @param value the value of the custom property + * @return The updated ContainerBuilder instance. + */ + fun withCustomProperty(key: String, value: Any): SELF + + /** + * This method is used to build a Container object. + * + * @return A Container object after building it. + */ + fun build(): Container +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerFile.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerFile.kt new file mode 100644 index 00000000..503a4693 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerFile.kt @@ -0,0 +1,30 @@ +package no.acntech.easycontainers.model + +import java.nio.file.Path + +/** + * Value object representing a file to be added or mapped into a container. + *

        + *
      • For Docker this becomes a bind mount, and if hostFile is set, the file will be mounted from the host, otherwise + * a temporary file will be as the source for the bind mount. Either way the file will be populated with 'content' if set
      • + * + *
      • Note that a in Docker a bind mount is a synchronization mechanism between the host and the container, and any changes to + * the file made by any of the parties will be reflected in the other party.
      • + * + *
      • For Kubernetes an object of this class becomes a ConfigMap and the 'content' parameter will be used to populate the + * contents of the key mapped to a file. Note that Kubernetes implementation will use the individual mount file approach + * hence avoiding obscuring an existing directory in the container's file system.
      • + *
      + * + * @param name The name of the file in the container. + * @param mountPath The path in the container where the file will be mounted. + * @param content Optional content - valid for both Docker and Kubernetes - if set, the mounted file will be populated with this + * content. + * @param hostFile Only valid for Docker - if not set a temporary file will be created and used as the source for the bind mount. + */ +data class ContainerFile( + val name: ContainerFileName, + val mountPath: UnixDir, + val content: String? = null, + val hostFile: Path? = null, +) \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerFileName.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerFileName.kt new file mode 100644 index 00000000..92242b67 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerFileName.kt @@ -0,0 +1,42 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a file name for a file to be added or mapped into a container. + */ +@JvmInline +value class ContainerFileName(val value: String) : SimpleValueObject { + + companion object { + + // Matches strings that consist of one or more characters, + // where each character is a lowercase or uppercase letter, a digit, an underscore, a period, or a hyphen. + private val REGEXP: Regex = "^[a-zA-Z0-9_.-]+$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 63, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): ContainerFileName { + return ContainerFileName(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerName.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerName.kt new file mode 100644 index 00000000..698cd08a --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerName.kt @@ -0,0 +1,46 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing the common rules for Docker and Kubernetes container names. Note that both container platforms + * have specific rules beyond these common rules. + */ +@JvmInline +value class ContainerName(val value: String) : SimpleValueObject { + + + companion object { + + // Matches strings that start with a lowercase letter or a digit, + // followed by zero or more lowercase letters, digits, or hyphens, + // and if there are such, end with a lowercase letter or digit. + private val REGEXP: Regex = "^[a-z0-9]([-a-z0-9]*[a-z0-9])?\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 253, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): ContainerName { + return ContainerName(value) + } + + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerPlatformType.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerPlatformType.kt new file mode 100644 index 00000000..2492d884 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerPlatformType.kt @@ -0,0 +1,9 @@ +package no.acntech.easycontainers.model + +/** + * Enum class representing the container types supported by the library. + */ +enum class ContainerPlatformType { + DOCKER, + KUBERNETES +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ContainerRuntime.kt b/src/main/kotlin/no/acntech/easycontainers/model/ContainerRuntime.kt new file mode 100644 index 00000000..9b63c248 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ContainerRuntime.kt @@ -0,0 +1,53 @@ +package no.acntech.easycontainers.model + +/** + * Interface representing the runtime of a container - either Docker or Kubernetes. + */ +interface ContainerRuntime { + + /** + * Retrieves the type of the container platform. + * + * @return the type of the container platform as a ContainerPlatformType enum value + */ + fun getType(): ContainerPlatformType + + /** + * Retrieves the container associated with the runtime. + * + * @return the container as a Container object + */ + fun getContainer(): Container + + /** + * Starts the execution of the container. + */ + fun start() + + /** + * Stops the container runtime. + */ + fun stop() + + /** + * Kills the container by calling the stop() method. + * This method is used to forcefully terminate the execution of the container. + * After calling this method, the container will be in the stopped state. + * It is advisable to call the delete() method after killing the container. + */ + fun kill() { + stop() + } + + /** + * Deletes the container with an optional force flag. + * + * @param force if true, force the deletion of the container (default is false) + */ + fun delete(force: Boolean = false) + + /** + * Retrieves the (runtime) name of the container - for Docker this is the container ID, for Kubernetes this is the pod name. + */ + fun getName(): ContainerName +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/EnvVarKey.kt b/src/main/kotlin/no/acntech/easycontainers/model/EnvVarKey.kt new file mode 100644 index 00000000..f4b7ca88 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/EnvVarKey.kt @@ -0,0 +1,43 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing an environment variable key. + */ +@JvmInline +value class EnvVarKey(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern to match valid identifiers + // An identifier must start with a letter (a-z or A-Z) or an underscore (_), + // followed by zero or more alphanumeric characters (a-z, A-Z, 0-9) or underscores (_) + private val REGEXP: Regex = "^[a-zA-Z_][a-zA-Z0-9_]*\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): EnvVarKey { + return EnvVarKey(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/EnvVarValue.kt b/src/main/kotlin/no/acntech/easycontainers/model/EnvVarValue.kt new file mode 100644 index 00000000..3022eafd --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/EnvVarValue.kt @@ -0,0 +1,42 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing an environment variable value. + */ +@JvmInline +value class EnvVarValue(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern that matches any string consisting of printable ASCII characters + // (ranging from space ' ' to tilde '~') only. An empty string will also be a valid match. + private val REGEXP: Regex = "^[ -~]*\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 0, + maxLength = 255, // Reasonable limit for environment variable value + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): EnvVarValue { + return EnvVarValue(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Executable.kt b/src/main/kotlin/no/acntech/easycontainers/model/Executable.kt new file mode 100644 index 00000000..4df731e7 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Executable.kt @@ -0,0 +1,42 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing an executable, i.e. a command line with optional arguments. + */ +@JvmInline +value class Executable(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern that matches strings consisting of + // alpha-numeric characters, underscores (_), hyphens (-), periods (.) and forward slashes (/) only + private val REGEXP: Regex = "^[a-zA-Z0-9_\\-\\.\\/]+$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): Executable { + return Executable(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ExecutionMode.kt b/src/main/kotlin/no/acntech/easycontainers/model/ExecutionMode.kt new file mode 100644 index 00000000..48f1df27 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ExecutionMode.kt @@ -0,0 +1,18 @@ +package no.acntech.easycontainers.model + +/** + * Enum class representing the execution mode of the container. + * @see [ContainerX] + */ +enum class ExecutionMode { + + /** + * Service mode - continuous execution + */ + SERVICE, + + /** + * Task mode - single execution with an exit value + */ + TASK +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Host.kt b/src/main/kotlin/no/acntech/easycontainers/model/Host.kt new file mode 100644 index 00000000..b1cb7379 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Host.kt @@ -0,0 +1,49 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a host. + */ +@JvmInline +value class Host(val value: String) : SimpleValueObject { + + companion object { + + const val MIN_LENGTH: Int = 1 + + // Need to set this to higher than 63 wince pod native names are too long to concatenate with + // test.pod.cluster.local + const val MAX_LENGTH: Int = 100 + + // REGEXP: Defines a regular expression pattern that matches either a string containing alphanumeric characters, + // periods (.), or hyphens (-), or an IPv6 address enclosed in square brackets ([]). + // The IPv6 address part is made of hexadecimal characters (a-f, A-F, 0-9) and colons (:) + private val REGEXP: Regex = "^(?:[a-zA-Z0-9.-]+|\\[[a-fA-F0-9:]+])\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = MIN_LENGTH, + maxLength = MAX_LENGTH, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): Host { + return Host(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ImageName.kt b/src/main/kotlin/no/acntech/easycontainers/model/ImageName.kt new file mode 100644 index 00000000..7750f9c1 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ImageName.kt @@ -0,0 +1,44 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a Docker (registry) image name. + */ +@JvmInline +value class ImageName(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Matches strings starting with one or more lowercase letters or digits, + // optionally followed by groups of one character (-, _, or .) and one or more lowercase letters or digits. + private val REGEXP: Regex = "^[a-z0-9]+([-_.][a-z0-9]+)*\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 2, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + val DEFAULT = ImageName("my-image") + + fun of(value: String): ImageName { + return ImageName(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ImageTag.kt b/src/main/kotlin/no/acntech/easycontainers/model/ImageTag.kt new file mode 100644 index 00000000..f9a9e166 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ImageTag.kt @@ -0,0 +1,45 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a Docker image tag. + */ +@JvmInline +value class ImageTag(val value: String) : SimpleValueObject { + + companion object { + + // Defines a regular expression pattern that matches any string composed solely of alpha-numeric characters + // (a-z, A-Z, 0-9), underscores (_), hyphens (-), and periods (.). + // The + at the end signifies that one or more of these characters must be present for a match. + private val REGEXP: Regex = "^[a-zA-Z0-9_\\-\\.]+$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 2, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + val LATEST = ImageTag("latest") + + fun of(value: String): ImageTag { + return ImageTag(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/ImageURL.kt b/src/main/kotlin/no/acntech/easycontainers/model/ImageURL.kt new file mode 100644 index 00000000..82570fa7 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/ImageURL.kt @@ -0,0 +1,85 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.util.text.COLON +import no.acntech.easycontainers.util.text.FORWARD_SLASH + +/** + * Represents a Docker image URL consisting of a registry URL, repository name, image name, and tag. + * + * @property registryUrl The registry URL of the image. + * @property repositoryName The repository name of the image. + * @property imageName The image name. + * @property tag The image tag. Default is ImageTag.LATEST. + */ +data class ImageURL( + val registryUrl: RegistryURL, + val repositoryName: RepositoryName, + val imageName: ImageName, + val tag: ImageTag = ImageTag.LATEST, +) { + + companion object { + fun of( + registryUrl: String, + repositoryName: String, + imageName: String, + tag: String = ImageTag.LATEST.unwrap(), + ): ImageURL { + return ImageURL( + registryUrl = RegistryURL.of(registryUrl), + repositoryName = RepositoryName.of(repositoryName), + imageName = ImageName.of(imageName), + tag = ImageTag.of(tag) + ) + } + + fun of(value: String): ImageURL { + // Parse the value + val parts = value.split(FORWARD_SLASH) + + require(parts.size > 2) { + "Invalid Image URL '$value': must include registry URL, repository name, and image name (and optionally a tag)" + } + + // Create the different parts + val registryUrl = RegistryURL.of(parts[0]) + val repositoryName = RepositoryName.of(parts[1]) + + // Split the image name and tag + val imageNameAndTag = parts[2] + val imageName = ImageName.of(imageNameAndTag.substringBefore(COLON)) + + // Check if tag is present + val tag = if (imageNameAndTag.contains(COLON)) { + ImageTag.of(imageNameAndTag.substringAfter(COLON)) + } else { + ImageTag.LATEST + } + + return ImageURL( + registryUrl = registryUrl, + repositoryName = repositoryName, + imageName = imageName, + tag = tag + ) + } + } + + /** + * Returns the Fully Qualified Domain Name (FQDN) of the image URL. + * The FQDN is constructed by concatenating the registry URL, repository name, image name, and tag. + * + * @return the Fully Qualified Domain Name (FQDN) of the image URL + */ + fun toFQDN(): String { + return "${registryUrl.unwrap()}/${repositoryName.unwrap()}/${imageName.unwrap()}:${tag.unwrap()}" + } + + /** + * Returns a string representation of the ImageURL, which is the fully qualified domain name (FQDN). + * The FQDN is constructed by concatenating the registry URL, repository name, image name, and image tag, + * separated by forward slashes*/ + override fun toString(): String { + return toFQDN() + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/LabelKey.kt b/src/main/kotlin/no/acntech/easycontainers/model/LabelKey.kt new file mode 100644 index 00000000..cd99d96e --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/LabelKey.kt @@ -0,0 +1,42 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a docker/kubernetes label key. + */ +@JvmInline +value class LabelKey(val value: String) : SimpleValueObject { + + companion object { + + // Defines a regular expression pattern that matches a single character string. The character can be an alpha-numeric + // value (a-z, A-Z, 0-9), an underscore (_), or a hyphen (-). + private val REGEXP: Regex = "^[a-zA-Z0-9_-]\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 63, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): LabelKey { + return LabelKey(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/LabelValue.kt b/src/main/kotlin/no/acntech/easycontainers/model/LabelValue.kt new file mode 100644 index 00000000..71756c6a --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/LabelValue.kt @@ -0,0 +1,42 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a docker/kubernetes label value. + */ +@JvmInline +value class LabelValue(val value: String) : SimpleValueObject { + + companion object { + + // Defines a regular expression pattern that matches any string consisting of printable ASCII characters (ranging from + // space ' ' to tilde '~') only. An empty string will also be a valid match. + private val REGEXP: Regex = "^[ -~]*\$".toRegex() + + private val VALIDATOR = StringValidator( + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set + maxLength = 1063, // This is a practical limit + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): LabelValue { + return LabelValue(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Memory.kt b/src/main/kotlin/no/acntech/easycontainers/model/Memory.kt new file mode 100644 index 00000000..f0facdab --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Memory.kt @@ -0,0 +1,105 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.lang.RangeValidator +import java.math.BigInteger + +/** + * Value object representing kubernetes/docker memory. + */ +@JvmInline +value class Memory(val bytes: BigInteger) : SimpleValueObject { + + companion object { + + val Ki = BigInteger("1024") // 1024^1 + + val Mi = BigInteger("1048576") // 1024^2 + + val Gi = BigInteger("1073741824") // 1024^3 + + val Ti = BigInteger("1099511627776") // 1024^4 + + val Pi = BigInteger("1125899906842624") // 1024^5 + + val Ei = BigInteger("1152921504606846976") // 1024^6 + + private val UNIT_MAP = mapOf( + "Ki" to Ki, // 1024^1 + "Mi" to Mi, // 1024^2 + "Gi" to Gi, // 1024^3 + "Ti" to Ti, // 1024^4 + "Pi" to Pi, // 1024^5 + "Ei" to Ei, // 1024^6 + ) + + fun of(value: String): Memory { + val trimmedValue = value.trim() + val (number, unit) = UNIT_MAP.entries.find { trimmedValue.endsWith(it.key) } + ?.let { Pair(trimmedValue.removeSuffix(it.key), it.value) } + ?: Pair(trimmedValue, BigInteger.ONE) + + val numericValue = number.toBigIntegerOrNull() + ?: throw IllegalArgumentException("Invalid memory format: $value") + + return Memory(numericValue * unit) + } + + fun of(value: BigInteger): Memory = Memory(value) + + private val VALIDATOR = RangeValidator( + exclusiveMin = BigInteger.ZERO, + exclusiveMax = BigInteger("9223372036854775807") // 2^63 - 1 + ) + + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): BigInteger { + return bytes + } + + fun toKi(): BigInteger { + return bytes.divide(Ki) + } + + fun toMi(): BigInteger { + return bytes.divide(Mi) + } + + fun toGi(): BigInteger { + return bytes.divide(Gi) + } + + fun toTi(): BigInteger { + return bytes.divide(Ti) + } + + fun toPi(): BigInteger { + return bytes.divide(Pi) + } + + fun toEi(): BigInteger { + return bytes.divide(Ei) + } + + fun toFormattedString(): String { + return when { + bytes >= Ei -> "${bytes.divide(Ei)}EiB" + bytes >= Pi -> "${bytes.divide(Pi)}PiB" + bytes >= Ti -> "${bytes.divide(Ti)}TiB" + bytes >= Gi -> "${bytes.divide(Gi)}GiB" + bytes >= Mi -> "${bytes.divide(Mi)}MiB" + bytes >= Ki -> "${bytes.divide(Ki)}KiB" + else -> "${bytes}B" + } + } + + override fun toString(): String { + return toFormattedString() + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Namespace.kt b/src/main/kotlin/no/acntech/easycontainers/model/Namespace.kt new file mode 100644 index 00000000..0ea8384a --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Namespace.kt @@ -0,0 +1,44 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a kubernetes namespace. + */ +@JvmInline +value class Namespace(val value: String) : SimpleValueObject { + + companion object { + + // Defines a regular expression pattern for validating Kubernetes Namespace names. + // According to Kubernetes documentation, a valid Namespace consists of alphanumeric characters, dashes (-), and must + // start and end with an alphanumeric character. The '+' in the pattern indicates that one or more of the allowed + // characters must be present. + private val REGEXP: Regex = "^[a-z0-9]([-a-z0-9]*[a-z0-9])?\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 63, // Kubernetes Namespace names are limited to 63 characters. + lexicalValidator = RegexValidator(REGEXP) + ) + + val DEFAULT = Namespace("default") + + val TEST = Namespace("test") + + fun of(value: String): Namespace { + return Namespace(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/NetworkName.kt b/src/main/kotlin/no/acntech/easycontainers/model/NetworkName.kt new file mode 100644 index 00000000..b66dbf0e --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/NetworkName.kt @@ -0,0 +1,43 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a Docker image tag. + */ +@JvmInline +value class NetworkName(val value: String) : SimpleValueObject { + + companion object { + + // Defines a regular expression pattern for validating network names. + // A valid network name must start and end with an alpha-numeric character (a-z, A-Z, 0-9). + // The middle portion of the name can include alpha-numeric characters, underscores (_), dots (.) or hyphens (-). + private val REGEXP: Regex = "^[a-zA-Z0-9][a-zA-Z0-9_.-]*[a-zA-Z0-9]\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 2, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): NetworkName { + return NetworkName(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/NetworkPort.kt b/src/main/kotlin/no/acntech/easycontainers/model/NetworkPort.kt new file mode 100644 index 00000000..da0608d7 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/NetworkPort.kt @@ -0,0 +1,45 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.lang.RangeValidator + +/** + * Value object representing a network port - range 1-65535. + */ +@JvmInline +value class NetworkPort(val value: Int) : SimpleValueObject { + + companion object { + + fun of(value: Int): NetworkPort { + return NetworkPort(value) + } + + fun of(value: String): NetworkPort { + return NetworkPort(value.toInt()) + } + + private val VALIDATOR = RangeValidator( + inclusiveMin = 1, + inclusiveMax = 65535 + ) + + val HTTP = NetworkPort(80) + val HTTPS = NetworkPort(443) + val SSH = NetworkPort(22) + + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): Int { + return value + } + + override fun toString(): String { + return value.toString() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/PortMappingName.kt b/src/main/kotlin/no/acntech/easycontainers/model/PortMappingName.kt new file mode 100644 index 00000000..eae1e6ee --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/PortMappingName.kt @@ -0,0 +1,48 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a port mapping name + */ +@JvmInline +value class PortMappingName(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern for validating port mapping names. + // A valid port mapping name starts and ends with an alphanumeric character (a-z, A-Z, 0-9) and + // can have dashes (-) in the middle. The name cannot start or end with a dash (-). + private val REGEXP: Regex = "^[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])?\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 15, + lexicalValidator = RegexValidator(REGEXP) + ) + + val HTTP = PortMappingName("http") + val HTTPS = PortMappingName("https") + val TRANSPORT = PortMappingName("transport") + val SSH = PortMappingName("ssh") + + fun of(value: String): PortMappingName { + return PortMappingName(value) + } + } + + init { + VALIDATOR.validate(this.value) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/RegistryURL.kt b/src/main/kotlin/no/acntech/easycontainers/model/RegistryURL.kt new file mode 100644 index 00000000..ccfee0c0 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/RegistryURL.kt @@ -0,0 +1,51 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Represents a URL of a registry. + * + * @param value the value of the registry URL + */ +@JvmInline +value class RegistryURL(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern for validating Registry URLs. + // A valid Registry URL should begin with one or more alphanumeric characters (a-z, A-Z, 0-9), followed by any number of + // groups consisting of a '.', ':', or '-' and one or more alphanumeric characters. The URL may optionally end with a ':' + // followed by one or more digits (representing a port number) followed by an optional '/'. + private val REGEXP: Regex = "^[a-zA-Z0-9]+([.:-][a-zA-Z0-9]+)*(:[0-9]+)?/?\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 4, + maxLength = 253, + lexicalValidator = RegexValidator(REGEXP) + ) + + val DOCKER = RegistryURL("docker.io") + val KUBERNETES = RegistryURL("k8s.gcr.io") + val LOCAL = RegistryURL("localhost:5000") + + fun of(value: String): RegistryURL { + return RegistryURL(value) + } + + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/RepositoryName.kt b/src/main/kotlin/no/acntech/easycontainers/model/RepositoryName.kt new file mode 100644 index 00000000..c6e22769 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/RepositoryName.kt @@ -0,0 +1,61 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Represents a repository name in a software repository system. + * + * A repository name is a value object that holds a single value of type String. It is used to identify + * a specific repository within a registry. The repository name must adhere to certain rules: + * - It must consist of lowercase alphanumeric characters, and may contain hyphens, underscores, and periods. + * - It must have a minimum length of 2 and a maximum length of 255 characters. + * + * Example Usage: + * + * ``` + * val repoName = RepositoryName.of("myrepo") + * val defaultName = RepositoryName.DEFAULT + * ``` + */ +@JvmInline +value class RepositoryName(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern for validating repository names. + // A valid repository name must start with a lowercase alphanumeric character (a-z, 0-9). + // It can include dashes (-), underscores (_) or periods (.) but these characters must be followed by at least one + // alphanumeric character (a-z, 0-9). The pattern prevents repository names from ending with special characters like a + // dash (-), underscore (_) or period (.). + private val REGEXP: Regex = "^[a-z0-9]+([-_.][a-z0-9]+)*\$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 2, + maxLength = 255, + lexicalValidator = RegexValidator(REGEXP) + ) + + val DEFAULT = RepositoryName("default") + + val TEST = RepositoryName("test") + + fun of(value: String): RepositoryName { + return RepositoryName(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/SemanticVersion.kt b/src/main/kotlin/no/acntech/easycontainers/model/SemanticVersion.kt new file mode 100644 index 00000000..b33f3db1 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/SemanticVersion.kt @@ -0,0 +1,43 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Value object representing a file name for a file to be added or mapped into a container. + */ +@JvmInline +value class SemanticVersion(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Matches semantic versions with major, minor, and patch numbers followed by optional pre-release identifiers + // and build metadata. A version looks like this: [major].[minor].[patch]-[pre-release]+[build] + private val REGEXP: Regex = + "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*)?(\\+[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*)?$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 127, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): SemanticVersion { + return SemanticVersion(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/UnixDir.kt b/src/main/kotlin/no/acntech/easycontainers/model/UnixDir.kt new file mode 100644 index 00000000..21c63fbd --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/UnixDir.kt @@ -0,0 +1,52 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Represents a complete (starting with root '/') Unix directory path as a value object. + * + * @param value The underlying String value representing the directory path. + */ +@JvmInline +value class UnixDir(val value: String) : SimpleValueObject { + + companion object { + + // REGEXP: Defines a regular expression pattern for validating Unix directory paths. + // A valid Unix directory path should start with a '/' (root directory) followed by any number of subdirectories + // separated by '/'. Each subdirectory must have at least one character and cannot contain a '/'. + // The pattern doesn't accept paths that have consecutive '/' (bad format) or end with '/' + private val REGEXP: Regex = "^/([^/]+(/[^/]*)*)?$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 1024, // Reasonable limit for unix path + lexicalValidator = RegexValidator(REGEXP) + ) + + val ROOT = UnixDir("/") + val ETC = UnixDir("/etc") + val HOME = UnixDir("/home") + val TMP = UnixDir("/tmp") + val MNT = UnixDir("/mnt") + + fun of(value: String): UnixDir { + return UnixDir(value) + } + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Verbosity.kt b/src/main/kotlin/no/acntech/easycontainers/model/Verbosity.kt new file mode 100644 index 00000000..26888630 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Verbosity.kt @@ -0,0 +1,31 @@ +package no.acntech.easycontainers.model + +/** + * Enum class representing different levels of verbosity. + * + * Each verbosity level has a corresponding string value. + * The levels are: PANIC, FATAL, ERROR, WARN, INFO, DEBUG, TRACE. + * + * Usage: + * To get the verbosity level from a string value, use `of(value: String)` function. + * + * Example: + * val level = Verbosity.of("info") + */ +enum class Verbosity(val value: String) { + PANIC("panic"), + FATAL("fatal"), + ERROR("error"), + WARN("warn"), + INFO("info"), + DEBUG("debug"), + TRACE("trace"); + + companion object { + @OptIn(ExperimentalStdlibApi::class) + fun of(value: String): Verbosity? { + val valueLower = value.lowercase() + return entries.find { it.value == valueLower } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/Volume.kt b/src/main/kotlin/no/acntech/easycontainers/model/Volume.kt new file mode 100644 index 00000000..3e9b2921 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/Volume.kt @@ -0,0 +1,33 @@ +package no.acntech.easycontainers.model + +import java.nio.file.Path + +/** + * Value object representing a volume to be added or mapped into a container. + *
        + *
      • For Docker, if the VolumeName exists as a Docker named volume, it will be used, and the hostDir will be ignored
      • + * + *
      • For Kubernetes the VolumeName must either< refer to a corresponding PersistentVolume + * - see PersistentVolume, or + * memoryBacked must be true. In case of a PersistentVolume, the PersistentVolumeClaimName will be created and used irrespective + * of the existence of the PersistentVolume - and will hence fail if no PersistentVolume exist.
      • + *
      + * + * @param name The name of the volume + * @param mountDir The path in the container where the volume will be mounted + * @param hostDir Only valid for Docker - if set, the volume will be mounted from the host + * @param memoryBacked Valid for Docker and Kubernetes - if true, the volume will be memory backed using tmpfs for Docker and + * emptyDir with medium 'Memory' for Kubernetes + * @param memory Valid for Docker and Kubernetes - if memoryBacked is true, this parameter will be used as the size limit for the + * memory backed volume + */ +data class Volume( + val name: VolumeName, + val mountDir: UnixDir, + val hostDir: Path? = null, // Only valid for Docker + val memoryBacked: Boolean = false, + val memory: Memory? = null, +) { + constructor(name: String, mountPath: String) : this(VolumeName.of(name), UnixDir.of(mountPath)) + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/model/VolumeName.kt b/src/main/kotlin/no/acntech/easycontainers/model/VolumeName.kt new file mode 100644 index 00000000..9caba447 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/VolumeName.kt @@ -0,0 +1,59 @@ +package no.acntech.easycontainers.model + +import no.acntech.easycontainers.model.base.SimpleValueObject +import no.acntech.easycontainers.util.text.RegexValidator +import no.acntech.easycontainers.util.text.StringValidator + +/** + * Represents a volume name. + * + * A volume name is a string value object that holds the name of a volume to be added or mapped into a container. + * + * The volume name must comply with the following rules: + * - The length of the name must be between 1 and 63 characters, inclusive. + * - The name can only contain alphanumeric characters, underscores (_), and hyphens (-). + * + * The volume name is validated upon construction using the StringValueObjectValidator class. + * + * The VolumeName class provides the following functionality: + * - Construction of a VolumeName object using the companion object's `of` function. + * - Unwrapping the volume name value using the `unwrap` function. + * - Converting the volume name to a string representation using the `toString` function. + * + * @property value The underlying string value of the volume name. + * + * @see SimpleValueObject + * @see StringValidator + */ +@JvmInline +value class VolumeName(val value: String) : SimpleValueObject { + + companion object { + + private val REGEXP: Regex = "^[a-zA-Z0-9_-]+$".toRegex() + + private val VALIDATOR = StringValidator( + minLength = 1, + maxLength = 63, + lexicalValidator = RegexValidator(REGEXP) + ) + + fun of(value: String): VolumeName { + return VolumeName(value) + } + + } + + init { + VALIDATOR.validate(this.unwrap()) + } + + override fun unwrap(): String { + return value + } + + override fun toString(): String { + return value + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/base/SimpleValueObject.kt b/src/main/kotlin/no/acntech/easycontainers/model/base/SimpleValueObject.kt new file mode 100644 index 00000000..b45cbd83 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/base/SimpleValueObject.kt @@ -0,0 +1,21 @@ +package no.acntech.easycontainers.model.base + +/** + * A DDD ValueObject holding a single value. The unwrap method can e.g. assist in mapping the + * SimpleValueObject to a DTO or to a repository object. + * + * The SimpleValueObject would normally restrict the underlying value using domain specific rules - e.g. applying + * range restrictions (for numbers), non-null, non-blank and length restrictions for Strings, etc. + * + * A SimpleValueObject is usually constructed using a single-argument constructor or (even better) + * with a static of(P p) method - or both. + */ +interface SimpleValueObject

      > : ValueObject, Comparable> { + + fun unwrap(): P + + override fun compareTo(other: SimpleValueObject

      ): Int { + return unwrap().compareTo(other.unwrap()) + } + +} diff --git a/src/main/kotlin/no/acntech/easycontainers/model/base/ValueObject.kt b/src/main/kotlin/no/acntech/easycontainers/model/base/ValueObject.kt new file mode 100644 index 00000000..aad0fd25 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/model/base/ValueObject.kt @@ -0,0 +1,13 @@ +package no.acntech.easycontainers.model.base + +/** + * Marker interface for DDD Value Objects (domain primitives) - see e.g. https://en.wikipedia.org/wiki/Value_object. + * A ValueObject must be final, pre-validated (before or during construction) and immutable. + *

      + * Some articles with more in-depth explanation of value objects and their importance in software design:
      + *

        + *
      • https://freecontent.manning.com/domain-primitives-what-they-are-and-how-you-can-use-them-to-make-more-secure-software/
      • + *
      • https://medium.com/@edin.sahbaz/the-pitfalls-of-primitive-obsession-an-insight-into-code-quality-using-net-c-b1898bcffb4d
      • + *
      + */ +interface ValueObject diff --git a/src/main/kotlin/no/acntech/easycontainers/output/LineReader.kt b/src/main/kotlin/no/acntech/easycontainers/output/LineReader.kt new file mode 100644 index 00000000..5af06c98 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/output/LineReader.kt @@ -0,0 +1,64 @@ +package no.acntech.easycontainers.output + +import no.acntech.easycontainers.util.io.closeQuietly +import java.io.IOException +import java.io.InputStream +import java.util.concurrent.atomic.AtomicBoolean + +/** + * The `LineReader` class is responsible for reading lines from an input stream and invoking an `OutputLineCallback` + * for each line of output. Ideally, it should be used in a separate thread to avoid blocking the main thread. + * + * @property input The input stream to read from. + * @property callback The callback function to invoke for each line of output. + */ +class LineReader( + private val input: InputStream, + private val callback: OutputLineCallback, +) { + + private val continueFlag: AtomicBoolean = AtomicBoolean(true) + + /** + * Reads lines from an input stream and invokes a callback function for each line of output. + * If the stream is exhausted, the thread is interrupted, or its explicitly stopped by calling `stop` on the reader, + * the reading process will stop. + */ + fun read() { + input.bufferedReader().use { reader -> + var line: String? + + // Read until the stream is exhausted, the thread is interrupted, or the continueFlag is set to false + // - whatever comes first + while (reader.readLine().also { line = it } != null && continueFlag.get() && !Thread.currentThread().isInterrupted) { + try { + callback.onLine(line) + } catch (e: IOException) { + if (!continueFlag.get()) { // If the continueFlag is set to false, we should break the loop silently + callback.onLine("") + break + } else { + throw e + } + } + } + + if (Thread.currentThread().isInterrupted) { + callback.onLine("") + Thread.currentThread().interrupt() + } else { + // The stream is exhausted or closed. + callback.onLine(null) + } + } + } + + /** + * Stops the execution of the LineReader by setting the continueFlag to false and closing the input stream. + */ + fun stop() { + continueFlag.set(false) + input.closeQuietly() // Close the input stream to unblock the reading thread + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/output/OutputLineCallback.kt b/src/main/kotlin/no/acntech/easycontainers/output/OutputLineCallback.kt new file mode 100644 index 00000000..b7e82813 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/output/OutputLineCallback.kt @@ -0,0 +1,14 @@ +package no.acntech.easycontainers.output + +/** + * Functional interface for handling output from a container. + */ +fun interface OutputLineCallback { + + /** + * Callback for each line of output, new line character(s) are not included. + * + * @param line the line of output (excluding new line character(s)) or null if end of stream + */ + fun onLine(line: String?) +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/output/Slf4JOutputLineCallback.kt b/src/main/kotlin/no/acntech/easycontainers/output/Slf4JOutputLineCallback.kt new file mode 100644 index 00000000..a07746d5 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/output/Slf4JOutputLineCallback.kt @@ -0,0 +1,70 @@ +package no.acntech.easycontainers.output + +import no.acntech.easycontainers.util.text.EMPTY_STRING +import org.slf4j.Logger +import org.slf4j.Marker +import org.slf4j.event.Level + +/** + * OutputLineCallback implementation that logs output lines to a SLF4J logger. + * + * @param logger the SLF4J logger to use + * @param level the log level to use + * @param marker the marker to use + * @param prefix the prefix to use for each log line + */ +class Slf4JOutputLineCallback( + private val logger: Logger, + private val level: Level = Level.INFO, + private val marker: Marker? = null, + private val prefix: String = EMPTY_STRING, +) : OutputLineCallback { + + override fun onLine(line: String?) { + val logLine = prefix + (line ?: "") + + when (level) { + + Level.TRACE -> { + if (marker != null) { + logger.trace(marker, logLine) + } else { + logger.trace(logLine) + } + } + + Level.DEBUG -> { + if (marker != null) { + logger.debug(marker, logLine) + } else { + logger.debug(logLine) + } + } + + Level.INFO -> { + if (marker != null) { + logger.info(marker, logLine) + } else { + logger.info(logLine) + } + } + + Level.WARN -> { + if (marker != null) { + logger.warn(marker, logLine) + } else { + logger.warn(logLine) + } + } + + Level.ERROR -> { + if (marker != null) { + logger.error(marker, logLine) + } else { + logger.error(logLine) + } + } + + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/collections/CollectionExtentions.kt b/src/main/kotlin/no/acntech/easycontainers/util/collections/CollectionExtentions.kt new file mode 100644 index 00000000..5bf484ca --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/collections/CollectionExtentions.kt @@ -0,0 +1,109 @@ +package no.acntech.easycontainers.util.collections + +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.NEW_LINE + +/** + * Returns a string representation of the map in a pretty format. + * + * @param sortKeys determines whether the keys should be sorted in ascending order (default is true) + * @param offset the number of spaces for indentation (default is 4) + * @param paddingChar the character used for padding (default is ' ') + * @param keyValueSeparator the separator between the key and value (default is ": ") + * @return the string representation of the map + */ +fun Map<*, *>.prettyPrint( + sortKeys: Boolean = true, + offset: Int = 2, + paddingChar: Char = ' ', + keyValueSeparator: String = ": ", +): String { + val effectiveMap = if (sortKeys) entries.sortedBy { it.key?.toString() ?: EMPTY_STRING } else entries + + if (effectiveMap.isEmpty()) { + return EMPTY_STRING + } + + val longestKeyLength = effectiveMap.maxOf { it.key?.toString()?.length ?: 0 } + val padding = EMPTY_STRING.padStart(offset, paddingChar) + + return effectiveMap.joinToString(separator = NEW_LINE) { entry -> + val keyPadding = EMPTY_STRING.padStart(longestKeyLength - (entry.key?.toString()?.length ?: 0), ' ') + val valueString = when (val value = entry.value) { + is Map<*, *> -> "$NEW_LINE${value.prettyPrint(sortKeys, offset + 2, paddingChar, keyValueSeparator)}" + is List<*> -> "$NEW_LINE${value.prettyPrint(offset + 2, paddingChar)}" + else -> value?.toString() ?: "null" + } + "${padding}${entry.key?.toString()}$keyPadding$keyValueSeparator$valueString" + } +} + +/** + * Returns a string representation of the list in a pretty format. + * + * @param offset the number of spaces for indentation (default is 2) + * @param paddingChar the character used for padding (default is ' ') + * @return the string representation of the list + */ +fun List<*>.prettyPrint( + offset: Int = 2, + paddingChar: Char = ' ', +): String { + val padding = EMPTY_STRING.padStart(offset, paddingChar) + + return this.joinToString(separator = NEW_LINE) { item -> + when (item) { + is Map<*, *> -> "$padding${item.prettyPrint(offset = offset + 2, paddingChar = paddingChar)}" + is List<*> -> "$padding${item.prettyPrint(offset = offset + 2, paddingChar = paddingChar)}" + else -> "$padding$item" + } + } +} + +/** + * Converts each key-value pair in the map to a string representation, + * where the key is converted to a String using its toString() method, + * and the value is converted to a String using its toString() method. + * If the key or value is null, it is converted to the string "null". + * + * @return a new map where each key-value pair is converted to a string representation. + * @see Any.toString + * @see Map.mapValues + * @see Map.mapKeys + */ +fun Map<*, *>.toStringMap(): Map { + return this.mapValues { + it.value?.toString() ?: "null" + } + .mapKeys { it.key?.toString() ?: "null" } +} + +/** + * Converts each element in the list to a string representation. + * If the element is null, it is converted to the string "null". + * + * @return a new list where each element is converted to its string representation. + * @see Any.toString + * @see List.map + */ +fun List<*>.toStringList(): List { + return this.map { it?.toString() ?: "null" } +} + +/** + * Converts each element in the set to a string representation. + * If the element is null, it is converted to the string "null". + * + * @return a new list where each element is converted to its string representation. + * @see Any.toString + * @see List.map + */ +fun Set<*>.toStringSet(): Set { + return this.map { it?.toString() ?: "null" }.toSet() +} + +fun Collection<*>.toStringCollection(): Collection { + return this.map { it?.toString() ?: "null" } +} + + diff --git a/src/main/kotlin/no/acntech/easycontainers/util/io/FileUtils.kt b/src/main/kotlin/no/acntech/easycontainers/util/io/FileUtils.kt new file mode 100644 index 00000000..d733948a --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/io/FileUtils.kt @@ -0,0 +1,239 @@ +package no.acntech.easycontainers.util.io + +import no.acntech.easycontainers.util.text.BACK_SLASH +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import org.apache.commons.compress.archivers.ArchiveEntry +import org.apache.commons.compress.archivers.tar.TarArchiveEntry +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream +import org.slf4j.LoggerFactory +import java.io.* +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.StandardCopyOption +import kotlin.io.path.exists +import kotlin.io.path.isRegularFile +import kotlin.io.path.name + +/** + * The `FileUtils` class provides utility functions related to file operations. + */ +object FileUtils { + + private const val TAR_EXTENSION = ".tar" + + private val UNIX_COMPLETE_PATH_REGEX = Regex("^/([^/ ]+/)*[^/ ]+$") + + private val log = LoggerFactory.getLogger(FileUtils::class.java) + + /** + * Checks if the provided path is a complete Unix path. + * + * @param path The path to check. + * @return Returns true if the provided path is a complete Unix path, otherwise false. + */ + fun isCompleteUnixPath(path: String): Boolean { + return path.matches(UNIX_COMPLETE_PATH_REGEX) + } + + /** + * Creates a TAR file containing the specified file and entry name. + * + * @param filePath The file to be included in the TAR file. + * @param entryName The name of the entry (file) inside the TAR file. + * @return The TAR file as a [File] object. + */ + @Throws(IOException::class) + fun tarFile(filePath: Path, entryName: String): File { + return Files.createTempFile(EMPTY_STRING, TAR_EXTENSION).toFile().apply { + TarArchiveOutputStream(FileOutputStream(this)).use { tarOs -> + tarOs.putArchiveEntry(TarArchiveEntry(filePath.toFile(), entryName)) + Files.copy(filePath, tarOs) + tarOs.closeArchiveEntry() + } + } + } + + /** + * Creates a TAR archive of the specified directory. + * + * @param dir The directory to be included in the TAR archive. + * @param tarball The path of the TAR archive to be created. + * @param includeParentDir Specifies whether to include the parent directory in the TAR archive. Default is false. + * @return The path of the TAR archive. + */ + @Throws(IOException::class) + fun tar( + dir: Path, + tarball: Path = Files.createTempFile("tar-${dir.name}-", TAR_EXTENSION), + includeParentDir: Boolean = false, + ): Path { + require(dir.exists() && Files.isDirectory(dir)) { "The provided path '$dir' is not a directory." } + require(tarball.exists() && tarball.isRegularFile()) { "The provided tarball '$tarball' is not a valid file." } + tar(dir, FileOutputStream(tarball.toFile()), includeParentDir) + return tarball + } + + @Throws(IOException::class) + fun tar(dir: Path, output: OutputStream, includeParentDir: Boolean = false): Long { + require(dir.exists() && Files.isDirectory(dir)) { "The provided path '$dir' is not a directory." } + val bufferedOut = if (output is BufferedOutputStream) output else BufferedOutputStream(output) + val actualDir = if (includeParentDir) dir.parent else dir + var totalBytes = 0L + TarArchiveOutputStream(bufferedOut).use { tarOutput -> + Files.walk(dir).use { paths -> + paths.forEach { path -> + val name = actualDir.relativize(path).toString().replace(BACK_SLASH, FORWARD_SLASH).removePrefix(FORWARD_SLASH) + val entry = prepareTarEntry(path, name) + totalBytes += writeToTarOutput(tarOutput, path, entry) + } + } + } + return totalBytes + } + + private fun prepareTarEntry(path: Path, name: String): TarArchiveEntry { + val entry = TarArchiveEntry(path.toFile(), name).also { + log.trace("Adding tar entry: $name -> ${path.toAbsolutePath()} (${path.toFile().length()} bytes)") + } + if (Files.isDirectory(path)) { + entry.size = 0 + entry.mode = TarArchiveEntry.DEFAULT_DIR_MODE + } + return entry + } + + private fun writeToTarOutput(tarOutput: TarArchiveOutputStream, path: Path, entry: TarArchiveEntry): Long { + var totalBytesForEntry = 0L + tarOutput.putArchiveEntry(entry) + if (Files.isRegularFile(path)) { + Files.newInputStream(path).use { input -> + totalBytesForEntry += input.transferTo(tarOutput) + } + } + tarOutput.closeArchiveEntry() + return totalBytesForEntry + } + + /** + * Creates an input stream containing a TAR archive of the specified directory. Note that the piping to the input is done + * in a separate (virtual) thread. + * + * @param dir The directory to be included in the TAR archive. + * @param includeParentDir Specifies whether to include the parent directory in the TAR archive. Default is false. + * @return An input stream containing the TAR archive. + */ + @Throws(IOException::class) + fun tar(dir: Path, includeParentDir: Boolean = false): InputStream { + require(dir.exists() && Files.isDirectory(dir)) { "The provided path '$dir' is not a directory." } + return pipe { output -> tar(dir, output, includeParentDir) } + } + + /** + * Untars a single file from the specified TAR file to the specified destination. If the destination is a directory, the + * file will be extracted to the directory with the same name as the TAR entry. If the destination is a file, the file + * will be extracted to the destination file. + * + * @param tarFile The TAR file to extract. + * @param destination The destination to extract the TAR file to - either a directory or a file. + */ + @Throws(IOException::class) + fun untarFile(tarFile: File, destination: Path = Files.createTempDirectory("untar-").toAbsolutePath()): Path { + require(tarFile.exists() && tarFile.isFile) { "The provided file '$tarFile' is not a valid file." } + + TarArchiveInputStream(BufferedInputStream(FileInputStream(tarFile))).use { tis -> + val entry = tis.nextEntry + if (entry != null && !entry.isDirectory) { + val destFile = if (Files.isDirectory(destination)) { + destination.resolve(entry.name) + } else { + destination + } + Files.copy(tis, destFile, StandardCopyOption.REPLACE_EXISTING).also { + log.trace("Untaring - creating file: $destFile") + } + } + } + return destination + } + + /** + * Extracts the contents of a tarball to a specified destination directory. + * + * @param tarball The tarball file to be extracted. + * @param destination The destination directory where the contents should be extracted to. + * If not provided, a temporary directory will be created. + * @return A Pair containing the path of the destination directory and a list of extracted files. + * @throws IllegalArgumentException if the destination path is not a directory. + */ + @Throws(IOException::class) + fun untar( + tarball: File, + destination: Path = Files.createTempDirectory("untar-${tarball.name}-").toAbsolutePath(), + ): Pair> { + require(tarball.exists() && tarball.isFile) { "The provided file '$tarball' is not a valid file." } + require(destination.exists() && Files.isDirectory(destination)) { "The provided path '$destination' is not a directory." } + return untar(FileInputStream(tarball), destination) + } + + /** + * Extracts the contents of a tarball from the given input stream to the specified destination directory. + * + * @param input The input stream of the tarball to be extracted. + * @param destination The destination directory where the contents should be extracted to. + * If not provided, a temporary directory will be created. + * @return A Pair containing the path of the destination directory and a list of extracted files. + * @throws IllegalArgumentException if the destination path is not a directory. + */ + @Throws(IOException::class) + fun untar( + input: InputStream, + destination: Path = Files.createTempDirectory("untar-").toAbsolutePath(), + ): Pair> { + require(destination.exists() && Files.isDirectory(destination)) { + "The provided destination '$destination' is not a directory." + } + + log.trace("Untaring input to: $destination") + + val bufferedInput = if (input is BufferedInputStream) input else BufferedInputStream(input) + val files: MutableList = mutableListOf() + processArchiveEntries(bufferedInput, destination, files) + return Pair(destination, files.toList()) + } + + private fun processArchiveEntries(bufferedInput: BufferedInputStream, destination: Path, files: MutableList) { + TarArchiveInputStream(bufferedInput).use { tarInput -> + var entry = tarInput.nextEntry + while (entry != null) { + processEntry(entry, destination, tarInput, files) + entry = tarInput.nextEntry + } + } + } + + private fun processEntry( + entry: ArchiveEntry, + destination: Path, + tarInput: TarArchiveInputStream, + files: MutableList, + ) { + val destFile = destination.resolve(entry.name) + if (entry.isDirectory) { + Files.createDirectories(destFile).also { + log.trace("Untaring - creating directory: $destFile") + } + } else { + Files.createDirectories(destFile.parent) + Files.copy( + tarInput, destFile, + StandardCopyOption.REPLACE_EXISTING + ).also { + log.trace("Untaring - creating file: $destFile") + } + files.add(destFile) + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/io/Functions.kt b/src/main/kotlin/no/acntech/easycontainers/util/io/Functions.kt new file mode 100644 index 00000000..9246ce68 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/io/Functions.kt @@ -0,0 +1,68 @@ +package no.acntech.easycontainers.util.io + +import java.io.* + +/** + * Closes a Closeable object quietly, without throwing any exception. + * + * @receiver The Closeable object to be closed. It can be null. + */ +fun Closeable?.closeQuietly() { + try { + this?.close() + } catch (e: IOException) { + // Ignore + } +} + +/** + * Converts the content of this ByteArrayOutputStream to a UTF-8 encoded string. + * + * @return the UTF-8 string representation of the content in this ByteArrayOutputStream. + */ +fun ByteArrayOutputStream.toUtf8String(): String { + return this.toString(Charsets.UTF_8) +} + +/** + * Executes the given (write) operation in a separate (virtual) thread and returns an [InputStream] that reads + * from the result of the operation - effectively creating a "reactive" pipe between the [OutputStream] and + * the [InputStream]. This means that this method is non-blocking and the operation is executed asynchronously. + * Streams are buffered. + * + * @param operation The operation to execute in a separate thread. The operation receives an [OutputStream] as a parameter. + * The default operation is a no-op. + * @return An [InputStream] that reads from the output of the operation. + */ +@Suppress("UNCHECKED_CAST") +fun pipe( + operation: (OutputStream) -> T = { _: OutputStream -> null as T }, +): InputStream { + return pipe(operation, true) +} + +/** + * Executes the given (write) operation in a separate (virtual) thread and returns an [InputStream] that reads + * from the result of the operation - effectively creating a "reactive" pipe between the [OutputStream] and + * the [InputStream]. This means that this method is non-blocking and the operation is executed asynchronously. + * + * @param operation The operation to execute in a separate thread. The operation receives an [OutputStream] as a parameter. + * The default operation is a no-op. + * @param buffered Specifies whether the [InputStream] and [OutputStream] should be buffered. Default is true. + * @return An [InputStream] that reads from the output of the operation. + */ +@Suppress("UNCHECKED_CAST") +fun pipe( + operation: (OutputStream) -> T = { _: OutputStream -> null as T }, + buffered: Boolean = true, +): InputStream { + val output = PipedOutputStream() + val input = if (buffered) BufferedInputStream(PipedInputStream(output)) else PipedInputStream(output) + + Thread.startVirtualThread { + operation(if (buffered) BufferedOutputStream(output) else output) + } + + return input +} + diff --git a/src/main/kotlin/no/acntech/easycontainers/util/lang/Functions.kt b/src/main/kotlin/no/acntech/easycontainers/util/lang/Functions.kt new file mode 100644 index 00000000..35a9d6cd --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/lang/Functions.kt @@ -0,0 +1,246 @@ +package no.acntech.easycontainers.util.lang + +import com.google.common.base.CaseFormat +import no.acntech.easycontainers.util.collections.prettyPrint +import no.acntech.easycontainers.util.collections.toStringList +import no.acntech.easycontainers.util.collections.toStringMap +import no.acntech.easycontainers.util.text.NEW_LINE +import java.beans.Introspector +import java.beans.PropertyDescriptor +import java.lang.reflect.Method +import java.lang.reflect.Modifier +import kotlin.reflect.KClass +import kotlin.reflect.full.memberProperties +import kotlin.reflect.jvm.isAccessible +import kotlin.reflect.jvm.javaField + +private const val MAX_DEPTH = 5 +private const val ERROR_CIRCULAR_REF = "Circular reference detected" +private const val ERROR_MAX_DEPTH = "Max depth reached" +private const val ERROR_GETTER_INVOKATION = "Error calling getter: " + +/** + * Converts an object to a Map representation, including its properties or Java bean properties. + * + * @param defaultOverrides a map of default properties to override the retrieved properties + * @return a map representation of the object, with property names as keys and property values as values + */ +fun Any.asStringMap( + defaultOverrides: Map = emptyMap(), + visited: MutableSet = mutableSetOf(), + depth: Int = 0, + maxDepth: Int = MAX_DEPTH, +): Map { + if (depth > maxDepth) { + return mapOf(ERROR_MAX_DEPTH to true) + } + + val props = mutableMapOf() + + if (visited.contains(this)) { + return mapOf(ERROR_CIRCULAR_REF to true) + } + visited.add(this) + + props["instance"] = "${javaClass.name}@${Integer.toHexString(System.identityHashCode(this))}" + + processProperties(this, props, visited, defaultOverrides, depth, maxDepth) + + props.putAll(defaultOverrides) + + return props +} + +private fun processProperties( + anyObj: Any, + props: MutableMap, + visited: MutableSet, + defaultOverrides: Map, + depth: Int, + maxDepth: Int, +) { + + fun handleProperty(property: PropertyDescriptor) { + val method = property.readMethod + if (method != null && Modifier.isPublic(method.modifiers)) { + tryToInvokeGetter(anyObj, property.name, method, props, visited, defaultOverrides, depth, maxDepth) + } + } + + // Java reflection + val beanInfo = Introspector.getBeanInfo(anyObj.javaClass) + for (propertyDescriptor in beanInfo.propertyDescriptors) { + handleProperty(propertyDescriptor) + } + + // Kotlin reflection + for (property in anyObj::class.memberProperties) { + if (property.javaField != null && property.isAccessible) { + if (!props.containsKey(property.name)) { + val value = property.call(anyObj) + handlePropertyValue(props, property.name, value, visited, defaultOverrides, depth, maxDepth) + } + } + } +} + +private fun tryToInvokeGetter( + anyObj: Any, + name: String, + method: Method, + props: MutableMap, + visited: MutableSet, + defaultOverrides: Map, + depth: Int, + maxDepth: Int, +) { + try { + val value = method.invoke(anyObj) + handlePropertyValue(props, name, value, visited, defaultOverrides, depth, maxDepth) + } catch (e: Exception) { + props[name] = "$ERROR_GETTER_INVOKATION ${e.message}" + } +} + +private fun handlePropertyValue( + props: MutableMap, + name: String, + value: Any?, + visited: MutableSet, + defaultOverrides: Map, + depth: Int, + maxDepth: Int, +) { + props[name] = when { + value == null -> null + visited.contains(value) -> ERROR_CIRCULAR_REF + value is Map<*, *> -> value.toStringMap() + value is List<*> -> value.toStringList() + shouldStringify(value) -> value.toString() + else -> value.asStringMap(defaultOverrides, visited, depth + 1, maxDepth) + } +} + +private fun shouldStringify(value: Any): Boolean { + return value.javaClass.`package`?.name?.startsWith("java") == true || + value.javaClass.`package`?.name?.startsWith("kotlin") == true || + value.javaClass.isPrimitive || + value is String || + value is Number || + value is Boolean +} + + +/** + * Returns a string representation of the calling object in a pretty format. + * + * @param fallbackMap the fallback map to use if conversion to map fails (default is an empty map) + * @return the string representation of the object + */ +fun Any.prettyPrintMe(fallbackMap: Map = emptyMap()): String { + val defaultToString = "${this.javaClass.name}@${Integer.toHexString(System.identityHashCode(this))}$NEW_LINE" + val map: Map = this.asStringMap(fallbackMap) + return defaultToString + map.prettyPrint() +} + +typealias Transform = (T) -> R + +val SNAKE_TO_CAMEL: Transform = + createCaseFormatTransformFunction(CaseFormat.LOWER_UNDERSCORE, CaseFormat.LOWER_CAMEL) + +fun identityTransform(): Transform = { it } // it refers to the input itself + +fun createCaseFormatTransformFunction(fromFormat: CaseFormat, toFormat: CaseFormat): Transform { + return { input: String -> + fromFormat.to(toFormat, input) + } +} + +fun defaultOnError(e: Exception) {} +fun defaultNoMatchHandler(e: Exception): Nothing = throw e +fun defaultFinally() {} + +/** + * Guards a given block of code, and calls the onError function if any of the specified exceptions (or their subclasses) are + * thrown. If the thrown exception is not one of the specified exceptions (or a subclass), the noMatchHandler function is called. + * The finallyBlock is always executed, defaulting to an empty function. + *

      + * Example usage: + *

      
      + * guardedExecution(
      + *    {
      + *    // Code which might throw an exception
      + *    throw IllegalStateException("An error has occurred!")
      + *    },
      + *    listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") },
      + *    { e: Exception -> println("No match handler for: ${e.message}") },
      + *    { println("Finally block executed") }
      + * )
      + * 
      + * + * @param block The block of code to guard. + * @param errors The exceptions to guard against. Defaults to Exception. + * @param onError The function to call if any of the specified exceptions are thrown. Defaults to an empty function. + * @param noMatchHandler The function to call if the thrown exception is not one of the specified exceptions. Defaults to + * rethrowing the exception. + * @param finallyBlock The block of code to execute after the guarded block, regardless of whether an exception was thrown or not. + */ +inline fun guardedExecution( + block: () -> Unit, + errors: List> = listOf(Exception::class), + noinline onError: (Exception) -> Unit = { e -> defaultOnError(e) }, + noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, + finallyBlock: () -> Unit = { defaultFinally() }, +) { + guardedExecution( + block = block, + handlers = arrayOf(errors to onError), + noMatchHandler = noMatchHandler, + finallyBlock = finallyBlock + ) +} + +/** + * A more generic version of the guardedExecution function, which allows for specifying a list of pairs of exception classes and + * their corresponding handler functions. If an exception is thrown, the first matching handler is called. If no handler matches, + * the noMatchHandler is called. If noMatchHandler is not specified, the exception is rethrown. The finallyBlock is always executed, + * defaulting to an empty function. + * + * Example usage: + *
      
      + * guardedExecution(
      + *     {
      + *         // Code which might throw an exception
      + *         throw IllegalStateException("An error has occurred!")
      + *     },
      + *     arrayOf(
      + *         listOf(IllegalStateException::class) to { e: Exception -> println("Handle IllegalStateException: ${e.message}") },
      + *         listOf(RuntimeException::class) to { e: Exception -> println("Handle RuntimeException: ${e.message}") }
      + *     ),
      + *     { e: Exception -> println("No match handler for: ${e.message}") },
      + *     { println("Finally block executed") }
      + * )
      + * 
      + * + * @param block The block of code to guard. + * @param handlers A list of pairs, where the first element is a list of exception classes, and the second element is the + * handler function to be called if any of the exception classes matches. + * @param noMatchHandler The function to call if no handler matches the error's class. Defaults to throwing the error. + * @param finallyBlock The block of code to execute after the guarded block, regardless of whether an exception was thrown or not. + */ +inline fun guardedExecution( + block: () -> Unit, + vararg handlers: Pair>, (Exception) -> Unit>, + noMatchHandler: (Exception) -> Unit = { e -> defaultNoMatchHandler(e) }, + finallyBlock: () -> Unit = { defaultFinally() }, +) { + try { + block.invoke() + } catch (e: Exception) { + handlers.firstOrNull { (classes, _) -> classes.any { it.isInstance(e) } }?.let { (_, handler) -> handler(e) } + ?: noMatchHandler(e) + } finally { + finallyBlock.invoke() + } +} + diff --git a/src/main/kotlin/no/acntech/easycontainers/util/lang/RangeValidator.kt b/src/main/kotlin/no/acntech/easycontainers/util/lang/RangeValidator.kt new file mode 100644 index 00000000..46587cc8 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/lang/RangeValidator.kt @@ -0,0 +1,55 @@ +package no.acntech.easycontainers.util.lang + +/** + * Represents a validation range for a comparable value. + * + * @param P the type of the value in the range, must implement Comparable + * @property inclusiveMin the inclusive minimum value of the range (optional) + * @property exclusiveMin the exclusive minimum value of the range (optional) + * @property inclusiveMax the inclusive maximum value of the range (optional) + * @property exclusiveMax the exclusive maximum value of the range (optional) + */ +data class RangeValidator

      >( + val inclusiveMin: P? = null, + val exclusiveMin: P? = null, + val inclusiveMax: P? = null, + val exclusiveMax: P? = null, +) : Validator

      { + + init { + require(!(inclusiveMin != null && exclusiveMin != null)) { + "Both inclusiveMin '$inclusiveMin' and exclusiveMin '$exclusiveMin' are set. They are mutually exclusive." + } + + require(!(inclusiveMax != null && exclusiveMax != null)) { + "Both inclusiveMax '$inclusiveMax' and exclusiveMax '$exclusiveMax' are set. They are mutually exclusive." + } + } + + override fun validate(t: P) { + inclusiveMin?.let { min -> + if (t < min) { + throw ValidationException("Value '$t' is below the allowed minimum '$min'") + } + } + + exclusiveMin?.let { min -> + if (t <= min) { + throw ValidationException("Value '$t' is below the allowed minimum '$min'") + } + } + + inclusiveMax?.let { max -> + if (t > max) { + throw ValidationException("Value '$t' is above the allowed maximum '$max'") + } + } + + exclusiveMax?.let { max -> + if (t >= max) { + throw ValidationException("Value '$t' is above the allowed maximum '$max'") + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/lang/ValidationException.kt b/src/main/kotlin/no/acntech/easycontainers/util/lang/ValidationException.kt new file mode 100644 index 00000000..4396b5bc --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/lang/ValidationException.kt @@ -0,0 +1,19 @@ +package no.acntech.easycontainers.util.lang + +/** + * Exception that is thrown when a validation error occurs. + * + * @constructor Creates a new ValidationException. + * @param message The detail message. + * @param cause The cause of the exception. + */ +class ValidationException : RuntimeException { + + constructor() : super() + + constructor(message: String) : super(message) + + constructor(message: String, cause: Throwable) : super(message, cause) + + constructor(cause: Throwable) : super(cause) +} diff --git a/src/main/kotlin/no/acntech/easycontainers/util/lang/Validator.kt b/src/main/kotlin/no/acntech/easycontainers/util/lang/Validator.kt new file mode 100644 index 00000000..d114d83e --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/lang/Validator.kt @@ -0,0 +1,16 @@ +package no.acntech.easycontainers.util.lang + +/** + * Interface for validating objects. + */ +interface Validator { + + /** + * Validates the given object. + * + * @param t the object to validate + * @throws ValidationException if the object is not valid + */ + @Throws(ValidationException::class) + fun validate(t: T) +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/net/NetworkUtils.kt b/src/main/kotlin/no/acntech/easycontainers/util/net/NetworkUtils.kt new file mode 100644 index 00000000..f93e5c03 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/net/NetworkUtils.kt @@ -0,0 +1,86 @@ +package no.acntech.easycontainers.util.net + +import org.slf4j.LoggerFactory +import java.io.IOException +import java.net.InetSocketAddress +import java.net.NetworkInterface +import java.net.Socket +import java.net.SocketException + +/** + * The NetworkUtils class provides utility methods related to network operations. + */ +object NetworkUtils { + + private val log = LoggerFactory.getLogger(NetworkUtils::class.java); + + private val IP4_ADDRESS_REGEX = Regex("^\\d{1,3}(\\.\\d{1,3}){3}$") + + /** + * Checks if the given string represents a valid IPv4 address. + * + * @param ipAddress the string representing the IP address to be checked + * + * @return true if the given string is a valid IPv4 address, false otherwise + */ + fun isIp4Address(ipAddress: String): Boolean { + return ipAddress.matches(IP4_ADDRESS_REGEX) + } + + /** + * Retrieves the list of local IP addresses. + * + * This method loops through all the network interfaces of the system and collects the IP addresses + * that are not loopback addresses and are site local addresses. The collected IP addresses are + * added to a list and returned. + * + * @return A list of local IP addresses. + * + * @throws SocketException if an error occurs while retrieving the network interfaces. + */ + fun getLocalIpAddresses(): List { + val ipAddresses = mutableListOf() + try { + val networkInterfaces = NetworkInterface.getNetworkInterfaces() + for (networkInterface in networkInterfaces) { + if (networkInterface.isUp && !networkInterface.isLoopback) { + val addresses = networkInterface.inetAddresses + for (address in addresses) { + if (!address.isLoopbackAddress && address.isSiteLocalAddress) { + ipAddresses.add(address.hostAddress) + } + } + } + } + } catch (e: SocketException) { + e.printStackTrace() + println("Unable to determine local IP addresses") + } + return ipAddresses + } + + /** + * Checks if a given port on a host is open and reachable - similar to the 'nc -z' *nix command. + * + * @param host the hostname or IP address of the host + * @param port the port number to check + * @param timeoutMillis the timeout in milliseconds for the connection attempt (default is 5000 milliseconds) + * @return true if the port is open and reachable, false otherwise + */ + fun isTcpPortOpen(host: String, port: Int, timeoutMillis: Int = 5000): Boolean { + return try { + Socket().use { socket -> + // Connects this socket to the server with a specified timeout value. + socket.connect(InetSocketAddress(host, port), timeoutMillis) + true.also { + log.debug("Port $port is OPEN on $host") + } // The connection was successful, port is open + } + } catch (e: IOException) { + false.also { + log.debug("Port $port is CLOSED or NOT REACHABLE on $host") + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/platform/PlatformUtils.kt b/src/main/kotlin/no/acntech/easycontainers/util/platform/PlatformUtils.kt new file mode 100644 index 00000000..5880c95c --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/platform/PlatformUtils.kt @@ -0,0 +1,327 @@ +package no.acntech.easycontainers.util.platform + +import no.acntech.easycontainers.util.text.* +import org.apache.commons.exec.CommandLine +import org.apache.commons.exec.DefaultExecutor +import org.apache.commons.exec.PumpStreamHandler +import org.slf4j.LoggerFactory +import java.io.* +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import kotlin.io.path.absolutePathString + +/** + * Utility class for platform-specific operations. + */ +object PlatformUtils { + + private const val DEFAULT_DISTRO_INDICATOR = "(Default)" + + private const val WSL_INDICATOR = "Windows Subsystem for Linux Distributions" + + private val log = LoggerFactory.getLogger(PlatformUtils::class.java) + + /** + * Checks if the current operating system is Linux. + * + * @return true if the current operating system is Linux, false otherwise. + */ + fun isLinux(): Boolean { + return System.getProperty("os.name").lowercase().contains("linux") + } + + /** + * Checks if the current operating system is Windows. + * @return true if the current operating system is Windows, false otherwise. + */ + fun isWindows(): Boolean { + return System.getProperty("os.name").lowercase().contains("windows") + } + + /** + * Checks if the current operating system is macOS. + * + * @return true if the operating system is macOS, false otherwise. + */ + fun isMac(): Boolean { + return System.getProperty("os.name").lowercase().contains("mac") + } + + /** + * Checks if Windows Subsystem for Linux (WSL) is installed on the system. + * + * @return `true` if WSL is installed, `false` otherwise. + */ + + fun isWslInstalled(): Boolean { + if (!isWindows()) { + return false + } + + return try { + val cmd = CommandLine.parse("wsl --version") + val executor = DefaultExecutor.builder().get() + executor.execute(cmd) == 0 + } catch (e: IOException) { + log.debug("WSL not installed ($e)") + false + } + } + + /** + * Retrieves the names of the Windows Subsystem for Linux (WSL) distributions installed on the system. + * Returns an empty list if the current operating system is not Windows. + * + * @return a list of strings containing the names of the WSL distributions. + */ + fun getWslDistroNames(): List { + if (!isWindows()) { + return emptyList() + } + + return try { + val cmd = CommandLine.parse("cmd /c chcp 65001 && wsl --list") + val executor = DefaultExecutor.builder().get() + val outputStream = ByteArrayOutputStream() + executor.streamHandler = PumpStreamHandler(outputStream) + executor.execute(cmd) + + val outputWithNullBytes = outputStream.toString() + val outputWithoutNullBytes = stripNullBytes(outputWithNullBytes) + + BufferedReader(StringReader(outputWithoutNullBytes)).use { reader -> + reader.lineSequence() + .filter { it.isNotBlank() && !it.startsWith(WSL_INDICATOR) && !it.contains("code page") } + .map { it.replace("(Default)", "").trim() } // Strip "(Default)" and trim the result + .toList().also { + log.debug("Found WSL distros: $it") + } + } + } catch (e: IOException) { + log.warn("Error '${e.message}' 'when trying to read WSL distributions") + emptyList() + } + } + + fun getDefaultWslDistro(): String? { + if (!isWindows()) { + return null + } + + return try { + // Run command to fetch the WSL distros list + val cmd = CommandLine.parse("cmd /c chcp 65001 && wsl --list") + val executor = DefaultExecutor.builder().get() + val outputStream = ByteArrayOutputStream() + executor.streamHandler = PumpStreamHandler(outputStream) + executor.execute(cmd) + + val outputWithNullBytes = outputStream.toString() + val outputWithoutNullBytes = stripNullBytes(outputWithNullBytes) + val distroList = BufferedReader(StringReader(outputWithoutNullBytes)).readLines() + + val distroNames = distroList.filterNot { it.contains("code page") } + + // Find the distro name that ends with the DEFAULT_DISTRO_INDICATOR + val defaultDistro = distroNames + .firstOrNull { it.contains("(Default)") } + ?.removeSuffix("(Default)")?.trim() // remove "(Default)" and trim whitespace + + if (defaultDistro != null) { + log.debug("Default WSL distro found: $defaultDistro") + } else { + log.warn("No default WSL distro found") + } + + defaultDistro + } catch (e: Exception) { + log.error("Failed to get default WSL distro", e) + return null + } + } + + fun isDockerDesktopOnWindows(): Boolean { + if (!isWindows()) { + return false + } + + return try { + val cmd = CommandLine.parse("cmd /c docker --version") + val executor = DefaultExecutor.builder().get() + val outputStream = ByteArrayOutputStream() + executor.streamHandler = PumpStreamHandler(outputStream) + val exitCode = executor.execute(cmd) + val output = outputStream.toString().trim() + exitCode == 0 && output.contains("Docker Desktop") + } catch (e: Exception) { + false + } + } + + fun getWslIpAddress(): String? { + if (!isWindows() || !isWslInstalled()) { + return null + } + + try { + val cmd = CommandLine.parse("wsl hostname -I") + val executor = DefaultExecutor.builder().get() + val outputStream = ByteArrayOutputStream() + executor.streamHandler = PumpStreamHandler(outputStream) + val exitCode = executor.execute(cmd) + + val output = stripNullBytes(outputStream.toString().trim()) + + val outputWithoutErrors = output.lines() + .filterNot { it.startsWith("<3>WSL") } + .joinToString(NEW_LINE) + + if (outputWithoutErrors.isNotBlank()) { + + val ips = outputWithoutErrors.splitOnWhites() + + ips.firstOrNull()?.let { + return it.also { + log.debug("WSL IP address found: $it") + } + } + } + } catch (e: Exception) { + log.error("Failed to get WSL IP address: ${e.message}", e) + } + + return null + } + + @Throws(IOException::class) + fun createDirectoryInWsl(linuxPath: String, distroName: String? = getDefaultWslDistro()): String { + val wslPath = convertUnixPathToWindowsWslPath(linuxPath, distroName) + + // Create directory and parent directories if they do not exist + Files.createDirectories(Path.of(wslPath)).also { + log.trace("Directory '$linuxPath'created in WSL volume at '$wslPath' in distro '$distroName'") + } + + return wslPath + } + + /** + * Converts a Windows-style path to a Linux-style path for use in WSL. + * Example: "C:\Users\path" -> "/mnt/c/Users/path" + */ + fun convertWindowsPathToUnixWslPath(windowsPath: String, distroName: String? = getDefaultWslDistro()): String { + require(isWindows()) { "WSL is a Windows OS technology only" } + require(isWslInstalled()) { "WSL is not installed" } + require(windowsPath.isNotBlank()) { "Windows path cannot be blank" } + // Require that distroName is an element in the list of WSL distros + require(distroName == null || getWslDistroNames().contains(distroName)) { + "Distro name '$distroName' is not a valid WSL distro" + } + + // If starts with \\wsl$\, then it's already a WSL path, and we need convert it to a Linux-style path + return if (windowsPath.startsWith("\\\\wsl\$")) { + val wslPath = windowsPath.replace(BACK_SLASH, FORWARD_SLASH) + val pathDistroName = wslPath.split(FORWARD_SLASH)[3] + wslPath.replaceFirst("\\\\wsl$\\\\$pathDistroName", EMPTY_STRING) + + } else { + // Convert Windows-style path to WSL share path (e.g. /mnt/c/Users/path) + val driveLetter = windowsPath.substring(0, 1).lowercase() // Extract the drive letter and convert to lowercase + val windowsPathWithoutDrive = windowsPath.substring(2) + .replace(BACK_SLASH, FORWARD_SLASH) // Remove the drive letter and replace backslashes with forward slashes + "/mnt/${driveLetter}/$windowsPathWithoutDrive" + } + } + + /** + * Converts a Linux-style path to a Windows-style path for use in WSL. + * Example: "/home/johndoe/myfile.txt" -> "\\wsl$\Ubuntu\home\johndoe\myfile.txt" + */ + fun convertUnixPathToWindowsWslPath(linuxPath: String, distroName: String? = getDefaultWslDistro()): String { + require(isWindows()) { "WSL is a Windows OS technology only" } + require(isWslInstalled()) { "WSL is not installed" } + require(linuxPath.isNotBlank()) { "Linux path cannot be blank" } + // Require that distroName is an element in the list of WSL distros + require(distroName == null || getWslDistroNames().contains(distroName)) { + "Distro name '$distroName' is not a valid WSL distro" + } + + // Convert Linux-style path to WSL share path (e.g. \\wsl$\Ubuntu\home\path) + return Paths.get("\\\\wsl\$\\${distroName ?: getDefaultWslDistro()}$linuxPath").absolutePathString() + } + + /** + * Converts a Path to a string that can be used in a Docker command. + * Example: "C:\Users\path" -> "/mnt/c/Users/path" (WSL) or "C:/Users/path" (Docker Desktop) + */ + fun convertToDockerPath(path: Path): String { + val convertedPath: String + + if (isWindows()) { + // Convert Path to a Windows-style path + val absolutePath = path.toAbsolutePath().toString() + val driveLetter = absolutePath.substring(0, 1) + + if (isDockerDesktopOnWindows()) { + // For Windows with Docker Desktop installed, return the Windows path in Docker format + convertedPath = absolutePath + .replace(BACK_SLASH, FORWARD_SLASH) + .replaceFirst("${driveLetter}:/", "/${driveLetter}/").also { + log.debug("Converted path '$path' to Docker Desktop format: $it") + } + + } else if (isWslInstalled()) { + // For Windows with WSL installed, convert the path to WSL format + val windowsPath = path.toString().replace(BACK_SLASH, FORWARD_SLASH) + val wslPath = windowsPath.replaceFirst("$driveLetter:/", "/mnt/${driveLetter.lowercase()}/") + convertedPath = wslPath.also { + log.debug("Converted path '$path' to WSL format: $it") + } + + } else { + // Default case for Windows when Docker Desktop or WSL are not installed + convertedPath = absolutePath.also { + log.debug("Converted path '$path' to 'as is' format: $it") + } + } + + } else { + // Default case, return the path as-is for non-Windows OS + convertedPath = path.toAbsolutePath().toString().also { + log.debug("Converted path '$path' to 'as is' format: $it") + } + } + + return convertedPath + } + + fun convertWindowsPathToUnix(windowsPath: String): String { + return windowsPath.replace(BACK_SLASH, FORWARD_SLASH).replace("^[a-zA-Z]:".toRegex(), EMPTY_STRING) + } + + private fun stripNullBytes(input: String): String { + return input.replace("\u0000", EMPTY_STRING) + } + + @Throws(IOException::class) + private fun convertInputStreamToUTF8(inputStream: InputStream): InputStream { + val outputStream = ByteArrayOutputStream() + val buf = ByteArray(1024) + var length: Int + + // While there are still bytes to read from the input stream + while (inputStream.read(buf).also { length = it } != -1) { + for (i in 0 until length) { + // Filter out null bytes + if (buf[i] != 0.toByte()) { + outputStream.write(buf[i].toInt()) + } + } + } + + // Convert the cleaned output byte stream to an input byte stream with UTF-8 encoding + return ByteArrayInputStream(outputStream.toByteArray()) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/text/Functions.kt b/src/main/kotlin/no/acntech/easycontainers/util/text/Functions.kt new file mode 100644 index 00000000..9b16d0af --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/text/Functions.kt @@ -0,0 +1,44 @@ +package no.acntech.easycontainers.util.text + +val WHITESPACE_REGEX = "\\s+".toRegex() + +/** + * Splits a string into a list of substrings using whitespace as the delimiter. + * + * @receiver The string to be split. + * @return The list of substrings obtained by splitting the receiver string on whitespaces. + */ +fun String.splitOnWhites() = split(WHITESPACE_REGEX) + +/** + * Truncates the string if its length exceeds the specified maximum length. An affix can be appended + * to the truncated string. By default, the truncation is performed from the end of the string with the + * affix appended as a suffix. + * + * @param length The maximum length of the string. + * @param affix The prefix or suffix to be added to the truncated string. Default value the empty string. + * @param fromStart Boolean indicating whether the truncation should be performed from the start of the string or from + * the end. Default value is false. + * @return The truncated string with the specified affix appended. + */ +fun String.truncate(length: Int, affix: String = EMPTY_STRING, fromStart: Boolean = false): String { + if (this.length <= length) return this + val suffixLength = affix.length + + return if (!fromStart) { + // Truncate from end + if (length <= suffixLength) { + affix.take(length) + } else { + this.take(length - suffixLength) + affix + } + + } else { + // Truncate from start + if (length <= suffixLength) { + affix.take(length) + } else { + affix + this.takeLast(length - suffixLength) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/text/LengthValidator.kt b/src/main/kotlin/no/acntech/easycontainers/util/text/LengthValidator.kt new file mode 100644 index 00000000..a156292f --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/text/LengthValidator.kt @@ -0,0 +1,22 @@ +package no.acntech.easycontainers.util.text + +import no.acntech.easycontainers.util.lang.ValidationException +import no.acntech.easycontainers.util.lang.Validator + +/** + * A validator that forces a string to be of a certain length. + * + * @property min The minimum length of the string. + * @property max The maximum length of the string. + */ +data class LengthValidator(val min: Int?, val max: Int?) : Validator { + + override fun validate(t: String) { + if(min != null && t.length < min) { + throw ValidationException("String '${t.truncate(32)}' is shorter at #${t.length} than the required minimum length of $min") + } + if(max != null && t.length > max) { + throw ValidationException("String '${t.truncate(32)}' is longer #${t.length} than the required maximum length of $max") + } + } +} diff --git a/src/main/kotlin/no/acntech/easycontainers/util/text/RegexValidator.kt b/src/main/kotlin/no/acntech/easycontainers/util/text/RegexValidator.kt new file mode 100644 index 00000000..3e5f5bfa --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/text/RegexValidator.kt @@ -0,0 +1,30 @@ +package no.acntech.easycontainers.util.text + +import no.acntech.easycontainers.util.lang.ValidationException +import no.acntech.easycontainers.util.lang.Validator + +/** + * A validator that uses regular expressions to validate strings. + * + * @property pattern The regular expression pattern used for validation. + */ +class RegexValidator(val pattern: Regex) : Validator { + + override fun validate(t: String) { + if (!pattern.matches(t)) { + throw ValidationException("String '$t' does not match the required regex pattern: ${pattern.pattern}") + } + } + + override fun equals(other: Any?): Boolean { + return other is RegexValidator && pattern == other.pattern + } + + override fun hashCode(): Int { + return pattern.hashCode() + } + + override fun toString(): String { + return pattern.pattern + } +} diff --git a/src/main/kotlin/no/acntech/easycontainers/util/text/StringConstants.kt b/src/main/kotlin/no/acntech/easycontainers/util/text/StringConstants.kt new file mode 100644 index 00000000..4def10ee --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/text/StringConstants.kt @@ -0,0 +1,91 @@ +package no.acntech.easycontainers.util.text + +const val EMPTY_STRING = "" + +const val SPACE = " " + +const val COMMA = "," + +const val COLON = ":" + +const val DOT = "." + +const val UNDERSCORE = "_" + +const val HYPHEN = "-" + +const val FORWARD_SLASH = "/" + +const val BACK_SLASH = "\\" + +const val NEW_LINE = "\n" + +const val TAB = "\t" + +const val CR = "\r" + +const val CRLF = "\r\n" + +const val SEMICOLON = ";" + +const val EQUALS = "=" + +const val ASTERISK = "*" + +const val AMPERSAND = "&" + +const val QUESTION_MARK = "?" + +const val EXCLAMATION_MARK = "!" + +const val AT_SIGN = "@" + +const val HASH = "#" + +const val DOLLAR_SIGN = "$" + +const val PERCENT_SIGN = "%" + +const val PLUS = "+" + +const val MINUS = "-" + +const val PIPE = "|" + +const val LEFT_PAREN = "(" + +const val RIGHT_PAREN = ")" + +const val LEFT_SQUARE_BRACKET = "[" + +const val RIGHT_SQUARE_BRACKET = "]" + +const val LEFT_CURLY_BRACKET = "{" + +const val RIGHT_CURLY_BRACKET = "}" + +const val LT_GT = "<>" + +const val EQ = EQUALS + +const val LT = "<" + +const val LT_EQ = "<=" + +const val GT = ">" + +const val GT_EQ = ">=" + +const val SINGLE_QUOTE = "'" + +const val DOUBLE_QUOTE = "\"" + +const val BACKTICK = "`" + +const val TILDE = "~" + +const val CARET = "^" + +const val VERTICAL_BAR = "|" + +const val COMMA_SPACE = ", " \ No newline at end of file diff --git a/src/main/kotlin/no/acntech/easycontainers/util/text/StringValidator.kt b/src/main/kotlin/no/acntech/easycontainers/util/text/StringValidator.kt new file mode 100644 index 00000000..4cfff6aa --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/text/StringValidator.kt @@ -0,0 +1,45 @@ +package no.acntech.easycontainers.util.text + +import no.acntech.easycontainers.util.lang.RangeValidator +import no.acntech.easycontainers.util.lang.Validator + + +/** + * Validates a String value object based on a given range and additional validators. + * + * @param minLength the minimum length of the String value object (optional) + * @param maxLength the maximum length of the String value object (optional) + * @param rangeValidator the range validator for the String value object (optional) + * @param lexicalValidator the lexical validator for the String value object (optional) + * @param syntaxValidator the syntax validator for the String value object (optional) + * @param semanticsValidator the semantics validator for the String value object (optional) + */ +class StringValidator( + private val minLength: Int? = null, + private val maxLength: Int? = null, + private val rangeValidator: RangeValidator? = null, + private val lexicalValidator: Validator? = null, + private val syntaxValidator: Validator? = null, + private val semanticsValidator: Validator? = null, +) : Validator { + + override fun validate(t: String) { + + val lengthValidator = LengthValidator(minLength, maxLength) + + // Length checks + lengthValidator.validate(t) + + // Range checks (alphabetical) + rangeValidator?.validate(t) + + // Lexical content checks + lexicalValidator?.validate(t) + + // Syntax checks + syntaxValidator?.validate(t) + + // Semantics checks + semanticsValidator?.validate(t) + } +} diff --git a/src/main/kotlin/no/acntech/easycontainers/util/time/WaitTimeCalculator.kt b/src/main/kotlin/no/acntech/easycontainers/util/time/WaitTimeCalculator.kt new file mode 100644 index 00000000..43243a93 --- /dev/null +++ b/src/main/kotlin/no/acntech/easycontainers/util/time/WaitTimeCalculator.kt @@ -0,0 +1,33 @@ +package no.acntech.easycontainers.util.time + +import java.util.concurrent.TimeUnit + +/** + * WaitTimeCalculator is a utility class that calculates the remaining time for a given wait time value, + * unit and start time. + * + * @property waitTimeValue The wait time value + * @property waitTimeUnit The wait time unit + * @property startTime The start time of the wait time calculation + */ +data class WaitTimeCalculator( + val waitTimeValue: Long, + val waitTimeUnit: TimeUnit, + val startTime: Long = System.nanoTime(), +) { + + /** + * Calculates the remaining time based on the unit provided, calculated from the start time for this instance. + * + * @param unit The time unit to return the remaining time in. Defaults to the wait time unit provided with + * this instance. + * @return The remaining time in the specified time unit. + */ + fun getRemainingTime(unit: TimeUnit = waitTimeUnit): Long { + val elapsed = System.nanoTime() - startTime + val elapsedInWaitUnit = waitTimeUnit.convert(elapsed, TimeUnit.NANOSECONDS) + val remaining = waitTimeValue - elapsedInWaitUnit + + return unit.convert(remaining, waitTimeUnit) + } +} \ No newline at end of file diff --git a/src/main/resources/site/index.html b/src/main/resources/site/index.html new file mode 100644 index 00000000..fe25ada0 --- /dev/null +++ b/src/main/resources/site/index.html @@ -0,0 +1,16 @@ + + + + + + Project Documentation + + +

      Easycontainers API Documentation

      +

      Welcome to the Easycontainers API documentation page. Choose the documentation format you wish to view:

      + + + \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerExecTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerExecTests.kt new file mode 100644 index 00000000..1dbb9872 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerExecTests.kt @@ -0,0 +1,205 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.io.toUtf8String +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.shutdownContainer +import test.acntech.easycontainers.TestSupport.startContainer +import java.io.ByteArrayOutputStream +import java.util.concurrent.TimeUnit + +class ContainerExecTests { + + companion object { + private val log = LoggerFactory.getLogger(ContainerExecTests::class.java) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun `Test echo command execution`(containerType: String) { + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, false) + val runtime = container.getRuntime() + val output = ByteArrayOutputStream() + + val msg = "Hello, ${platform.name}!" + + val (exitCode, stderr) = container.execute( + Executable.of("echo"), + Args.of(msg), + false, + UnixDir.of(FORWARD_SLASH), + null, + output, + 10, + TimeUnit.SECONDS + ) + + log.debug("Exit code: $exitCode") + log.debug("Stdout: ${output.toUtf8String()}") + log.debug("Stderr: $stderr") + + exitCode?.let { + assertEquals(0, exitCode) + } + assertTrue(output.toUtf8String().startsWith(msg)) + assertNull(stderr) + + shutdownContainer(container) + log.debug("Container exit code: {}", container.getExitCode()) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun `Test df command execution`(containerType: String) { + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, false) + val runtime = container.getRuntime() + val output = ByteArrayOutputStream() + + val (exitCode, stderr) = container.execute( + Executable.of("df"), + Args.of("-h"), + false, + UnixDir.of(FORWARD_SLASH), + null, + output, + 10, + TimeUnit.SECONDS + ) + + val stdout = output.toUtf8String() + + log.debug("Exit code: $exitCode") + log.debug("Stdout: $stdout") + log.debug("Stderr: $stderr") + + exitCode?.let { + assertEquals(0, exitCode) + } + + assertNull(stderr) + // The first line of the output should contain Filesystem and Size + assertTrue(stdout.contains("Filesystem")) + assertTrue(stdout.contains("Size")) + + shutdownContainer(container) + log.debug("Container exit code: {}", container.getExitCode()) + } + + @ParameterizedTest + @ValueSource( + strings = [ +// "DOCKER", // Fails with "Does not support hijacking" error - unresolved + "KUBERNETES" + ] + ) + fun `Test 'cat' command with input and output`(containerType: String) { + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, true) + val runtime = container.getRuntime() + val inputString = "Hello, ${platform.name}!" + val input = inputString.byteInputStream() + val output = ByteArrayOutputStream() // Output stream to capture the output - should be the same as the input + + val (exitCode, stderr) = container.execute( + Executable.of("cat"), + null, + true, + UnixDir.of(FORWARD_SLASH), + input, + output, + 20, + TimeUnit.SECONDS + ) + + val stdout = output.toUtf8String() + + log.debug("Exit code: $exitCode") + log.debug("Stdout: $stdout") + log.debug("Stderr: $stderr") + + exitCode?.let { + assertEquals(0, it) + } + assertEquals(inputString, stdout) + assertNull(stderr) + + shutdownContainer(container) + log.debug("Container exit code: {}", container.getExitCode()) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun `Test non-existent command execution`(value: String) { + val platform = ContainerPlatformType.valueOf(value) + val container = startContainer(platform, ExecutionMode.SERVICE, false) + val output = ByteArrayOutputStream() + val runtime = container.getRuntime() + + when (platform) { + ContainerPlatformType.DOCKER -> { + val (exitCode, stderr) = container.execute( + Executable.of("nonexistentcommand"), + null, + false, + UnixDir.of(FORWARD_SLASH), + null, + output, + 10, + TimeUnit.SECONDS + ) + + val stdout = output.toUtf8String() + + log.debug("Exit code: $exitCode") + log.debug("Stdout: $stdout") + log.debug("Stderr: $stderr") + + exitCode?.let { + assertNotEquals(0, exitCode) + } + + assertTrue(stdout.contains("nonexistentcommand")) + } + + ContainerPlatformType.KUBERNETES -> { + assertThrows { + container.execute( + Executable.of("nonexistentcommand"), + null, + false, + UnixDir.of(FORWARD_SLASH), + null, + output, + 10, + TimeUnit.SECONDS + ) + } + } + } + + shutdownContainer(container) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerFileMountTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerFileMountTests.kt new file mode 100644 index 00000000..74592f45 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerFileMountTests.kt @@ -0,0 +1,66 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.ContainerBuilderCallback +import no.acntech.easycontainers.model.* +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource +import org.slf4j.LoggerFactory +import java.nio.file.Files +import kotlin.io.path.readText + +class ContainerFileMountTests { + + companion object { + private val log = LoggerFactory.getLogger(ContainerFileMountTests::class.java) + } + + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun `Test mounting container file (single file mount)`(containerType: String) { + log.info("Testing mount container file on platform: $containerType") + + val containerPlatformType = ContainerPlatformType.valueOf(containerType) + + val content = "Hello, world!" + val mount = UnixDir.of("/tmp/test1") + val fileName = "hello.txt" + + val callback: ContainerBuilderCallback = object : ContainerBuilderCallback { + + override fun configure(builder: ContainerBuilder<*>) { + builder.withContainerFile( + ContainerFile( + ContainerFileName.of(fileName), + mount, + content, + Files.createTempFile("hello", ".txt") + ) + ) + } + + } + + val container = TestSupport.startContainer( + containerPlatformType, + ExecutionMode.SERVICE, + true, + callback + ) + + log.debug("Container state: ${container.getState()}") + + val file = container.getFile(mount, fileName) + val readContent = file.readText() + assertEquals(content, readContent) + + TestSupport.shutdownContainer(container) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerFileTransferTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerFileTransferTests.kt new file mode 100644 index 00000000..559909a7 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerFileTransferTests.kt @@ -0,0 +1,152 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.model.ContainerPlatformType +import no.acntech.easycontainers.model.ExecutionMode +import no.acntech.easycontainers.model.UnixDir +import no.acntech.easycontainers.util.lang.guardedExecution +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import no.acntech.easycontainers.util.text.NEW_LINE +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource +import org.slf4j.LoggerFactory.getLogger +import test.acntech.easycontainers.TestSupport.startContainer +import java.io.File +import java.nio.file.Files +import java.util.concurrent.TimeUnit +import kotlin.io.path.ExperimentalPathApi +import kotlin.io.path.deleteIfExists +import kotlin.io.path.deleteRecursively + +class ContainerFileTransferTests { + + companion object { + private val log = getLogger(ContainerFileTransferTests::class.java) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun testGetFile(containerType: String) { + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, true) + + val path = container.getFile(UnixDir.of(FORWARD_SLASH), "log-time.sh") + + val content = Files.readString(path) + log.debug("Content of file:$NEW_LINE$content") + assertTrue(content.contains("while getopts")) + guardedExecution({ container.getRuntime().delete(true) }) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun testPutAndGetFile(containerType: String) { + val remoteDir = UnixDir.of("/tmp") + val remoteFile = "remote_test.txt" + + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, true) + + val runtime = container.getRuntime() + val content = "Hello '${container.getName()}' with runtime '${runtime.getName()}'" + log.debug("Content of file: $content") + + // Create a new temp file in the temp directory with some content + val tempFile = Files.createTempFile("test_", ".txt") + try { + Files.writeString(tempFile, content) + + // Call the target method + container.putFile(tempFile, remoteDir, remoteFile) + + TimeUnit.SECONDS.sleep(10) + + val path = container.getFile(remoteDir, remoteFile) + + val receivedContent = Files.readString(path) + log.debug("Content of received file: $receivedContent") + + assertEquals(content, receivedContent) + + } finally { + TestSupport.shutdownContainer(container) + tempFile.deleteIfExists() + } + } + + @OptIn(ExperimentalPathApi::class) + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun testPutAndGetDirectory(containerType: String) { + val remoteDir = UnixDir.of("/tmp") + + val platform = ContainerPlatformType.valueOf(containerType) + val container = startContainer(platform, ExecutionMode.SERVICE, true) + + val runtime = container.getRuntime() + log.debug("Container '${container.getName()}' with runtime '${runtime.getName()}'") + + val content1 = "Hello 1 '${container.getName()}' with runtime '${runtime.getName()}'" + val content2 = "Hello 2 '${container.getName()}' with runtime '${runtime.getName()}'" + + // Create a new temp directory with a temp file in it + val tempSendDir = Files.createTempDirectory("dir_test_send_") + val tempReceiveDir = Files.createTempDirectory("dir_test_receive_") + + try { + val rootDir = Files.createDirectories(tempSendDir.resolve("tar-root")) + val file1 = File(rootDir.toFile(), "test_1.txt") + val file2 = File(rootDir.toFile(), "test_2.txt") + + Files.writeString(file1.toPath(), content1) + Files.writeString(file2.toPath(), content2) + + // Call the target method to put the directory + container.putDirectory(rootDir, remoteDir) + + // Call the target method to get the directory + val (path, files) = container.getDirectory(UnixDir.of(remoteDir.unwrap() + "/tar-root"), tempReceiveDir) + + log.debug("Received directory: $path") + log.debug("Received files: $files") + + val tarRoot = tempReceiveDir.resolve("tar-root") + + // Check the received files + val receivedFile1 = tarRoot.resolve(file1.name) + val receivedFile2 = tarRoot.resolve(file2.name) + + // Various assertions + assertEquals(2, files.size) + assertEquals(2, Files.list(tarRoot).count()) + assertTrue(files.contains(receivedFile1)) + assertTrue(files.contains(receivedFile2)) + assertTrue(Files.exists(receivedFile1)) + assertTrue(Files.exists(receivedFile2)) + assertEquals(content1, Files.readString(receivedFile1)) + assertEquals(content2, Files.readString(receivedFile2)) + + } finally { + TestSupport.shutdownContainer(container) + guardedExecution({ tempSendDir.deleteRecursively() }) + guardedExecution({ tempReceiveDir.deleteRecursively() }) + } + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerLifeCycleTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerLifeCycleTests.kt new file mode 100644 index 00000000..15cd2752 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerLifeCycleTests.kt @@ -0,0 +1,113 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.model.Container +import no.acntech.easycontainers.model.ContainerPlatformType +import no.acntech.easycontainers.model.ExecutionMode +import org.apache.commons.lang3.time.DurationFormatUtils +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtensionContext +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.ArgumentsProvider +import org.junit.jupiter.params.provider.ArgumentsSource +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.startContainer +import java.util.concurrent.TimeUnit +import java.util.stream.Stream + +class ContainerLifeCycleTests { + + companion object { + private val log = LoggerFactory.getLogger(ContainerLifeCycleTests::class.java) + private const val PARAM_GRACEFUL_SHUTDOWN = "graceful-shutdown" + } + + + @Test + @Disabled + fun startAndRunServiceTestContainers() { +// val dockerContainer = startContainer(ContainerPlatformType.DOCKER, ExecutionMode.SERVICE) + val k8sContainer = startContainer(ContainerPlatformType.KUBERNETES, ExecutionMode.SERVICE) + TimeUnit.SECONDS.sleep(10 * 60) + } + + @Test + @Disabled + fun startAndRunTaskTestContainers() { + try { + val k8sContainer = startContainer(ContainerPlatformType.KUBERNETES, ExecutionMode.TASK) + // val dockerContainer = startContainer(ContainerPlatformType.DOCKER, ExecutionMode.TASK) + } catch (e: Exception) { + log.error("Error starting container", e) + } + + TimeUnit.SECONDS.sleep(10 * 60) + } + + class LifeCycleTestArgumentsProvider : ArgumentsProvider { + override fun provideArguments(context: ExtensionContext?): Stream { + return Stream.of( + Arguments.of(ContainerPlatformType.DOCKER, ExecutionMode.SERVICE, mapOf(PARAM_GRACEFUL_SHUTDOWN to "true")), + Arguments.of(ContainerPlatformType.DOCKER, ExecutionMode.SERVICE, mapOf(PARAM_GRACEFUL_SHUTDOWN to "false")), + Arguments.of(ContainerPlatformType.KUBERNETES, ExecutionMode.SERVICE, mapOf(PARAM_GRACEFUL_SHUTDOWN to "true")), + Arguments.of(ContainerPlatformType.KUBERNETES, ExecutionMode.SERVICE, mapOf(PARAM_GRACEFUL_SHUTDOWN to "false")) + ) + } + } + + @ParameterizedTest + @ArgumentsSource(LifeCycleTestArgumentsProvider::class) + fun `Test start-stop-kill-and-delete the test-container`( + containerPlatformType: ContainerPlatformType, + executionMode: ExecutionMode, + params: Map, + ) { + + fun gracefulShutdown(container: Container) { + log.debug("Gracefully shutting down the container: ${container.getName()}") + val runtime = container.getRuntime() + runtime.stop() + assertEquals(Container.State.STOPPED, runtime.getContainer().getState()) + runtime.delete() + assertEquals(Container.State.DELETED, runtime.getContainer().getState()) + } + + fun forcefulShutdown(container: Container) { + log.debug("Forcefully shutting down the container: ${container.getName()}") + val runtime = container.getRuntime() + runtime.kill() + assertEquals(Container.State.STOPPED, runtime.getContainer().getState()) + runtime.delete(true) + assertEquals(Container.State.DELETED, runtime.getContainer().getState()) + } + + val container = startContainer(containerPlatformType, executionMode) + + TimeUnit.SECONDS.sleep(2) + + val stopGracefully = params[PARAM_GRACEFUL_SHUTDOWN]?.toBoolean() ?: true + if (stopGracefully) { + gracefulShutdown(container) + } else { + forcefulShutdown(container) + } + + assertEquals(Container.State.DELETED, container.getState()) + assertNotNull(container.getDuration()) + + log.debug( + "Container duration: {}", + DurationFormatUtils.formatDuration( + container.getDuration()!!.toMillis(), + "mm'm:'ss's.'SSS'ms'", + true + ) + ) + + log.debug("Container exit code: ${container.getExitCode()}") + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerTaskTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerTaskTests.kt new file mode 100644 index 00000000..a50b476b --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerTaskTests.kt @@ -0,0 +1,52 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.model.Container +import no.acntech.easycontainers.model.ContainerPlatformType +import no.acntech.easycontainers.model.ExecutionMode +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource +import org.slf4j.LoggerFactory +import java.util.concurrent.TimeUnit + +class ContainerTaskTests { + + companion object { + private val log = LoggerFactory.getLogger(ContainerTaskTests::class.java) + } + + @ParameterizedTest + @ValueSource( + strings = [ + "DOCKER", + "KUBERNETES" + ] + ) + fun `Test task`(containerType: String) { + log.info("Running test-task for container type: $containerType") + val containerPlatformType = ContainerPlatformType.valueOf(containerType) + + val container = TestSupport.startContainer(containerPlatformType, ExecutionMode.TASK, true) + + val completed = container.waitForCompletion(10, TimeUnit.SECONDS) + + assertTrue(completed, "Task did not complete within the time limit") + + val exitCode = container.getExitCode() + + log.debug("Container state: ${container.getState()}") + log.debug("Container exit code: $exitCode") + + assertEquals(10, exitCode) + + assertTrue( + container.getState() == Container.State.FAILED + || container.getState() == Container.State.STOPPED + || container.getState() == Container.State.DELETED + ) + + TestSupport.shutdownContainer(container) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ContainerVolumeMountTests.kt b/src/test/kotlin/test/acntech/easycontainers/ContainerVolumeMountTests.kt new file mode 100644 index 00000000..2d9050a9 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ContainerVolumeMountTests.kt @@ -0,0 +1,121 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.ContainerBuilderCallback +import no.acntech.easycontainers.Environment +import no.acntech.easycontainers.Environment.k8sGeneralDataPvcName +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import no.acntech.easycontainers.util.text.truncate +import org.apache.commons.io.FileUtils +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.extension.ExtensionContext +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.ArgumentsProvider +import org.junit.jupiter.params.provider.ArgumentsSource +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.getActualDir +import java.nio.file.Files +import java.nio.file.Path +import java.util.* +import java.util.stream.Stream +import kotlin.io.path.readText + +class ContainerVolumeMountTests { + + companion object { + private val log = LoggerFactory.getLogger(ContainerVolumeMountTests::class.java) + } + + class ContainerVolumeMountTestsProvider : ArgumentsProvider { + override fun provideArguments(context: ExtensionContext?): Stream { + return Stream.of( + Arguments.of(ContainerPlatformType.DOCKER, "/tmp"), // in Docker, any directory can be shared + Arguments.of(ContainerPlatformType.KUBERNETES, Environment.k8sGeneralDataHostDir), + ) + } + } + + @ParameterizedTest + @ArgumentsSource(ContainerVolumeMountTestsProvider::class) + fun `Test mounting simple host volume `(containerType: ContainerPlatformType, hostPath: String) { + + val volumeNameVal = k8sGeneralDataPvcName.substringBefore("-pvc").also { + log.debug("Using the k8s PVC name (less the '-pvc' suffix) as volume name: $it") + } + + val name = VolumeName.of(volumeNameVal) + + val subDir = UUID.randomUUID().toString().truncate(8) + val mountDir = UnixDir.of("/mnt/test") + val hostDir = Path.of(hostPath).also { + log.debug("Using host directory as a basis for mount: $it") + } + + createTestFiles(hostDir.resolve(subDir)) + + val callback: ContainerBuilderCallback = object : ContainerBuilderCallback { + + override fun configure(builder: ContainerBuilder<*>) { + val volume = Volume(name, mountDir, hostDir) + builder.withVolume(volume) + } + + } + + val container = TestSupport.startContainer( + containerType, + ExecutionMode.SERVICE, + true, + callback + ) + + log.debug("Container state: ${container.getState()}") + + val targetTestDir = mountDir.value + FORWARD_SLASH + subDir + + val localFile1 = container.getFile(targetTestDir, "hello-1.txt") + val localFile2 = container.getFile(targetTestDir, "hello-2.txt") + + val content1 = localFile1.readText().also { + log.debug("Content of file 1: $it") + } + val content2 = localFile2.readText().also { + log.debug("Content of file 2: $it") + } + + assertEquals("Hello, world 1!", content1) + assertEquals("Hello, world 2!", content2) + + container.getRuntime().stop() + container.getRuntime().delete(true) + deleteTestFiles(hostDir.resolve(subDir)) + } + + private fun createTestFiles(hostDir: Path) { + val actualDir = getActualDir(hostDir) + + Files.createDirectories(actualDir) + + val file1 = actualDir.resolve("hello-1.txt") + file1.toFile().createNewFile() + + val file2 = actualDir.resolve("hello-2.txt") + file2.toFile().createNewFile() + + file1.toFile().writeText("Hello, world 1!") + file2.toFile().writeText("Hello, world 2!") + + log.debug( + "Created test files ${file1.toAbsolutePath()} and ${file2.toAbsolutePath()}" + + " in the shared host directory: $actualDir" + ) + } + + private fun deleteTestFiles(hostDir: Path) { + val actualDir = getActualDir(hostDir) + FileUtils.deleteDirectory(actualDir.toFile()) + log.debug("Deleted test files in dir: $actualDir") + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ImageBuilderTests.kt b/src/test/kotlin/test/acntech/easycontainers/ImageBuilderTests.kt new file mode 100644 index 00000000..cbab115a --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ImageBuilderTests.kt @@ -0,0 +1,125 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.Environment.defaultRegistryEndpoint +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.ImageBuilder +import no.acntech.easycontainers.docker.DockerRegistryUtils +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.net.NetworkUtils +import no.acntech.easycontainers.util.text.NEW_LINE +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.CsvSource +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.dockerFileContent +import test.acntech.easycontainers.TestSupport.scriptContent +import test.acntech.easycontainers.TestSupport.shutdownContainer +import java.io.File +import java.nio.file.Files +import java.nio.file.Path +import java.time.Instant +import java.util.concurrent.TimeUnit + +class ImageBuilderTests { + + companion object { + private val log = LoggerFactory.getLogger(ImageBuilderTests::class.java) + } + + @ParameterizedTest + @CsvSource( + "DOCKER, 8022", + "KUBERNETES, 30022" + ) + fun `Test build and run image`(containerType: String, sshPort: Int) { + log.info("Testing Alpine SSH test-job container with container type: $containerType") + + val platformType = ContainerPlatformType.valueOf(containerType.uppercase()) + + val imageName = ImageName.of("easycontainers-junit-test-job") + val repository = RepositoryName.TEST + val imageUrlVal = "$defaultRegistryEndpoint/$repository/$imageName" + log.info("Image URL: $imageUrlVal") + + DockerRegistryUtils.deleteImage("http://$defaultRegistryEndpoint/$repository", imageName.unwrap()) + + val dockerContextDir = Files.createTempDirectory("temp-docker-context-").toString().also { + log.debug("Docker context (temp) dir created: $it") + } + + val dockerfile = File(dockerContextDir, "Dockerfile") + val logTimeScript = File(dockerContextDir, "log-time.sh") + + dockerfile.writeText(dockerFileContent) + logTimeScript.writeText( + scriptContent + .replace("#MESSAGE#", "Hello from $platformType container") + .replace("#COUNT#", "10") + ) + + log.debug("Dockerfile created in: ${dockerfile.absolutePath}") + log.debug("Dockerfile contents:$NEW_LINE$$NEW_LINE${dockerfile.readText()}$NEW_LINE$NEW_LINE") + + log.debug("log-time.sh created in : ${logTimeScript.absolutePath}") + log.debug("log-time.sh contents:$NEW_LINE$$NEW_LINE{logTimeScript.readText()}") + + val imageBuilder = ImageBuilder.of(platformType) + .withName(imageName) + .withVerbosity(Verbosity.DEBUG) + .withImageRegistry(RegistryURL.of(defaultRegistryEndpoint.substringAfter("://"))) + .withInsecureRegistry(true) + .withRepository(RepositoryName.TEST) + .withNamespace(Namespace.TEST) + .withDockerContextDir(Path.of(dockerContextDir)) + + // Will only work for Kubernetes!!! + .withOutputLineCallback { line -> println("KUBE-KANIKO-JOB-OUTPUT: ${Instant.now()} - $line") } + + val result = imageBuilder.buildImage() + + assertTrue(result, "Image build failed") + + log.info("Image built successfully: $imageUrlVal") + + TimeUnit.SECONDS.sleep(2) + + // Now we have a new version of the image in the registry, lets run it in a container + + // Build it... + val container = GenericContainer.builder().apply { + withContainerPlatformType(platformType) + withExecutionMode(ExecutionMode.TASK) + withIsEphemeral(false) + withName(ContainerName.of("easycontainers-junit-test-job")) + withNamespace(Namespace.TEST) + withImage(ImageURL.of(imageUrlVal)) + withExposedPort("ssh", 22) + withPortMapping(22, sshPort) + withIsEphemeral(true) + withMaxLifeTime(30, TimeUnit.SECONDS) + withOutputLineCallback { line -> println("$platformType-OUTPUT: $line") } + }.build() + + // Run it... + container.getRuntime().start() + val running = container.waitForState(Container.State.RUNNING, 60, TimeUnit.SECONDS) + assertTrue(running, "Container did not start within 60 seconds") + assertTrue(NetworkUtils.isTcpPortOpen("localhost", sshPort)) + + // Wait for it... + val completed = container.waitForCompletion(60, TimeUnit.SECONDS) + + assertTrue(completed, "Container did not complete within 10 seconds") + + // Check it... + val exitVal = container.getExitCode() + assertEquals(10, exitVal, "Container exited with code $exitVal, expected 10") + + // Delete it... + + shutdownContainer(container) + } + + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/KanikoContainerTests.kt b/src/test/kotlin/test/acntech/easycontainers/KanikoContainerTests.kt new file mode 100644 index 00000000..0bf0e696 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/KanikoContainerTests.kt @@ -0,0 +1,107 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.Environment +import no.acntech.easycontainers.custom.KanikoContainer +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.text.truncate +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.extension.ExtensionContext +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.ArgumentsProvider +import org.junit.jupiter.params.provider.ArgumentsSource +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.getActualDir +import java.nio.file.Files +import java.nio.file.Path +import java.util.* +import java.util.concurrent.TimeUnit +import java.util.stream.Stream + +class KanikoContainerTests { + + companion object { + private val log = LoggerFactory.getLogger(KanikoContainerTests::class.java) + } + + class KanikoContainerTestsProvider : ArgumentsProvider { + override fun provideArguments(context: ExtensionContext?): Stream { + return Stream.of( + Arguments.of(ContainerPlatformType.DOCKER, "/tmp"), // in Docker, any directory can be shared + Arguments.of(ContainerPlatformType.KUBERNETES, Environment.k8sKanikoDataHostDir), + ) + } + } + + @ParameterizedTest + @ArgumentsSource(KanikoContainerTestsProvider::class) + fun `Test Kaniko container`(containerType: ContainerPlatformType, hostPath: String) { + + val volumeNameVal = Environment.k8sKanikoDataPvcName.substringBefore("-pvc").also { + log.debug("Using the K8s Kaniko PVC name (less the '-pvc' suffix) as volume name: $it") + } + + val volumeName = VolumeName.of(volumeNameVal) + + val dockerContextSubDir = UUID.randomUUID().toString().truncate(5) + val hostDir = Path.of(hostPath).also { + log.debug("Using host directory as basis for Kaniko-data mount: $it") + } + + val volume = Volume( + volumeName, + UnixDir.of(KanikoContainer.KanikoContainerBuilder.KANIKO_DATA_VOLUME_MOUNT_PATH), + hostDir + ) + + createDockerFiles(hostDir.resolve(dockerContextSubDir)) + + val container = KanikoContainer.KanikoContainerBuilder().apply { + withContainerPlatformType(containerType) + withNamespace(Namespace.TEST) + withRegistry(Environment.defaultRegistryEndpoint) + withRepository(RepositoryName.TEST) + withInsecureRegistry(true) + withDockerContextVolume(volume) + withDockerContextSubDir("/$dockerContextSubDir") + withOutputLineCallback { line -> log.debug("$containerType-Kaniko-container-output: $line") } + }.build() + + val runtime = container.getRuntime() + runtime.start() + + container.waitForCompletion(30, TimeUnit.SECONDS) + + val exitCode = container.getExitCode() + log.debug("Container state: ${container.getState()}") + log.debug("Container exit code: $exitCode") + + assertEquals(0, exitCode) + } + + private fun createDockerFiles(hostDir: Path) { + val dockerContextDir = getActualDir(hostDir) + + val helloFile = dockerContextDir.resolve("hello.txt") + val helloFileContent = "Hello from Alpine!!!" + + val dockerfile = dockerContextDir.resolve("Dockerfile") + val dockerfileContent = """ + FROM alpine:latest + COPY hello.txt /hello.txt + CMD ["cat", "/hello.txt"] + """.trimIndent() + + Files.createDirectories(dockerContextDir) + + helloFile.toFile().writeText(helloFileContent) + dockerfile.toFile().writeText(dockerfileContent) + + log.debug( + "Created Docker files '${dockerfile.toAbsolutePath()}'" + + " and '${helloFile.toAbsolutePath()}' in host directory: $dockerContextDir" + ) + } + + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/ShowCaseTests.kt b/src/test/kotlin/test/acntech/easycontainers/ShowCaseTests.kt new file mode 100644 index 00000000..404cb653 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/ShowCaseTests.kt @@ -0,0 +1,94 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.Environment.defaultRegistryEndpoint +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.model.* +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import org.slf4j.LoggerFactory +import java.util.concurrent.TimeUnit + +class ShowCaseTests { + + companion object { + private val log = LoggerFactory.getLogger(ShowCaseTests::class.java) + } + + @Test + @Disabled + fun `Showcase Docker`() { + val imageName = "container-test" + + val container = GenericContainer.builder().apply { + withName(ContainerName.of("easycontainers-$imageName")) + withImage(ImageURL.of("$defaultRegistryEndpoint/test/$imageName:latest")) + + withContainerPlatformType(ContainerPlatformType.DOCKER) + + withEnv("LOG_TIME_MESSAGE", "Hello from Docker!!!") + + withOutputLineCallback { line -> println("DOCKER-CONTAINER-OUTPUT: $line") } + + // HTTP + withExposedPort(PortMappingName.HTTP, NetworkPort.HTTP) + withPortMapping(NetworkPort.HTTP, NetworkPort.of(8080)) + + // SSH + withExposedPort(PortMappingName.SSH, NetworkPort.SSH) + withPortMapping(NetworkPort.SSH, NetworkPort.of(8022)) + + }.build() + + val runtime = container.getRuntime() + + runtime.start() + + log.debug("Container state: ${container.getState()}") + + TimeUnit.SECONDS.sleep(5 * 60) + + container.getRuntime().delete() + } + + @Test + @Disabled + fun `Showcase Kubernetes`() { + val imageName = "container-test" + + val container = GenericContainer.builder().apply { + withNamespace("test") + withName(ContainerName.of("easycontainers-$imageName")) + withImage(ImageURL.of("${defaultRegistryEndpoint}/test/$imageName:latest")) + + withContainerPlatformType(ContainerPlatformType.KUBERNETES) + + withIsEphemeral(true) + + withEnv("LOG_TIME_MESSAGE", "Hello from Kube!!!") + + withOutputLineCallback { line -> println("KUBERNETES-CONTAINER-OUTPUT: $line") } + + // HTTP + withExposedPort("http", 80) + withPortMapping(80, 30080) + + // SSH + withExposedPort("ssh", 22) + withPortMapping(22, 30022) + + }.build() + + val runtime = container.getRuntime() + + runtime.start() + + log.debug("Container state: ${container.getState()}") + + container.waitForState(Container.State.RUNNING, 60, TimeUnit.SECONDS) + + TimeUnit.SECONDS.sleep(5 * 60) + + container.getRuntime().delete() + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/TestSupport.kt b/src/test/kotlin/test/acntech/easycontainers/TestSupport.kt new file mode 100644 index 00000000..8d82d24e --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/TestSupport.kt @@ -0,0 +1,224 @@ +package test.acntech.easycontainers + +import no.acntech.easycontainers.ContainerBuilderCallback +import no.acntech.easycontainers.Environment +import no.acntech.easycontainers.Environment.defaultRegistryEndpoint +import no.acntech.easycontainers.GenericContainer +import no.acntech.easycontainers.kubernetes.K8sUtils +import no.acntech.easycontainers.model.* +import no.acntech.easycontainers.util.lang.guardedExecution +import no.acntech.easycontainers.util.net.NetworkUtils +import no.acntech.easycontainers.util.platform.PlatformUtils +import no.acntech.easycontainers.util.text.CRLF +import no.acntech.easycontainers.util.text.NEW_LINE +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import java.lang.management.ManagementFactory +import java.nio.file.Path +import java.util.* +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit + +object TestSupport { + + private val log: Logger = LoggerFactory.getLogger(TestSupport::class.java) + + val localKanikoDir = PlatformUtils.convertUnixPathToWindowsWslPath(Environment.k8sKanikoDataHostDir) + + val localHostShareDir = PlatformUtils.convertUnixPathToWindowsWslPath(Environment.k8sGeneralDataHostDir) + + val dockerFileContent = """ + # Use Alpine Linux as the base image + FROM alpine:latest + + # Install dependencies + # RUN apk add --no-cache curl netcat-openbsd openssh + RUN apk add --no-cache openssh + + # Additional setup SSH + RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ + && sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config \ + && echo "root:root" | chpasswd \ + && ssh-keygen -A + + # Copy the log-time.sh script to the container + COPY log-time.sh /log-time.sh + + # Make the log-time.sh script executable + RUN chmod +x /log-time.sh + + # Create a startup script directly in the Dockerfile + RUN echo '#!/bin/sh' > /entrypoint.sh \ + && echo '/usr/sbin/sshd &' >> /entrypoint.sh \ + && echo '/log-time.sh' >> /entrypoint.sh \ + && chmod +x /entrypoint.sh + + # Expose necessary ports (the SSH port) + EXPOSE 22 + + # Define the container's default behavior + CMD ["/entrypoint.sh"] + + """.trimIndent().replace(CRLF, NEW_LINE) + + val scriptContent = """ + #!/bin/sh + + count=1 + while true + do + echo "${'$'}{count}: ${'$'}(date) - #MESSAGE#" + if [ "${'$'}count" -eq #COUNT# ]; then + echo "Exiting!" + exit 10 + fi + count=${'$'}((count+1)) + sleep 1 + done + """.trimIndent().replace(CRLF, NEW_LINE) + + + fun startContainer( + platform: ContainerPlatformType = ContainerPlatformType.DOCKER, + executionMode: ExecutionMode = ExecutionMode.SERVICE, + ephemeral: Boolean = true, + containerBuilderCallback: ContainerBuilderCallback? = null, + ): Container { + val imageName = "container-test" + + log.info("Testing the image '$imageName' on '$platform' with '$executionMode' mode") + + val mappedLocalHttpPort = when (platform) { + ContainerPlatformType.DOCKER -> 8080 + ContainerPlatformType.KUBERNETES -> if (K8sUtils.isRunningOutsideCluster()) 30080 else 80 + } + + val mappedLocalSshPort = when (platform) { + ContainerPlatformType.DOCKER -> 8022 + ContainerPlatformType.KUBERNETES -> if (K8sUtils.isRunningOutsideCluster()) 30022 else 22 + } + + val container = GenericContainer.builder().apply { + withContainerPlatformType(platform) + withName(ContainerName.of("easycontainers-$imageName")) + withNamespace(Namespace.TEST) + withImage(ImageURL.of("$defaultRegistryEndpoint/test/$imageName:latest")) + + withExecutionMode(executionMode) + + withEnv("LOG_TIME_MESSAGE", "Hello from $platform-container running as $executionMode") + + when (executionMode) { + + ExecutionMode.SERVICE -> { + withEnv("LOG_TIME_SLEEP", "1") + withEnv("LOG_TIME_EXIT_FLAG", "false") + } + + ExecutionMode.TASK -> { + withEnv("LOG_TIME_SLEEP", "1") + withEnv("LOG_TIME_EXIT_FLAG", "true") + withEnv("LOG_TIME_EXIT_CODE", "10") + withEnv("LOG_TIME_ITERATIONS", "5") + } + } + + // HTTP + withExposedPort(PortMappingName.HTTP, NetworkPort.HTTP) + withPortMapping(NetworkPort.HTTP, NetworkPort.of(mappedLocalHttpPort)) + + // SSH + withExposedPort(PortMappingName.SSH, NetworkPort.SSH) + withPortMapping(NetworkPort.SSH, NetworkPort.of(mappedLocalSshPort)) + + withIsEphemeral(ephemeral) + withOutputLineCallback { line -> println("$platform-'${imageName.uppercase()}'-CONTAINER-OUTPUT: $line") } + + containerBuilderCallback?.configure(this) + + }.build() + + log.debug("Container created: $container") + + val runtime = container.getRuntime() + log.debug("Container runtime: $runtime") + + runtime.start() + + Assertions.assertTrue(container.getState() == Container.State.INITIALIZING || container.getState() == Container.State.RUNNING) + + // Wait for the container to reach the running state + container.waitForState(Container.State.RUNNING, 30, TimeUnit.SECONDS) + + Assertions.assertEquals(Container.State.RUNNING, runtime.getContainer().getState()) + + Assertions.assertTrue(NetworkUtils.isTcpPortOpen("localhost", mappedLocalHttpPort)) + Assertions.assertTrue(NetworkUtils.isTcpPortOpen("localhost", mappedLocalSshPort)) + + return container + } + + fun shutdownContainer(container: Container) { + val runtime = container.getRuntime() + guardedExecution({ runtime.stop() }) + runtime.delete(true) + Assertions.assertEquals(Container.State.DELETED, runtime.getContainer().getState()) + } + + fun monitorDeadlocks() { + val scheduledExecutorService = Executors.newScheduledThreadPool(1) + val deadlockMonitor = Runnable { + val threadBean = ManagementFactory.getThreadMXBean() + log.debug("Checking for deadlocks") + val deadlockedThreads = threadBean.findDeadlockedThreads() + + deadlockedThreads?.let { + it.forEach { id -> + val threadInfo = threadBean.getThreadInfo(id) + log.warn("Deadlocked thread: $threadInfo") + } + } + + printNonSystemNonDaemonThreads() + } + scheduledExecutorService.scheduleAtFixedRate(deadlockMonitor, 0, 3, TimeUnit.SECONDS) + } + + fun waitForUserInput() { + // Your test code here... + + println("Press SPACE to continue...") + val scanner = Scanner(System.`in`) + var input = scanner.nextLine() + while (input != " ") { + println("Please press SPACE to continue...") + input = scanner.nextLine() + } + } + + fun printNonSystemNonDaemonThreads() { + val threadSet = Thread.getAllStackTraces().keys + + for (thread in threadSet) { + if (!thread.isDaemon && thread.threadGroup.name != "system") { + val stackTraceElements = thread.stackTrace + val threadInfo = "${thread.name}\n" + val elementsInfo = stackTraceElements.joinToString("\n") { "\tat $it" } + log.debug("$threadInfo$elementsInfo") + } + } + } + + fun getActualDir(hostDir: Path): Path { + return Path.of( + if (PlatformUtils.isWslInstalled()) { + PlatformUtils.convertUnixPathToWindowsWslPath(hostDir.toString()) + } else { + hostDir.toString() + } + ) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/k8s/NativeK8sTests.kt b/src/test/kotlin/test/acntech/easycontainers/k8s/NativeK8sTests.kt new file mode 100644 index 00000000..c2804b0b --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/k8s/NativeK8sTests.kt @@ -0,0 +1,73 @@ +package test.acntech.easycontainers.k8s + +import io.fabric8.kubernetes.client.KubernetesClientBuilder +import io.fabric8.kubernetes.client.dsl.ExecWatch +import no.acntech.easycontainers.kubernetes.K8sRuntime +import no.acntech.easycontainers.model.ContainerPlatformType +import no.acntech.easycontainers.model.ExecutionMode +import no.acntech.easycontainers.util.text.NEW_LINE +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import test.acntech.easycontainers.TestSupport.startContainer +import java.io.ByteArrayOutputStream +import java.io.OutputStream +import java.util.concurrent.TimeUnit + + +class NativeK8sTests { + + companion object { + private val log: Logger = LoggerFactory.getLogger(NativeK8sTests::class.java) + } + + private var client = KubernetesClientBuilder().build() + + @BeforeEach + fun setUp() { + log.info("Setting up") + client = KubernetesClientBuilder().build() + } + + @AfterEach + fun tearDown() { + log.info("Tearing down") + client.close() + } + + @Test + fun `test native exec`() { + val container = startContainer( + platform = ContainerPlatformType.KUBERNETES, + executionMode = ExecutionMode.SERVICE, + ephemeral = true, + ) + + val runtime = container.getRuntime() as K8sRuntime + + log.debug("Container started:$NEW_LINE$container") + + val execIn = "Hello".byteInputStream() + val execOut: OutputStream = ByteArrayOutputStream() + val execErr: OutputStream = ByteArrayOutputStream() + + val exec: ExecWatch = client + .pods() + .inNamespace(container.getNamespace().value) + .withName("to compile"/*runtime.getPodName()*/) + .inContainer(runtime.getName().value) + .readingInput(execIn) + .writingOutput(execOut) + .writingError(execErr) + .withTTY() //Optional + .exec("cat") + + TimeUnit.SECONDS.sleep(30) + + log.debug("Exec stdout: $execOut") + log.debug("Exec stderr: $execErr") + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/util/platform/PlatformUtilsTest.kt b/src/test/kotlin/test/acntech/easycontainers/util/platform/PlatformUtilsTest.kt new file mode 100644 index 00000000..ca2c6b7a --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/util/platform/PlatformUtilsTest.kt @@ -0,0 +1,78 @@ +package test.acntech.easycontainers.util.platform + +import no.acntech.easycontainers.util.platform.PlatformUtils.convertToDockerPath +import no.acntech.easycontainers.util.platform.PlatformUtils.createDirectoryInWsl +import no.acntech.easycontainers.util.platform.PlatformUtils.getWslDistroNames +import no.acntech.easycontainers.util.platform.PlatformUtils.getWslIpAddress +import no.acntech.easycontainers.util.platform.PlatformUtils.isDockerDesktopOnWindows +import no.acntech.easycontainers.util.platform.PlatformUtils.isWindows +import no.acntech.easycontainers.util.platform.PlatformUtils.isWslInstalled +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import org.slf4j.LoggerFactory +import java.nio.file.Paths + +class PlatformUtilsTest { + + private val log = LoggerFactory.getLogger(PlatformUtilsTest::class.java) + + @Test + fun `isWindows should return true if OS is Windows`() { + assertTrue(isWindows()) + } + + @Test + fun `isWslInstalled should return true if WSL is installed`() { + assertTrue(isWslInstalled()) + } + + @Test + fun `getWslDistroNames should return list of distros if WSL is installed`() { + assertDoesNotThrow { getWslDistroNames() } + } + + @Test + fun `isDockerDesktopInstalled should return true if Docker is installed`() { + assertFalse(isDockerDesktopOnWindows()) + } + + @Test + fun `getWslIpAddress should return non-null if WSL is installed`() { + val wslIpAddress = getWslIpAddress().also { log.info("WSL IP address: $it") } + assertNotNull(wslIpAddress) + } + + @Test + fun `createDirectoryInWsl should not throw for valid path and distro`() { + val wslDistroName = getWslDistroNames().first() + + assertDoesNotThrow { createDirectoryInWsl("/tmp/foo", wslDistroName) } + } + + @Test + fun `createDirectoryInWsl should throw for invalid distro`() { + assertThrows { + createDirectoryInWsl("/home/test", "nonExistentDistro") + } + } + + @Test + fun `convertToDockerPath should convert Windows path into valid WSL format`() { + + // Path on Windows are like 'C:\Users\test' + val winPath = Paths.get("C:\\Users\\test").also { + log.info("Windows path: $it") + } + + val dockerPath = convertToDockerPath(winPath).also { + log.info("Docker path: $it") + + } + + // Docker path should look like '/mnt/c/Users/test' + val expectedPath = "/mnt/c/Users/test" + + assertEquals(expectedPath, dockerPath) + } +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClient.kt b/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClient.kt new file mode 100644 index 00000000..4aa10cee --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClient.kt @@ -0,0 +1,23 @@ +package test.acntech.easycontainers.util.ssh + +/** + * A client for connecting to a remote host using SSH. + */ +interface SSHClient { + + /** + * Connects to the remote host using the given credentials. + * @param host the host to connect to + * @param port the port to connect to + * @param user the user to connect as + * @param password the password to use + * @return a session for executing commands on the remote host + */ + fun connect(host: String, port: Int, user: String, password: String): Session + + /** + * Disconnects from the remote host. + */ + fun disconnect() + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClientFactory.kt b/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClientFactory.kt new file mode 100644 index 00000000..2754fc14 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/util/ssh/SSHClientFactory.kt @@ -0,0 +1,15 @@ +package test.acntech.easycontainers.util.ssh + +import test.acntech.easycontainers.util.ssh.jcraft.JSchSSHClient + +object SSHClientFactory { + + /** + * Creates a new SSH client. + * @return a new SSH client + */ + fun createDefaultClient(): SSHClient { + return JSchSSHClient() + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/util/ssh/Session.kt b/src/test/kotlin/test/acntech/easycontainers/util/ssh/Session.kt new file mode 100644 index 00000000..9724b4f4 --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/util/ssh/Session.kt @@ -0,0 +1,32 @@ +package test.acntech.easycontainers.util.ssh + +interface Session { + + /** + * Executes the given command on the remote host. + * @param command the command to execute + * @return a triple containing the exit code, the standard output and the standard error + */ + fun runCommand(command: String): Triple + + /** + * Uploads a file from the local file system to the remote file system. + * @param localPath the path to the local file + * @param remotePath the path to the remote file + */ + fun uploadFile(localPath: String, remotePath: String) + + /** + * Downloads a file from the remote file system to the local file system. + * @param remotePath the path to the remote file + * @param localPath the path to the local file + */ + fun downloadFile(remotePath: String, localPath: String) + + /** + * Creates a directory on the remote file system. + * @param remotePath the path to the remote directory + */ + fun createRemoteDirectory(remotePath: String) + +} \ No newline at end of file diff --git a/src/test/kotlin/test/acntech/easycontainers/util/ssh/jcraft/JSchSSHClient.kt b/src/test/kotlin/test/acntech/easycontainers/util/ssh/jcraft/JSchSSHClient.kt new file mode 100644 index 00000000..2ca7190e --- /dev/null +++ b/src/test/kotlin/test/acntech/easycontainers/util/ssh/jcraft/JSchSSHClient.kt @@ -0,0 +1,114 @@ +package test.acntech.easycontainers.util.ssh.jcraft + +import com.jcraft.jsch.ChannelExec +import com.jcraft.jsch.ChannelSftp +import com.jcraft.jsch.JSch +import no.acntech.easycontainers.util.text.EMPTY_STRING +import no.acntech.easycontainers.util.text.FORWARD_SLASH +import no.acntech.easycontainers.util.text.NEW_LINE +import test.acntech.easycontainers.util.ssh.SSHClient +import test.acntech.easycontainers.util.ssh.Session +import java.io.BufferedReader +import java.io.InputStreamReader + +/** + * An implementation of [SSHClient] that uses the JCraft library. + */ +internal class JSchSSHClient : SSHClient { + + private val jsch = JSch() + + private lateinit var jschSession: com.jcraft.jsch.Session + + companion object { + private const val CHANNEL_TYPE_SFTP = "sftp" + private const val CHANNEL_TYPE_EXEC = "exec" + } + + override fun connect(host: String, port: Int, user: String, password: String): Session { + jschSession = jsch.getSession(user, host, port).apply { setPassword(password) } + return JSchSessionImpl() + } + + override fun disconnect() { + if (::jschSession.isInitialized && jschSession.isConnected) { + jschSession.disconnect() + } + } + + inner class JSchSessionImpl() : Session { + + init { + jschSession.setConfig("StrictHostKeyChecking", "no") + jschSession.connect() + } + + override fun runCommand(command: String): Triple { + val channel = jschSession.openChannel(CHANNEL_TYPE_EXEC) as ChannelExec + channel.setCommand(command) + + channel.inputStream = null + val stdout = BufferedReader(InputStreamReader(channel.inputStream)) + val stderr = BufferedReader(InputStreamReader(channel.errStream)) + + channel.connect() + + val output = generateSequence { stdout.readLine() }.joinToString(NEW_LINE) + val error = generateSequence { stderr.readLine() }.joinToString(NEW_LINE) + + val exitStatus = channel.exitStatus + + channel.disconnect() + + return Triple(exitStatus, output, error) + } + + override fun uploadFile(localPath: String, remotePath: String) { + val sftpChannel = jschSession.openChannel(CHANNEL_TYPE_SFTP) as ChannelSftp + sftpChannel.connect() + try { + // Get the remote directory from the remote path + val remoteDir = remotePath.substringBeforeLast(FORWARD_SLASH) + // Create the directory + createRemoteDirectory(remoteDir) + // Upload the file + sftpChannel.put(localPath, remotePath) + } finally { + sftpChannel.exit() + } + } + + override fun downloadFile(remotePath: String, localPath: String) { + val sftpChannel = jschSession.openChannel(CHANNEL_TYPE_SFTP) as ChannelSftp + sftpChannel.connect() + try { + sftpChannel.get(remotePath, localPath) + } finally { + sftpChannel.exit() + } + } + + override fun createRemoteDirectory(remotePath: String) { + val sftpChannel = jschSession.openChannel(CHANNEL_TYPE_SFTP) as ChannelSftp + sftpChannel.connect() + try { + val directories = remotePath.split(FORWARD_SLASH) + var currentDirectory = EMPTY_STRING + for (dir in directories) { + if (dir.isNotEmpty()) { + currentDirectory = "$currentDirectory/$dir" + try { + sftpChannel.lstat(currentDirectory) + } catch (e: com.jcraft.jsch.SftpException) { + // Directory does not exist. + sftpChannel.mkdir(currentDirectory) + } + } + } + } finally { + sftpChannel.exit() + } + } + } + +} \ No newline at end of file diff --git a/src/test/resources/env/README.md b/src/test/resources/env/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/test/resources/env/create-env.sh b/src/test/resources/env/create-env.sh new file mode 100644 index 00000000..4af06149 --- /dev/null +++ b/src/test/resources/env/create-env.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +NAMESPACE="test" +REPOSITORY="test" + +if [ -z "$DOCKER_HOST" ]; then + REGISTRY_IP="localhost" +else + DOCKER_HOST=${DOCKER_HOST/tcp:\/\//} + + # Split the DOCKER_HOST variable into an array based on ':' + IFS=':' read -ra ADDR <<< "$DOCKER_HOST" + + # Extract the IP + REGISTRY_IP=${ADDR[0]} +fi + +# Use a constant port for the registry +REGISTRY_PORT=5000 + +REGISTRY_HOST="$REGISTRY_IP:$REGISTRY_PORT" + +echo "Using registry host: $REGISTRY_HOST" + +# Check if the namespace already exists +if kubectl get namespace "$NAMESPACE" > /dev/null 2>&1; then + echo "Namespace '$NAMESPACE' already exists" +else + # Create the namespace + kubectl create namespace "$NAMESPACE" + # shellcheck disable=SC2181 + if [ $? -eq 0 ]; then + echo "Namespace '$NAMESPACE' created successfully" + else + echo "Failed to create namespace '$NAMESPACE'" + fi +fi + +# Create the service account, role and role binding +kubectl apply -f service-account.yaml +kubectl apply -f role.yaml +kubectl apply -f role-binding.yaml + +# Create the Kaniko persistent volume and persistent volume claim +kubectl apply -f kaniko-pv-docker-wsl.yaml +kubectl apply -f kaniko-pvc.yaml + +# Create the generic host share persistent volume and persistent volume claim +kubectl apply -f host-share-pv-docker-wsl.yaml +kubectl apply -f host-share-pvc.yaml + +# Start a local registry in Docker +#./docker/start-registry.sh + +# Start Portainer in Docker +#./docker/start-portainer.sh + +export DOCKER_CLI_AWS_NO_SIGN_REQUEST=1 + +# Build and push the test-service image +docker build -t "$REGISTRY_HOST/$REPOSITORY/container-test:latest" -f test-dockerfile . +docker push "$REGISTRY_HOST/$REPOSITORY/container-test:latest" + +# List the images in the registry +echo "Images in the registry:" +curl "http://$REGISTRY_HOST/v2/_catalog" + + + diff --git a/src/test/resources/env/docker/daemon.json b/src/test/resources/env/docker/daemon.json new file mode 100644 index 00000000..27384d30 --- /dev/null +++ b/src/test/resources/env/docker/daemon.json @@ -0,0 +1,3 @@ +{ + "insecure-registries": ["172.23.75.43:5000", "172.23.65.10:5000"] +} \ No newline at end of file diff --git a/src/test/resources/env/docker/override.conf b/src/test/resources/env/docker/override.conf new file mode 100644 index 00000000..1c57ee59 --- /dev/null +++ b/src/test/resources/env/docker/override.conf @@ -0,0 +1,8 @@ +# Override the docker.service file +# Normally located at /etc/systemd/system/docker.service.d/override.conf + +[Service] +# Override the ExecStart directive in the docker.service file +ExecStart= +# Set the ExecStart directive listen on all interfaces on port 2375 and the default Unix socket +ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \ No newline at end of file diff --git a/src/test/resources/env/docker/restart-docker.sh b/src/test/resources/env/docker/restart-docker.sh new file mode 100644 index 00000000..8de09298 --- /dev/null +++ b/src/test/resources/env/docker/restart-docker.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +sudo systemctl restart docker +sudo systemctl status docker +docker info \ No newline at end of file diff --git a/src/test/resources/env/docker/start-portainer.sh b/src/test/resources/env/docker/start-portainer.sh new file mode 100644 index 00000000..9ef3e634 --- /dev/null +++ b/src/test/resources/env/docker/start-portainer.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +DOCKER_HOST_IP=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}') + +docker kill portainer +docker rm portainer +docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v portainer_data:/data portainer/portainer-ce:latest -H tcp://$DOCKER_HOST_IP:2375 \ No newline at end of file diff --git a/src/test/resources/env/docker/start-registry.sh b/src/test/resources/env/docker/start-registry.sh new file mode 100644 index 00000000..eb4c42ad --- /dev/null +++ b/src/test/resources/env/docker/start-registry.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +docker kill registry +docker rm registry +docker run -d -p 5000:5000 --restart=always --name registry registry:latest diff --git a/src/test/resources/env/entrypoint.sh b/src/test/resources/env/entrypoint.sh new file mode 100644 index 00000000..bc0176d5 --- /dev/null +++ b/src/test/resources/env/entrypoint.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Start sshd in the background with the -D flag to avoid daemonizing +/usr/sbin/sshd -D & + +# Start lighttpd in the background +lighttpd -D -f /etc/lighttpd/lighttpd.conf & + +# Environment variables with defaults if not set +LOG_TIME_SLEEP=${LOG_TIME_SLEEP:-2} +LOG_TIME_EXIT_FLAG=${LOG_TIME_EXIT_FLAG:-false} +LOG_TIME_EXIT_CODE=${LOG_TIME_EXIT_CODE:-10} +LOG_TIME_ITERATIONS=${LOG_TIME_ITERATIONS:-5} +LOG_TIME_MESSAGE=${LOG_TIME_MESSAGE:-"Default message"} + +# Depending on the LOG_TIME_EXIT_FLAG, execute the log-time.sh script +# The `exec` command is used here to ensure that log-time.sh becomes the main process of the container +if [ "$LOG_TIME_EXIT_FLAG" = "true" ]; then + # shellcheck disable=SC2086 + exec /log-time.sh -e -s "$LOG_TIME_SLEEP" -x "$LOG_TIME_EXIT_CODE" -i "$LOG_TIME_ITERATIONS" -m "$LOG_TIME_MESSAGE" +else + exec /log-time.sh -s "$LOG_TIME_SLEEP" -m "$LOG_TIME_MESSAGE" +fi diff --git a/src/test/resources/env/host-share-pv-docker-desktop.yaml b/src/test/resources/env/host-share-pv-docker-desktop.yaml new file mode 100644 index 00000000..e0f3813b --- /dev/null +++ b/src/test/resources/env/host-share-pv-docker-desktop.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: kaniko-data-pv + labels: + type: local +spec: + storageClassName: hostpath + capacity: + storage: 100Mi + accessModes: + - ReadWriteMany + hostPath: + # The following path is specific to Docker Desktop for Windows + # See https://dev.to/nsieg/use-k8s-hostpath-volumes-in-docker-desktop-on-wsl2-4dcl + # + # Note that the path is accessible on WSL, on /mnt/wsl/share/host-share - note that only /mnt/wsl exists from before, + # the share/host-share sub-folder must be explicitly created, and is lost between Docker restarts. + # + # To access this folder from Windows, use \\wsl$\[distro]\mnt\wsl\share\host-share - e.g. for an Ubuntu distro, + # the path is \\wsl$\Ubuntu\mnt\wsl\share\host-share. In order to list available distros, run wsl -l -v from PowerShell, or + # wsl --list from a CMD prompt. + # + # For Docker Desktop on other platforms, Kind, Minikube, and other Kubernetes clusters on + # Windows or other platforms, see their respective documentation on host-path (or other local storage) + # volumes, and adjust this path accordingly. + path: /run/desktop/mnt/host/wsl/share/host-share \ No newline at end of file diff --git a/src/test/resources/env/host-share-pv-docker-wsl.yaml b/src/test/resources/env/host-share-pv-docker-wsl.yaml new file mode 100644 index 00000000..307ee828 --- /dev/null +++ b/src/test/resources/env/host-share-pv-docker-wsl.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: host-share-pv + labels: + type: local +spec: + storageClassName: standard + capacity: + storage: 100Mi + volumeMode: Filesystem + accessModes: + - ReadWriteMany + persistentVolumeReclaimPolicy: Retain + hostPath: + path: /share/ diff --git a/src/test/resources/env/host-share-pvc.yaml b/src/test/resources/env/host-share-pvc.yaml new file mode 100644 index 00000000..3d8b1029 --- /dev/null +++ b/src/test/resources/env/host-share-pvc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: host-share-pvc + namespace: test +spec: + storageClassName: standard + resources: + requests: + storage: 100Mi + accessModes: + - ReadWriteMany + volumeName: host-share-pv + diff --git a/src/test/resources/env/kaniko-pv-docker-desktop.yaml b/src/test/resources/env/kaniko-pv-docker-desktop.yaml new file mode 100644 index 00000000..15817c80 --- /dev/null +++ b/src/test/resources/env/kaniko-pv-docker-desktop.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: kaniko-data-pv + labels: + type: local +spec: + storageClassName: hostpath + capacity: + storage: 100Mi + accessModes: + - ReadWriteMany + hostPath: + # The following path is specific to Docker Desktop for Windows + # See https://dev.to/nsieg/use-k8s-hostpath-volumes-in-docker-desktop-on-wsl2-4dcl + # + # Note that the path is accessible on WSL, on /mnt/wsl/share/kaniko-data - not that only /mnt/wsl exists from before, + # the share/kaniko-data sub-folder must be explicitly created, and is lost between Docker restarts. + # + # To access this folder from Windows, use \\wsl$\[distro]\mnt\wsl\share\kaniko-data - e.g. for an Ubuntu distro, + # the path is \\wsl$\Ubuntu\mnt\wsl\share\kaniko-data. In order to list available distros, run wsl -l -v from PowerShell, or + # wsl --list from a CMD prompt. + # + # For Docker Desktop on other platforms, Kind, Minikube, and other Kubernetes clusters on + # Windows or other platforms, see their respective documentation on host-path (or other local storage) + # volumes, and adjust this path accordingly. + path: /run/desktop/mnt/host/wsl/share/kaniko-data \ No newline at end of file diff --git a/src/test/resources/env/kaniko-pv-docker-wsl.yaml b/src/test/resources/env/kaniko-pv-docker-wsl.yaml new file mode 100644 index 00000000..7a7c3670 --- /dev/null +++ b/src/test/resources/env/kaniko-pv-docker-wsl.yaml @@ -0,0 +1,30 @@ +# Works for Kind (also on WSL2) given that the cluster is created with a config like this: +# +# kind: Cluster +# apiVersion: kind.x-k8s.io/v1alpha4 +# nodes: +# - role: control-plane +# extraMounts: +# # Adjust this path according to your platform +# - hostPath: /home/[user-name]/kind/data/kaniko-data +# containerPath: /kaniko-data +# +# Start the cluster with: +# > kind create cluster --config kind-config.yaml + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: kaniko-data-pv + labels: + type: local +spec: + storageClassName: standard + capacity: + storage: 100Mi + volumeMode: Filesystem + accessModes: + - ReadWriteMany + persistentVolumeReclaimPolicy: Retain + hostPath: + path: /kaniko-data/ diff --git a/src/test/resources/env/kaniko-pvc.yaml b/src/test/resources/env/kaniko-pvc.yaml new file mode 100644 index 00000000..88d92dc7 --- /dev/null +++ b/src/test/resources/env/kaniko-pvc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: kaniko-data-pvc + namespace: test +spec: + storageClassName: standard + resources: + requests: + storage: 100Mi + accessModes: + - ReadWriteMany + volumeName: kaniko-data-pv diff --git a/src/test/resources/env/kind/README.md b/src/test/resources/env/kind/README.md new file mode 100644 index 00000000..9ea68f93 --- /dev/null +++ b/src/test/resources/env/kind/README.md @@ -0,0 +1,6 @@ +Install kind: +```bash +> [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64 +> chmod +x ./kind +> sudo mv ./kind /usr/local/bin/kind +``` \ No newline at end of file diff --git a/src/test/resources/env/kind/kind-config-template.yaml b/src/test/resources/env/kind/kind-config-template.yaml new file mode 100644 index 00000000..36887d13 --- /dev/null +++ b/src/test/resources/env/kind/kind-config-template.yaml @@ -0,0 +1,30 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +name: kind +networking: + apiServerAddress: 0.0.0.0 + apiServerPort: 6443 +nodes: + - role: control-plane + extraMounts: + - hostPath: ${kaniko-data} + containerPath: /kaniko-data + propagation: None + - hostPath: ${general-data} + containerPath: /share + propagation: None + extraPortMappings: + - containerPort: 30022 + hostPort: 30022 + listenAddress: 0.0.0.0 + protocol: TCP + - containerPort: 30080 + hostPort: 30080 + listenAddress: 0.0.0.0 + protocol: TCP +containerdConfigPatches: + - |- + [plugins."io.containerd.grpc.v1.cri".registry.mirrors."${ip-address}:5000"] + endpoint = ["http://${ip-address}:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."${ip-address}".tls] + insecure_skip_verify = true diff --git a/src/test/resources/env/kind/prepare-kind-config.sh b/src/test/resources/env/kind/prepare-kind-config.sh new file mode 100644 index 00000000..5abb7629 --- /dev/null +++ b/src/test/resources/env/kind/prepare-kind-config.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Define the path to the Kind config template +CONFIG_TEMPLATE="kind-config-template.yaml" +CONFIG_OUTPUT="kind-config.yaml" +KANIKO_DATA_SHARE="/home/thomas/kind/kaniko-data" +GLOBAL_DATA_SHARE="/home/thomas/kind/share" + + +# Use ifconfig to get the IP address of the primary network interface (e.g., eth0) +IP_ADDRESS=$(ifconfig eth0 | grep 'inet ' | awk '{ print $2 }' | head -n 1) + +# Check if we successfully obtained an IP address +if [ -z "$IP_ADDRESS" ]; then + echo "Failed to obtain IP address from ifconfig" + exit 1 +fi + +echo "Using IP address: $IP_ADDRESS" + +# Use sed to replace the placeholder with the actual IP address in the config file +sed -e "s/\${ip-address}/$IP_ADDRESS/g" \ + -e "s/\${kaniko-data}/$KANIKO_DATA_SHARE/g" \ + -e "s/\${general-data}/$GLOBAL_DATA_SHARE/g" \ + "$CONFIG_TEMPLATE" > "$CONFIG_OUTPUT" + +echo "Config file has been prepared and saved to: $CONFIG_OUTPUT" diff --git a/src/test/resources/env/kind/start-kind.sh b/src/test/resources/env/kind/start-kind.sh new file mode 100644 index 00000000..6e47a076 --- /dev/null +++ b/src/test/resources/env/kind/start-kind.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +kind delete cluster --name test +./prepare-kind-config.sh +kind create cluster --name test --config kind-config.yaml diff --git a/src/test/resources/env/log-time.sh b/src/test/resources/env/log-time.sh new file mode 100644 index 00000000..2ad1622d --- /dev/null +++ b/src/test/resources/env/log-time.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# Default values +sleep_time=2 # Default sleep time +exit_flag=0 # Exit flag not set by default +exit_code=10 # Default exit value +iterations=3 # Default number of iterations +message="Default message" # Default message + +# Parse command-line options +while getopts 'es:x:i:m:' flag; do + case "${flag}" in + e) exit_flag=1 ;; # Set exit flag + s) sleep_time="${OPTARG}" ;; # Set sleep time + x) exit_code="${OPTARG}" ;; # Set custom exit value + i) iterations="${OPTARG}" ;; # Set custom number of iterations + m) message="${OPTARG}" ;; # Set custom message + *) echo "Unexpected option: ${flag}" ; exit 1 ;; + esac +done + +echo "Exit flag: ${exit_flag}" +echo "Sleep time: ${sleep_time}" +echo "Message: ${message}" + +count=1 + +if [ "${exit_flag}" -eq 1 ]; then + echo "Iterations: ${iterations}" + echo "Exit code: ${exit_code}" + # Run the exit version + while [ $count -le "${iterations}" ] + do + echo "${count}: $(date) - ${message}" + count=$((count+1)) + sleep "${sleep_time}" + done + echo "Exiting with code ${exit_code}" + exit "${exit_code}" +else + # Run the infinite version + while true + do + echo "${count}: $(date) - ${message}" + count=$((count+1)) + sleep "${sleep_time}" + done +fi \ No newline at end of file diff --git a/src/test/resources/env/role-binding.yaml b/src/test/resources/env/role-binding.yaml new file mode 100644 index 00000000..dab86ad3 --- /dev/null +++ b/src/test/resources/env/role-binding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: test-sa-rolebinding + namespace: test +subjects: + - kind: ServiceAccount + name: test-sa + namespace: test +roleRef: + kind: Role + name: test-sa-role + apiGroup: rbac.authorization.k8s.io diff --git a/src/test/resources/env/role.yaml b/src/test/resources/env/role.yaml new file mode 100644 index 00000000..80a24638 --- /dev/null +++ b/src/test/resources/env/role.yaml @@ -0,0 +1,15 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: test-sa-role + namespace: test +rules: + - apiGroups: [""] # Core API group + resources: ["services", "pods", "pods/log", "pods/portforward"] + verbs: ["get", "list", "create", "delete", "update", "watch"] + - apiGroups: ["apps"] # "apps" API group + resources: ["deployments"] + verbs: ["get", "list", "create", "delete", "update", "watch"] + - apiGroups: ["batch"] # "batch" API group + resources: ["jobs"] + verbs: ["get", "list", "create", "delete", "update", "watch"] \ No newline at end of file diff --git a/src/test/resources/env/service-account.yaml b/src/test/resources/env/service-account.yaml new file mode 100644 index 00000000..b89b573f --- /dev/null +++ b/src/test/resources/env/service-account.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: test-sa + namespace: test diff --git a/src/test/resources/env/test-dockerfile b/src/test/resources/env/test-dockerfile new file mode 100644 index 00000000..05db6e08 --- /dev/null +++ b/src/test/resources/env/test-dockerfile @@ -0,0 +1,45 @@ +# Use Alpine Linux as the base image +FROM alpine:latest + +# Install curl, httpie, openssh, lighttpd, bash, and other necessary dependencies +RUN apk add --no-cache curl netcat-openbsd gzip openssh lighttpd bash + +# Set bash as the default shell for the root user +RUN sed -i 's#/bin/ash#/bin/bash#' /etc/passwd + +# Setup SSH +RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ + && sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config \ + && echo "root:root" | chpasswd \ + && ssh-keygen -A + +# Create a directory for the web content +RUN mkdir -p /var/www/localhost/htdocs + +# Create an index.html file with a message +RUN echo "

      Hello from httpdlight

      " > /var/www/localhost/htdocs/index.html + +# Copy the log-time.sh script from the build context to the container +COPY log-time.sh /log-time.sh + +# Make the log-time.sh script executable +RUN chmod +x /log-time.sh + +# Copy the entrypoint script from the build context to the container +COPY entrypoint.sh /entrypoint.sh + +# Make the entry script executable +RUN chmod +x /entrypoint.sh + +RUN mkdir -p /tmp/test1 +RUN chmod 777 /tmp/test1 + +RUN mkdir -p /tmp/test2 +RUN chmod 777 /tmp/test2 + +# Expose ports for SSH (22) and lighttpd (80) +EXPOSE 22 +EXPOSE 80 + +# Define the container's default behavior +CMD ["/entrypoint.sh"] diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml new file mode 100644 index 00000000..1c560adb --- /dev/null +++ b/src/test/resources/logback-test.xml @@ -0,0 +1,34 @@ + + + + + + %yellow(%d{yyyy-MM-dd}) | %green(%d{HH:mm:ss.SSS}) | %10.10X{requestId:-N/A} | %10.10X{correlationId:-N/A} | %magenta(%-10.10thread) | %highlight(%5p) | %cyan(%-20.20logger{20}) | %highlight(%m%n) + + utf8 + + + + + application-test.log + false + + + %d{yyyy-MM-dd} | %d{HH:mm:ss.SSS} | %10.10X{requestId:-N/A} | %10.10X{correlationId:-N/A} | %-10.10thread | %5p | %-20.20logger{20} | %m%n + + utf8 + + + + + + + + + + + + + + + \ No newline at end of file